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

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;
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<Task> taskList = new CopyOnWriteArrayList<>();
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;
@ -38,6 +48,10 @@ public class VptPassiveStorageOperator extends ADeviceStorageOperator {
loadConfig(configJson);
}
public static void setRedisTemplate(RedisTemplate<String, String> 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;
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) {

View File

@ -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<Task> taskList = new CopyOnWriteArrayList<>();
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;
@ -36,6 +47,11 @@ public class WvpPassiveStorageOperator extends ADeviceStorageOperator {
loadConfig(configJson);
}
public static void setRedisTemplate(RedisTemplate<String, String> 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;
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) {

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