几个高频/轮询接口迁走了

This commit is contained in:
2025-04-27 04:33:01 +08:00
parent 8ef2ef4b15
commit 5a4f6a5af3
4 changed files with 64 additions and 3 deletions

View File

@ -1,6 +1,8 @@
package com.ycwl.basic.device.operator; package com.ycwl.basic.device.operator;
import com.alibaba.fastjson.JSON; 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.common.FileObject;
import com.ycwl.basic.device.entity.vpt_passive.VptPassiveStorageConfig; import com.ycwl.basic.device.entity.vpt_passive.VptPassiveStorageConfig;
import com.ycwl.basic.device.entity.wvp_passive.WvpPassiveStorageConfig; 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 com.ycwl.basic.utils.SnowFlakeUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.RedisTemplate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -16,6 +19,7 @@ import java.util.Date;
import java.util.List; import java.util.List;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
@ -25,12 +29,18 @@ public class VptPassiveStorageOperator extends ADeviceStorageOperator {
public Long scenicId; public Long scenicId;
public Long deviceId; public Long deviceId;
public String deviceNo; public String deviceNo;
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
public Date startTime; public Date startTime;
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
public Date endTime; public Date endTime;
} }
private static List<Task> taskList = new CopyOnWriteArrayList<>(); private static List<Task> taskList = new CopyOnWriteArrayList<>();
private static ConcurrentHashMap<Long, FileObject> fileListMap = new ConcurrentHashMap<>(); private static ConcurrentHashMap<Long, FileObject> fileListMap = new ConcurrentHashMap<>();
private static RedisTemplate<String, String> redisTemplate = null;
private static final String TASK_KEY = "vpt:task:s%s:d%s:";
private VptPassiveStorageConfig config; private VptPassiveStorageConfig config;
@ -38,6 +48,10 @@ public class VptPassiveStorageOperator extends ADeviceStorageOperator {
loadConfig(configJson); loadConfig(configJson);
} }
public static void setRedisTemplate(RedisTemplate<String, String> redisTemplate) {
VptPassiveStorageOperator.redisTemplate = redisTemplate;
}
public static void onReceiveResult(Long taskId, FileObject fileObject) { public static void onReceiveResult(Long taskId, FileObject fileObject) {
if (fileObject == null) { if (fileObject == null) {
log.info("任务{}获取视频失败!", taskId); log.info("任务{}获取视频失败!", taskId);
@ -77,7 +91,11 @@ public class VptPassiveStorageOperator extends ADeviceStorageOperator {
} }
task.startTime = startDate; task.startTime = startDate;
task.endTime = endDate; 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()); log.info("任务{}获取视频开始!共{}", task.taskId, taskList.size());
Date taskStartTime = new Date(); Date taskStartTime = new Date();
while (true) { while (true) {

View File

@ -1,12 +1,15 @@
package com.ycwl.basic.device.operator; package com.ycwl.basic.device.operator;
import com.alibaba.fastjson.JSON; 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.common.FileObject;
import com.ycwl.basic.device.entity.wvp_passive.WvpPassiveStorageConfig; import com.ycwl.basic.device.entity.wvp_passive.WvpPassiveStorageConfig;
import com.ycwl.basic.storage.utils.StorageUtil; import com.ycwl.basic.storage.utils.StorageUtil;
import com.ycwl.basic.utils.SnowFlakeUtil; import com.ycwl.basic.utils.SnowFlakeUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.RedisTemplate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -14,21 +17,29 @@ import java.util.Date;
import java.util.List; import java.util.List;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
public class WvpPassiveStorageOperator extends ADeviceStorageOperator { public class WvpPassiveStorageOperator extends ADeviceStorageOperator {
public static class Task { public static class Task {
public Long taskId; public Long taskId;
public Long scenicId; public Long scenicId;
public Long deviceId; public Long deviceId;
public String deviceNo; public String deviceNo;
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
public Date startTime; public Date startTime;
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
public Date endTime; public Date endTime;
} }
private static List<Task> taskList = new CopyOnWriteArrayList<>(); private static List<Task> taskList = new CopyOnWriteArrayList<>();
private static ConcurrentHashMap<Long, FileObject> fileListMap = new ConcurrentHashMap<>(); private static ConcurrentHashMap<Long, FileObject> fileListMap = new ConcurrentHashMap<>();
private static RedisTemplate<String, String> redisTemplate = null;
private static final String TASK_KEY = "wvp:task:s%s:d%s:";
private WvpPassiveStorageConfig config; private WvpPassiveStorageConfig config;
@ -36,6 +47,11 @@ public class WvpPassiveStorageOperator extends ADeviceStorageOperator {
loadConfig(configJson); loadConfig(configJson);
} }
public static void setRedisTemplate(RedisTemplate<String, String> redisTemplate) {
WvpPassiveStorageOperator.redisTemplate = redisTemplate;
}
public static void onReceiveResult(Long taskId, FileObject fileObject) { public static void onReceiveResult(Long taskId, FileObject fileObject) {
if (fileObject == null) { if (fileObject == null) {
log.info("任务{}获取视频失败!", taskId); log.info("任务{}获取视频失败!", taskId);
@ -72,7 +88,11 @@ public class WvpPassiveStorageOperator extends ADeviceStorageOperator {
} }
task.startTime = startDate; task.startTime = startDate;
task.endTime = endDate; 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(); Date taskStartTime = new Date();
while (true) { while (true) {
if (new Date().getTime() - taskStartTime.getTime() > 60000L) { if (new Date().getTime() - taskStartTime.getTime() > 60000L) {

View File

@ -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<String, String> redisTemplate;
@Override
public void afterPropertiesSet() {
WvpPassiveStorageOperator.setRedisTemplate(redisTemplate);
VptPassiveStorageOperator.setRedisTemplate(redisTemplate);
}
}

View File

@ -4,8 +4,8 @@ import com.ycwl.basic.annotation.IgnoreToken;
import com.ycwl.basic.stats.dto.AddTraceReq; import com.ycwl.basic.stats.dto.AddTraceReq;
import com.ycwl.basic.stats.service.StatsService; import com.ycwl.basic.stats.service.StatsService;
import com.ycwl.basic.stats.util.StatsUtil; import com.ycwl.basic.stats.util.StatsUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; 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.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -38,6 +38,9 @@ public class TraceController {
traceId = StatsUtil.createUuid(); traceId = StatsUtil.createUuid();
response.setHeader("Set-TraceId", traceId); response.setHeader("Set-TraceId", traceId);
} }
if (StringUtils.isEmpty(req.getParams())) {
req.setParams(null);
}
statsService.addRecord(traceId, req.getAction(), req.getIdentifier(), req.getParams()); statsService.addRecord(traceId, req.getAction(), req.getIdentifier(), req.getParams());
} }
} }