|
@@ -44,6 +44,8 @@ import com.jcraft.jsch.JSch;
|
|
|
import com.jcraft.jsch.JSchException;
|
|
|
import com.jcraft.jsch.Session;
|
|
|
import com.ozs.common.utils.HttpClientUtil;
|
|
|
+import com.ozs.service.entity.*;
|
|
|
+import com.ozs.service.service.*;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
@@ -149,6 +151,8 @@ public class CameraUtil {
|
|
|
private ServerConfig serverConfig;
|
|
|
@Autowired
|
|
|
private MsgAlarmService msgAlarmService;
|
|
|
+ @Autowired
|
|
|
+ BaseDeviceResumeService baseDeviceResumeService;
|
|
|
|
|
|
@Resource
|
|
|
BaseCameraManagementService baseCameraManagementService;
|
|
@@ -1018,53 +1022,75 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
|
|
|
* 相机状态修改
|
|
|
*/
|
|
|
public void cameraBlockUp() {
|
|
|
- long time=60000L;
|
|
|
+ long baseTime = 60000L;
|
|
|
//当前时间戳
|
|
|
- long dades = System.currentTimeMillis();
|
|
|
+ long currentTimestamp = System.currentTimeMillis();
|
|
|
//字典中设置的值
|
|
|
List<SysDictData> heartIntervalTime = dictDataMapper.selectDictDataByType("heart_interval_time");
|
|
|
List<SysDictData> triggerWarningFrequency = dictDataMapper.selectDictDataByType("trigger_warning_frequency");
|
|
|
- if (!ObjectUtils.isEmpty(heartIntervalTime)){
|
|
|
- time=time*Long.valueOf(heartIntervalTime.get(0).getDictValue());
|
|
|
+ // 计算时间间隔
|
|
|
+ long timeInterval = baseTime;
|
|
|
+ if (!ObjectUtils.isEmpty(heartIntervalTime)) {
|
|
|
+ timeInterval *= Long.valueOf(heartIntervalTime.get(0).getDictValue());
|
|
|
}
|
|
|
- if (!ObjectUtils.isEmpty(triggerWarningFrequency)){
|
|
|
- time=time*Long.valueOf(triggerWarningFrequency.get(0).getDictValue());
|
|
|
+ if (!ObjectUtils.isEmpty(triggerWarningFrequency)) {
|
|
|
+ timeInterval *= Long.valueOf(triggerWarningFrequency.get(0).getDictValue());
|
|
|
}
|
|
|
- if (ObjectUtils.isEmpty(heartIntervalTime)||ObjectUtils.isEmpty(triggerWarningFrequency)){
|
|
|
- time=time*5*3;
|
|
|
+ if (ObjectUtils.isEmpty(heartIntervalTime) || ObjectUtils.isEmpty(triggerWarningFrequency)) {
|
|
|
+ timeInterval = baseTime * 5 * 3; // 默认值
|
|
|
}
|
|
|
- //当前时间5分钟之前的时间戳
|
|
|
- long time2 = dades - (time);
|
|
|
- LambdaQueryWrapper<MqLog> mqLog = new LambdaQueryWrapper<>();
|
|
|
- mqLog.ge(MqLog::getCreateTime, new Date(time2));
|
|
|
- mqLog.le(MqLog::getCreateTime, new Date(dades));
|
|
|
- List<MqLog> list = mqLogService.list(mqLog);
|
|
|
- List<String> log = list.stream().map(MqLog::getCameraCode).collect(Collectors.toList());
|
|
|
- List<BaseDeviceDynamicManagement> dynamicManagements = baseDeviceDynamicManagementService.list();
|
|
|
- List<String> base = dynamicManagements.stream().map(BaseDeviceDynamicManagement::getCameraCode).collect(Collectors.toList());
|
|
|
- if (!ObjectUtils.isEmpty(log)) {
|
|
|
- //找出相机表中不包含日志表相机的数据
|
|
|
- List<BaseDeviceDynamicManagement> ones = dynamicManagements.stream().filter(o -> !log.contains(o.getCameraCode())).collect(Collectors.toList());
|
|
|
- List<String> collect = ones.stream().map(BaseDeviceDynamicManagement::getCameraCode).collect(Collectors.toList());
|
|
|
- //找出相机表中包含日志表相机的数据
|
|
|
- base.retainAll(log);
|
|
|
- LambdaUpdateWrapper<BaseDeviceDynamicManagement> queryWrapper = new LambdaUpdateWrapper<>();
|
|
|
- queryWrapper.in(BaseDeviceDynamicManagement::getCameraCode, base);
|
|
|
- queryWrapper.set(BaseDeviceDynamicManagement::getIsDisable, 1);
|
|
|
- baseDeviceDynamicManagementService.saveOrUpdate(null, queryWrapper);
|
|
|
-
|
|
|
- LambdaUpdateWrapper<BaseDeviceDynamicManagement> wrapper = new LambdaUpdateWrapper<>();
|
|
|
- wrapper.in(BaseDeviceDynamicManagement::getCameraCode, collect);
|
|
|
- wrapper.set(BaseDeviceDynamicManagement::getIsDisable, 2);
|
|
|
- baseDeviceDynamicManagementService.saveOrUpdate(null, wrapper);
|
|
|
- }else {
|
|
|
- LambdaUpdateWrapper<BaseDeviceDynamicManagement> wrapper = new LambdaUpdateWrapper<>();
|
|
|
- wrapper.in(BaseDeviceDynamicManagement::getCameraCode, base);
|
|
|
- wrapper.set(BaseDeviceDynamicManagement::getIsDisable, 2);
|
|
|
- baseDeviceDynamicManagementService.saveOrUpdate(null, wrapper);
|
|
|
+ // 计算查询的时间范围(前五分钟)
|
|
|
+ long startTime = currentTimestamp - timeInterval;
|
|
|
+ // 查询 MQ 日志
|
|
|
+ LambdaQueryWrapper<MqLog> mqLogQuery = new LambdaQueryWrapper<>();
|
|
|
+ mqLogQuery.between(MqLog::getCreateTime, new Date(startTime), new Date(currentTimestamp));
|
|
|
+ List<MqLog> mqLogs = mqLogService.list(mqLogQuery);
|
|
|
+ Set<String> loggedCameraCodes = mqLogs.stream().map(MqLog::getCameraCode).collect(Collectors.toSet());
|
|
|
+ // 获取所有设备
|
|
|
+ List<BaseDeviceDynamicManagement> devices = baseDeviceDynamicManagementService.list();
|
|
|
+ Set<String> allCameraCodes = devices.stream().map(BaseDeviceDynamicManagement::getCameraCode).collect(Collectors.toSet());
|
|
|
+ // 找出未记录日志的设备
|
|
|
+ Set<String> inactiveCameraCodes = new HashSet<>(allCameraCodes);
|
|
|
+ inactiveCameraCodes.removeAll(loggedCameraCodes);
|
|
|
+
|
|
|
+ // 更新设备状态
|
|
|
+ updateDeviceStatus(loggedCameraCodes, 1); // 启用设备
|
|
|
+ updateDeviceStatus(inactiveCameraCodes, 2); // 禁用设备
|
|
|
+
|
|
|
+ // 保存设备状态变更记录
|
|
|
+ saveDeviceResume(loggedCameraCodes, 1);
|
|
|
+ saveDeviceResume(inactiveCameraCodes, 2);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 辅助方法:更新设备状态
|
|
|
+ private void updateDeviceStatus(Set<String> cameraCodes, int status) {
|
|
|
+ if (!cameraCodes.isEmpty()) {
|
|
|
+ LambdaUpdateWrapper<BaseDeviceDynamicManagement> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateWrapper.in(BaseDeviceDynamicManagement::getCameraCode, cameraCodes);
|
|
|
+ updateWrapper.set(BaseDeviceDynamicManagement::getIsDisable, status);
|
|
|
+ baseDeviceDynamicManagementService.update(updateWrapper);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ // 辅助方法:批量保存设备状态变更记录
|
|
|
+ private void saveDeviceResume(Set<String> cameraCodes, int status) {
|
|
|
+ if (cameraCodes.isEmpty()) {
|
|
|
+ return; // 如果集合为空,直接返回
|
|
|
+ }
|
|
|
+
|
|
|
+ List<BaseDeviceResume> resumes = new ArrayList<>();
|
|
|
+ for (String cameraCode : cameraCodes) {
|
|
|
+ BaseDeviceResume resume = new BaseDeviceResume();
|
|
|
+ resume.setCameraCode(cameraCode);
|
|
|
+ resume.setIsDisable(status);
|
|
|
+ resumes.add(resume);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 批量保存
|
|
|
+ baseDeviceResumeService.saveBatch(resumes);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* MQTT超时监测
|
|
|
*/
|