|
@@ -7,11 +7,14 @@ import cn.hutool.json.JSONUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.ozs.common.core.domain.entity.SysDictData;
|
|
|
import com.ozs.common.core.redis.RedisCache;
|
|
|
+import com.ozs.common.utils.AppendUtils;
|
|
|
import com.ozs.common.utils.DictUtils;
|
|
|
import com.ozs.service.entity.BaseCameraManagement;
|
|
|
+import com.ozs.service.entity.BaseRailwayManagement;
|
|
|
import com.ozs.service.entity.MsgAlarm;
|
|
|
import com.ozs.service.entity.vo.BaseCameraVO;
|
|
|
import com.ozs.service.mapper.BaseCameraManagementMapper;
|
|
|
+import com.ozs.service.mapper.BaseRailwayManagementMapper;
|
|
|
import com.ozs.service.mapper.MsgAlarmMapper;
|
|
|
import com.ozs.service.service.RedisService;
|
|
|
import com.ozs.system.service.ISysDictTypeService;
|
|
@@ -29,7 +32,10 @@ import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.time.Duration;
|
|
|
-import java.util.*;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.Set;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -70,6 +76,9 @@ public class ShotPictureTaskExecutors {
|
|
|
|
|
|
@Resource
|
|
|
private BaseCameraManagementMapper baseCameraManagementMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private BaseRailwayManagementMapper baseRailwayManagementMapper;
|
|
|
@Autowired
|
|
|
RedisCache redisCache;
|
|
|
|
|
@@ -99,10 +108,14 @@ public class ShotPictureTaskExecutors {
|
|
|
.stream().map(f -> f.getCameraCode()).distinct().collect(Collectors.toList());
|
|
|
try {
|
|
|
QueryWrapper<BaseCameraManagement> queryWrapper = new QueryWrapper<>();
|
|
|
- queryWrapper.select("distinct camera_code, channel");
|
|
|
+ queryWrapper.select("distinct camera_code, channel,railway_code,install_mile");
|
|
|
// 获取数据库中最新摄像头相关内容
|
|
|
List<BaseCameraManagement> dbAlarms = baseCameraManagementMapper.selectList(queryWrapper).stream().collect(Collectors.toList());
|
|
|
+ List<BaseRailwayManagement> dbRailways = baseRailwayManagementMapper.selectList(null);
|
|
|
if (!CollectionUtils.isEmpty(dbAlarms)) {
|
|
|
+ for(BaseRailwayManagement dbRailway:dbRailways){
|
|
|
+ redisCache.setCacheObject(dbRailway.getRailwayCode(),dbRailway.getRailwayName());
|
|
|
+ }
|
|
|
Set<Object> hashAlarmKeys = redisService.redisTemplate.opsForHash().keys(CAMERA_ALARM_HASH);
|
|
|
Set<Object> hashNormalKeys = redisService.redisTemplate.opsForHash().keys(CAMERA_NORMAL_HASH);
|
|
|
// 数据库中存在的数据, 但是缓存中不存在, 则进行补全
|
|
@@ -110,6 +123,8 @@ public class ShotPictureTaskExecutors {
|
|
|
BaseCameraVO vo = new BaseCameraVO();
|
|
|
vo.setCameraCode(dbAlarm.getCameraCode());
|
|
|
vo.setChannel(dbAlarm.getChannel());
|
|
|
+ vo.setInstallMiles(AppendUtils.stringAppend(dbAlarm.getInstallMile()));
|
|
|
+ vo.setRailwayName(redisCache.getCacheObject(dbAlarm.getRailwayCode()));
|
|
|
vo.setNextExecuteTime(DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
|
|
|
if (lockedMsgAlarmCameraCodes.contains(vo.getCameraCode()) && !hashAlarmKeys.contains(vo.getCameraCode())) {
|
|
|
vo.setIsAlarm(true);
|
|
@@ -121,6 +136,10 @@ public class ShotPictureTaskExecutors {
|
|
|
}
|
|
|
// 排除缓存中未删除, 但是系统中删除的情况
|
|
|
for (Object hashAlarmKey : hashAlarmKeys) {
|
|
|
+ //如果报警信息数据库不存在但报警缓存中存在, 则进行删除
|
|
|
+ if(!lockedMsgAlarmCameraCodes.contains(hashAlarmKey)){
|
|
|
+ redisService.redisTemplate.opsForHash().delete(CAMERA_ALARM_HASH, hashAlarmKey);
|
|
|
+ }
|
|
|
// 如果在数据库中都不存在, 则进行删除删除
|
|
|
if (!hashAlarmKeys.contains(hashAlarmKey) && !hashNormalKeys.contains(hashAlarmKey)) {
|
|
|
redisService.redisTemplate.opsForHash().delete(CAMERA_ALARM_HASH, hashAlarmKey);
|
|
@@ -143,7 +162,7 @@ public class ShotPictureTaskExecutors {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 处理预警摄像头截图, 间隔: 5s
|
|
|
+ * 处理非预警摄像头截图, 间隔: 5s
|
|
|
*/
|
|
|
@Scheduled(fixedDelay = 5 * 1000, initialDelay = 10 * 1000)
|
|
|
public void batchProcess() {
|
|
@@ -192,12 +211,48 @@ public class ShotPictureTaskExecutors {
|
|
|
dict.put("cameraCode", item.getCameraCode());
|
|
|
dict.put("channel", item.getChannel());
|
|
|
dict.put("address", finalAddress);
|
|
|
+ dict.put("railwayName", item.getRailwayName());
|
|
|
+ dict.put("installMiles", item.getInstallMiles());
|
|
|
dict.put("isAlarm", false);
|
|
|
dict.put("nextExecuteTime", item.getNextExecuteTime());
|
|
|
redisPushService.pushMsg(JSONUtil.toJsonStr(dict));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理预警摄像头截图, 间隔: 1s
|
|
|
+ */
|
|
|
+ @Scheduled(fixedDelay = 1 * 1000, initialDelay = 10 * 1000)
|
|
|
+ public void batchAlarmProcess() {
|
|
|
+ if (!isMaster) return;
|
|
|
+ // 填充默认路径
|
|
|
+ String address = storeAddress;
|
|
|
+ //获取截图开关
|
|
|
+ Integer status = redisCache.getCacheObject("shot_switch");
|
|
|
+ if(status == null){
|
|
|
+ List<SysDictData> dataList = iSysDictTypeService.selectDictDataByType("shot_switch");
|
|
|
+ if(CollectionUtils.isEmpty(dataList)){
|
|
|
+ redisCache.setCacheObject("shot_switch",2);
|
|
|
+ status = redisCache.getCacheObject("shot_switch");
|
|
|
+ }else{
|
|
|
+ redisCache.setCacheObject("shot_switch",dataList.get(0).getStatus());
|
|
|
+ status = redisCache.getCacheObject("shot_switch");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 判断开关是否执行
|
|
|
+ if (status != 1) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 获取字典值: 截图存放路径
|
|
|
+ List<SysDictData> addressDataList = DictUtils.getDictCache("shot_address");
|
|
|
+ if(CollectionUtils.isEmpty(addressDataList) || Objects.isNull(addressDataList.get(0))){
|
|
|
+ DictUtils.setDictCache("shot_address", addressDataList = iSysDictTypeService.selectDictDataByType("shot_address"));
|
|
|
+ }
|
|
|
+ if(!CollectionUtils.isEmpty(addressDataList) && Objects.nonNull(addressDataList.get(0))){
|
|
|
+ address = addressDataList.get(0).getDictLabel();
|
|
|
+ }
|
|
|
Map<Object, Object> alarmEntries = redisService.redisTemplate.opsForHash().entries(CAMERA_ALARM_HASH);
|
|
|
if (!CollectionUtils.isEmpty(alarmEntries)) {
|
|
|
final String finalAddress = address;
|
|
@@ -215,6 +270,8 @@ public class ShotPictureTaskExecutors {
|
|
|
dict.put("cameraCode", item.getCameraCode());
|
|
|
dict.put("channel", item.getChannel());
|
|
|
dict.put("address", finalAddress);
|
|
|
+ dict.put("railwayName", item.getRailwayName());
|
|
|
+ dict.put("installMiles", item.getInstallMiles());
|
|
|
dict.put("isAlarm", true);
|
|
|
dict.put("nextExecuteTime", item.getNextExecuteTime());
|
|
|
redisPushService.pushMsg(JSONUtil.toJsonStr(dict));
|