From 5a4f6a5af399908a19963a97fc5432e0258192c1 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 27 Apr 2025 04:33:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=A0=E4=B8=AA=E9=AB=98=E9=A2=91/=E8=BD=AE?= =?UTF-8?q?=E8=AF=A2=E6=8E=A5=E5=8F=A3=E8=BF=81=E8=B5=B0=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operator/VptPassiveStorageOperator.java | 20 ++++++++++++++++- .../operator/WvpPassiveStorageOperator.java | 22 ++++++++++++++++++- .../starter/DeviceStorageOperatorStarter.java | 20 +++++++++++++++++ .../stats/controller/TraceController.java | 5 ++++- 4 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/ycwl/basic/device/starter/DeviceStorageOperatorStarter.java 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()); } }