diff --git a/src/main/java/com/ycwl/basic/device/operator/VptPassiveStorageOperator.java b/src/main/java/com/ycwl/basic/device/operator/VptPassiveStorageOperator.java index 7b4515a..77eab0d 100644 --- a/src/main/java/com/ycwl/basic/device/operator/VptPassiveStorageOperator.java +++ b/src/main/java/com/ycwl/basic/device/operator/VptPassiveStorageOperator.java @@ -1,6 +1,8 @@ package com.ycwl.basic.device.operator; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ycwl.basic.device.entity.common.FileObject; import com.ycwl.basic.device.entity.vpt_passive.VptPassiveStorageConfig; import com.ycwl.basic.device.entity.wvp_passive.WvpPassiveStorageConfig; @@ -9,6 +11,7 @@ import com.ycwl.basic.storage.utils.StorageUtil; import com.ycwl.basic.utils.SnowFlakeUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.data.redis.core.RedisTemplate; import java.util.ArrayList; import java.util.Collections; @@ -16,6 +19,7 @@ import java.util.Date; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Slf4j @@ -25,12 +29,18 @@ public class VptPassiveStorageOperator extends ADeviceStorageOperator { public Long scenicId; public Long deviceId; public String deviceNo; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") public Date startTime; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") public Date endTime; } private static List taskList = new CopyOnWriteArrayList<>(); private static ConcurrentHashMap fileListMap = new ConcurrentHashMap<>(); + private static RedisTemplate redisTemplate = null; + private static final String TASK_KEY = "vpt:task:s%s:d%s:"; private VptPassiveStorageConfig config; @@ -38,6 +48,10 @@ public class VptPassiveStorageOperator extends ADeviceStorageOperator { loadConfig(configJson); } + public static void setRedisTemplate(RedisTemplate redisTemplate) { + VptPassiveStorageOperator.redisTemplate = redisTemplate; + } + public static void onReceiveResult(Long taskId, FileObject fileObject) { if (fileObject == null) { log.info("任务{}获取视频失败!", taskId); @@ -77,7 +91,11 @@ public class VptPassiveStorageOperator extends ADeviceStorageOperator { } task.startTime = startDate; task.endTime = endDate; - taskList.add(task); + if (redisTemplate == null) { + taskList.add(task); + } else { + redisTemplate.opsForValue().set(String.format(TASK_KEY, task.scenicId, task.deviceNo) + task.taskId, JSON.toJSONString(task), 10 * 60L, TimeUnit.SECONDS); + } log.info("任务{}获取视频开始!共{}", task.taskId, taskList.size()); Date taskStartTime = new Date(); while (true) { diff --git a/src/main/java/com/ycwl/basic/device/operator/WvpPassiveStorageOperator.java b/src/main/java/com/ycwl/basic/device/operator/WvpPassiveStorageOperator.java index 8ed116a..af91b85 100644 --- a/src/main/java/com/ycwl/basic/device/operator/WvpPassiveStorageOperator.java +++ b/src/main/java/com/ycwl/basic/device/operator/WvpPassiveStorageOperator.java @@ -1,12 +1,15 @@ package com.ycwl.basic.device.operator; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ycwl.basic.device.entity.common.FileObject; import com.ycwl.basic.device.entity.wvp_passive.WvpPassiveStorageConfig; import com.ycwl.basic.storage.utils.StorageUtil; import com.ycwl.basic.utils.SnowFlakeUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.data.redis.core.RedisTemplate; import java.util.ArrayList; import java.util.Collections; @@ -14,21 +17,29 @@ import java.util.Date; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Slf4j public class WvpPassiveStorageOperator extends ADeviceStorageOperator { + public static class Task { public Long taskId; public Long scenicId; public Long deviceId; public String deviceNo; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") public Date startTime; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") public Date endTime; } private static List taskList = new CopyOnWriteArrayList<>(); private static ConcurrentHashMap fileListMap = new ConcurrentHashMap<>(); + private static RedisTemplate redisTemplate = null; + private static final String TASK_KEY = "wvp:task:s%s:d%s:"; private WvpPassiveStorageConfig config; @@ -36,6 +47,11 @@ public class WvpPassiveStorageOperator extends ADeviceStorageOperator { loadConfig(configJson); } + + public static void setRedisTemplate(RedisTemplate redisTemplate) { + WvpPassiveStorageOperator.redisTemplate = redisTemplate; + } + public static void onReceiveResult(Long taskId, FileObject fileObject) { if (fileObject == null) { log.info("任务{}获取视频失败!", taskId); @@ -72,7 +88,11 @@ public class WvpPassiveStorageOperator extends ADeviceStorageOperator { } task.startTime = startDate; task.endTime = endDate; - taskList.add(task); + if (redisTemplate == null) { + taskList.add(task); + } else { + redisTemplate.opsForValue().set(String.format(TASK_KEY, task.scenicId, task.deviceNo) + task.taskId, JSON.toJSONString(task), 10 * 60L, TimeUnit.SECONDS); + } Date taskStartTime = new Date(); while (true) { if (new Date().getTime() - taskStartTime.getTime() > 60000L) { diff --git a/src/main/java/com/ycwl/basic/device/starter/DeviceStorageOperatorStarter.java b/src/main/java/com/ycwl/basic/device/starter/DeviceStorageOperatorStarter.java new file mode 100644 index 0000000..57a23be --- /dev/null +++ b/src/main/java/com/ycwl/basic/device/starter/DeviceStorageOperatorStarter.java @@ -0,0 +1,20 @@ +package com.ycwl.basic.device.starter; + +import com.ycwl.basic.device.operator.VptPassiveStorageOperator; +import com.ycwl.basic.device.operator.WvpPassiveStorageOperator; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.core.RedisTemplate; + +@Configuration +public class DeviceStorageOperatorStarter implements InitializingBean { + @Autowired + private RedisTemplate redisTemplate; + + @Override + public void afterPropertiesSet() { + WvpPassiveStorageOperator.setRedisTemplate(redisTemplate); + VptPassiveStorageOperator.setRedisTemplate(redisTemplate); + } +} diff --git a/src/main/java/com/ycwl/basic/stats/controller/TraceController.java b/src/main/java/com/ycwl/basic/stats/controller/TraceController.java index 61477f8..a61395c 100644 --- a/src/main/java/com/ycwl/basic/stats/controller/TraceController.java +++ b/src/main/java/com/ycwl/basic/stats/controller/TraceController.java @@ -4,8 +4,8 @@ import com.ycwl.basic.annotation.IgnoreToken; import com.ycwl.basic.stats.dto.AddTraceReq; import com.ycwl.basic.stats.service.StatsService; import com.ycwl.basic.stats.util.StatsUtil; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -38,6 +38,9 @@ public class TraceController { traceId = StatsUtil.createUuid(); response.setHeader("Set-TraceId", traceId); } + if (StringUtils.isEmpty(req.getParams())) { + req.setParams(null); + } statsService.addRecord(traceId, req.getAction(), req.getIdentifier(), req.getParams()); } }