diff --git a/stwzhj-modules/stwzhj-data2es/pom.xml b/stwzhj-modules/stwzhj-data2es/pom.xml index 51890e0c..3b25df35 100644 --- a/stwzhj-modules/stwzhj-data2es/pom.xml +++ b/stwzhj-modules/stwzhj-data2es/pom.xml @@ -53,6 +53,11 @@ stwzhj-common-mybatis + + org.dromara + stwzhj-common-job + + org.dromara stwzhj-common-dubbo diff --git a/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/schedule/RedisOnlineUserSchedule.java b/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/schedule/RedisOnlineUserSchedule.java deleted file mode 100644 index 17bc52d3..00000000 --- a/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/schedule/RedisOnlineUserSchedule.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.dromara.data2es.schedule; - -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.date.DateUnit; -import cn.hutool.core.date.DateUtil; -import cn.hutool.json.JSONObject; -import org.dromara.common.redis.utils.RedisUtils; -import org.dromara.data2es.domain.EsGpsInfoVO2; -import org.dromara.data2es.service.IGpsService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.annotation.Scheduled; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -/** - *

description:

- * - * @author chenle - * @date 2021-05-18 18:23 - */ - -@Configuration -public class RedisOnlineUserSchedule { - - @Autowired - IGpsService gpsService; - - @Scheduled(cron = "0 0/20 * * * ?") - public void redisTimeOutRemove(){ - List jlist = RedisUtils.searchAndGetKeysValues("online_users:*"); - List gpsInfoVO2s = new ArrayList<>(); - for (JSONObject job : jlist) { - String deviceType = job.getStr("deviceType"); - if ("05".equals(deviceType)){ - continue; - } - Integer online = job.getInt("online"); - if (0 == online){ - continue; - } - EsGpsInfoVO2 vo2 = BeanUtil.toBean(job, EsGpsInfoVO2.class); - if (1 == vo2.getOnline() && DateUtil.between(vo2.getGpsTime(), new Date(), DateUnit.SECOND) > 1800L){ - vo2.setOnline(0); - gpsInfoVO2s.add(vo2); - } - } - if (gpsInfoVO2s.size() > 0){ - gpsService.updateDataStatus(gpsInfoVO2s); - } - } - - -} diff --git a/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/schedule/RedisOnlineUserTimeoutExecutor.java b/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/schedule/RedisOnlineUserTimeoutExecutor.java new file mode 100644 index 00000000..216905c5 --- /dev/null +++ b/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/schedule/RedisOnlineUserTimeoutExecutor.java @@ -0,0 +1,83 @@ +package org.dromara.data2es.schedule; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; +import cn.hutool.json.JSONObject; +import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; +import com.aizuda.snailjob.client.job.core.dto.JobArgs; +import com.aizuda.snailjob.client.model.ExecuteResult; +import com.aizuda.snailjob.common.core.model.JobContext; +import com.aizuda.snailjob.common.log.SnailJobLog; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.redis.utils.RedisUtils; +import org.dromara.data2es.domain.EsGpsInfoVO2; +import org.dromara.data2es.service.IGpsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + *

description:

+ * + */ + +@Slf4j +@Component +@JobExecutor(name = "redisOnlineUserTimeoutRemove") // 任务执行器名称,需与控制台一致 +public class RedisOnlineUserTimeoutExecutor { + + @Autowired + private IGpsService gpsService; + + public ExecuteResult jobExecute(JobArgs jobArgs) { + try { + SnailJobLog.LOCAL.info("开始执行 Redis 在线用户超时清理任务"); + + List jlist = RedisUtils.searchAndGetKeysValues("online_users:*"); + List gpsInfoVO2s = new ArrayList<>(); + + for (JSONObject job : jlist) { + String deviceType = job.getStr("deviceType"); + + Integer online = job.getInt("online"); + if (0 == online) { + continue; + } + EsGpsInfoVO2 vo2 = BeanUtil.toBean(job, EsGpsInfoVO2.class); + if ("05".equals(deviceType)) { + if (1 == vo2.getOnline() && DateUtil.between(vo2.getGpsTime(), new Date(), DateUnit.SECOND) > 86400L) { + vo2.setOnline(0); + gpsInfoVO2s.add(vo2); + } + }else { + if (1 == vo2.getOnline() && DateUtil.between(vo2.getGpsTime(), new Date(), DateUnit.SECOND) > 1800L) { + vo2.setOnline(0); + gpsInfoVO2s.add(vo2); + } + } + + } + + if (!gpsInfoVO2s.isEmpty()) { + gpsService.updateDataStatus(gpsInfoVO2s); + String msg = "成功更新 " + gpsInfoVO2s.size() + " 个超时设备为离线状态"; + SnailJobLog.LOCAL.info(msg); + return ExecuteResult.success(msg); + } else { + SnailJobLog.LOCAL.info("无超时设备需要处理"); + return ExecuteResult.success("无超时设备"); + } + + } catch (Exception e) { + String errorMsg = "Redis在线用户清理任务异常: " + e.getMessage(); + SnailJobLog.LOCAL.error(errorMsg, e); + return ExecuteResult.failure(errorMsg); + } + } +} diff --git a/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/service/impl/GpsServiceImpl.java b/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/service/impl/GpsServiceImpl.java index 662cae16..087c518a 100644 --- a/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/service/impl/GpsServiceImpl.java +++ b/stwzhj-modules/stwzhj-data2es/src/main/java/org/dromara/data2es/service/impl/GpsServiceImpl.java @@ -124,7 +124,7 @@ public class GpsServiceImpl implements IGpsService { requestHandler.sendToKafka(info); } - requestHandler.redisOnlineUserBatch(onlineUserDataMap, 864000); //存放30天 + requestHandler.redisOnlineUserBatch(onlineUserDataMap, 864000); //存放10天 requestHandler.redisOnlineUserBatch(orgCodeDataMap, 1800); //此处和buildRedisMap方法判断在线的时间一直 // requestHandler.redisDeleteBatch(deleteKeys); //此处换成了数据库的模式 所以这个就不用了 diff --git a/stwzhj-modules/stwzhj-system/src/main/java/org/dromara/system/schedule/DeviceRedisSchedule.java b/stwzhj-modules/stwzhj-system/src/main/java/org/dromara/system/schedule/DeviceRedisSchedule.java index 802b2531..5dd50530 100644 --- a/stwzhj-modules/stwzhj-system/src/main/java/org/dromara/system/schedule/DeviceRedisSchedule.java +++ b/stwzhj-modules/stwzhj-system/src/main/java/org/dromara/system/schedule/DeviceRedisSchedule.java @@ -46,7 +46,7 @@ public class DeviceRedisSchedule { } @PostConstruct - @Scheduled(cron = "0 0 0/2 * * ?") + @Scheduled(cron = "0 0 0/1 * * ?") public void handleDeviceInfoToRedis(){ if (null == lastUpdateTime || "".equals(lastUpdateTime)){ log.error("lastUpdateTime=null"); diff --git a/stwzhj-visual/stwzhj-snailjob-server/src/main/resources/logback-plus.xml b/stwzhj-visual/stwzhj-snailjob-server/src/main/resources/logback-plus.xml index ff21c65d..4b86cd7a 100644 --- a/stwzhj-visual/stwzhj-snailjob-server/src/main/resources/logback-plus.xml +++ b/stwzhj-visual/stwzhj-snailjob-server/src/main/resources/logback-plus.xml @@ -1,26 +1,44 @@ - - + + + + - - - - + + + ${log.path}/info.${log.file}.log + + INFO + ACCEPT + DENY + + + ${log.path}/info/info.${log.file}.%d{yyyy-MM-dd}.%i.log.gz + ${MAX_FILE_SIZE} + ${MAX_HISTORY} + - ${console.log.pattern} - utf-8 + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - + + + ${log.path}/error.${log.file}.log + + ERROR + + + ${log.path}/error/error.${log.file}.%d{yyyy-MM-dd}.%i.log.gz + ${MAX_FILE_SIZE} + ${MAX_HISTORY} + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + @@ -28,7 +46,8 @@ - + +