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);
|
}
|
}
|