package com.gk.hotwork.Scheduls.location; import com.alibaba.fastjson.JSONObject; import com.gk.hotwork.Config.Oauth2.IRedisService; import com.gk.hotwork.Domain.DeviceLocation; import com.gk.hotwork.Domain.DevicePing; import com.gk.hotwork.Domain.DevicePressKey; import com.gk.hotwork.Domain.Exception.BusinessException; import com.gk.hotwork.Domain.Utils.StringUtils; import com.gk.hotwork.Service.DeviceLocationService; import com.gk.hotwork.Service.DevicePingService; import com.gk.hotwork.Service.DevicePressKeyService; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; //@Component //@EnableScheduling //@ConditionalOnProperty(prefix = "scheduling",name = "enabled",havingValue = "true") public class DeviceDataPersisting { private Logger logger = LogManager.getLogger(DeviceDataPersisting.class); @Value("${scheduling.enabled}") private boolean isSwitch; @Value("${slice.size}") private Integer sliceSize; @Autowired private IRedisService redisService; @Autowired private DevicePingService devicePingService; @Autowired private DevicePressKeyService devicePressKeyService; @Autowired private DeviceLocationService deviceLocationService; // @Scheduled(cron = "0/1 * * * * ?") //每隔1秒执行一次 public void locationDataPersisting() { redisService.setDbIndex(1); String key = "device:location"; while (redisService.hasKey(key) && redisService.listSize(key) > 0) { try { String res = redisService.leftPop(key); if (StringUtils.isBlank(res)) return; DeviceLocation deviceLocation = JSONObject.parseObject(res, DeviceLocation.class); deviceLocation.setCreateTime(new Date()); deviceLocationService.insertRecord(deviceLocation); } catch (BusinessException e) { e.printStackTrace(); logger.warn(e.getMessage()); } } } // @Scheduled(cron = "0/10 * * * * ?") //每隔10秒执行一次 public void pingDataPersisting() { redisService.setDbIndex(2); String key = "device:ping"; while (redisService.hasKey(key) && redisService.listSize(key) > 0){ String res = redisService.leftPop(key); if (StringUtils.isBlank(res)) return; DevicePing devicePing = JSONObject.parseObject(res, DevicePing.class); devicePing.setCreateTime(new Date()); devicePingService.save(devicePing); } } @Scheduled(cron = "0/10 * * * * ?") //每隔10秒执行一次 public void pressKeyDataPersisting() { redisService.setDbIndex(3); String key = "device:presskey"; while (redisService.hasKey(key) && redisService.listSize(key) > 0){ String res = redisService.leftPop(key); if (StringUtils.isBlank(res)) return; DevicePressKey devicePressKey = JSONObject.parseObject(res, DevicePressKey.class); devicePressKey.setCreateTime(new Date()); devicePressKeyService.save(devicePressKey); } } /** * @Description: 定位信息只保留90天信息 每天0点执行 * @date 2021/12/27 15:12 */ @Scheduled(cron = "0 0 0 * * ?") public void deviceLocationCleanUp() { //location deviceLocationService.cleanUp(sliceSize,90); } }