jingyuanchao il y a 1 an
Parent
commit
17e8e0e67d

+ 4 - 1
project_data/sql/0.1.1/soc/soc.sql

@@ -1407,4 +1407,7 @@ ALTER TABLE `iot_alarm_data`
     MODIFY COLUMN `source_type` varchar(64) NULL DEFAULT NULL COMMENT '报警源类型(设备类型)' AFTER `device_id`;
 
 ALTER TABLE `iot_alarm_data`
-    MODIFY COLUMN `source_type_des` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '报警源类型(设备类型) 中文' AFTER `source_type`;
+    MODIFY COLUMN `source_type_des` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '报警源类型(设备类型) 中文' AFTER `source_type`;
+
+delete from sys_config where config_key='ALARM_LOSE_DURATION';
+INSERT INTO `sys_config`(`config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ('判定为完整录像的丢失时长', 'ALARM_LOSE_DURATION', '5', 'Y', '超级管理员', '2024-10-15 10:21:10', '', NULL, NULL);

+ 5 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/constant/SystemParameterConstant.java

@@ -184,4 +184,9 @@ public class SystemParameterConstant {
      */
     public static final String ALARM_DATA_TERMINAL_NOTICE_FREQUENCY = "ALARM_DATA_TERMINAL_NOTICE_FREQUENCY";
 
+    /**
+     *  N分钟内的丢失时长判定为录像完整,未丢失
+     */
+    public static final String ALARM_LOSE_DURATION = "ALARM_LOSE_DURATION";
+
 }

+ 17 - 5
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/video/service/impl/VideoIntegrityCheckServiceImpl.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.constant.SecurityConstants;
+import com.xunmei.common.core.constant.SystemParameterConstant;
 import com.xunmei.common.core.domain.host.remote.VideoIntegrityGetReq;
 import com.xunmei.common.core.domain.video.MediatorVideoDaysCheck;
 import com.xunmei.common.core.domain.video.MediatorVideoIntegrityCheck;
@@ -33,7 +34,9 @@ import com.xunmei.host.websocket.enums.TopicTypeEnums;
 import com.xunmei.host.websocket.service.RouterService;
 import com.xunmei.host.websocket.utils.IotServerUtils;
 import com.xunmei.host.websocket.utils.WebSocketUtils;
+import com.xunmei.system.api.RemoteConfigService;
 import com.xunmei.system.api.RemoteOrgService;
+import com.xunmei.system.api.domain.SysConfig;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.domain.iot.IotDeviceInfo;
 import com.xunmei.system.api.domain.north.NorthError;
@@ -78,6 +81,9 @@ public class VideoIntegrityCheckServiceImpl extends ServiceImpl<VideoIntegrityCh
     @Resource
     IIotDeviceInfoService iotDeviceInfoService;
 
+    @Resource
+    RemoteConfigService remoteConfigService;
+
     @Override
     public ProductEnums product() {
         return ProductEnums.DVS;
@@ -142,7 +148,7 @@ public class VideoIntegrityCheckServiceImpl extends ServiceImpl<VideoIntegrityCh
         object.put("index", req.getIndex());
         object.put("recordDate", req.getRecordDate());
         final WebsocketResult result = IotServerUtils.invokeHostServer(topic, new JSONObject(), WebSocketConstants.GET_RECORD_INFOS_SERVICES, object);
-        WebSocketUtils.sendMessage(req.getIotCode(),JacksonUtils.toJSONString(result));
+        WebSocketUtils.sendMessage(req.getIotCode(), JacksonUtils.toJSONString(result));
     }
 
     @Override
@@ -228,8 +234,8 @@ public class VideoIntegrityCheckServiceImpl extends ServiceImpl<VideoIntegrityCh
         videoIntegrityCheck.setOrgId(org.getId());
         videoIntegrityCheck.setOrgName(org.getShortName());
         videoIntegrityCheck.setOrgPath(org.getPath());
-        videoIntegrityCheck.setStatus(getStatus(videoIntegrityCheckDto));
         videoIntegrityCheck.setLoseDuration(calculateLoseMinute(videoIntegrityCheck.getLoseSpan()));
+        videoIntegrityCheck.setStatus(getStatus(videoIntegrityCheckDto, videoIntegrityCheck.getLoseDuration()));
         videoIntegrityCheck.setRecordType(videoIntegrityCheckDto.getRecordType());
         videoIntegrityCheck.setRecordSpan(dealSpan(videoIntegrityCheckDto.getRecordSpan()));
         if (!isCompensate) {
@@ -327,10 +333,16 @@ public class VideoIntegrityCheckServiceImpl extends ServiceImpl<VideoIntegrityCh
         return StringUtil.EMPTY_STRING;
     }
 
-    private Integer getStatus(VideoIntegrityCheckDto videoIntegrityCheckDto) {
-        if (ObjectUtil.isEmpty(videoIntegrityCheckDto.getLoseSpan())) return VideoIntegrityStatus.Full.getId();
+    private Integer getStatus(VideoIntegrityCheckDto videoIntegrityCheckDto, Integer loseDuration) {
+        final List loseSpan = videoIntegrityCheckDto.getLoseSpan();
+        final SysConfig config = remoteConfigService.findSysConfigByCode(SystemParameterConstant.ALARM_LOSE_DURATION, SecurityConstants.INNER);
+        if (ObjectUtil.isNotEmpty(config) && loseDuration <= Integer.parseInt(config.getConfigValue())) {
+            //如果丢失时长小于等于配置的时长,则判定为录像正常
+            loseSpan.clear();
+        }
+        if (ObjectUtil.isEmpty(loseSpan)) return VideoIntegrityStatus.Full.getId();
         String checkSpanStr = JSON.toJSONString(videoIntegrityCheckDto.getCheckSpan());
-        String loseSpanStr = JSON.toJSONString(videoIntegrityCheckDto.getLoseSpan());
+        String loseSpanStr = JSON.toJSONString(loseSpan);
         return checkSpanStr.equals(loseSpanStr) ? VideoIntegrityStatus.AllLoss.getId() : VideoIntegrityStatus.PartialLoss.getId();
 
     }

+ 3 - 5
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysDeviceServiceImpl.java

@@ -1,7 +1,5 @@
 package com.xunmei.system.service.impl;
 
-import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.context.AnalysisContext;
@@ -495,7 +493,7 @@ public class SysDeviceServiceImpl extends ServiceImpl<SysDeviceMapper, SysDevice
         String assetType = deviceExport.getAssetType();
         Optional<DictionaryTreeVo> assetOptional = dictionaryList.stream().filter(r -> ObjectUtil.equal(r.getName(), assetType)).findFirst();
         if (!assetOptional.isPresent()) {
-            msgList.add("资产分类未填写");
+            msgList.add("资产分类未填写或填写不正确");
         } else {
             device.setAssetType(assetOptional.get().getId().toString());
         }
@@ -511,7 +509,7 @@ public class SysDeviceServiceImpl extends ServiceImpl<SysDeviceMapper, SysDevice
             }
         }
 
-        String deviceModel = deviceExport.getDeviceModel();
+        /*String deviceModel = deviceExport.getDeviceModel();
         if (StringUtils.isEmpty(deviceModel)) {
             msgList.add("设备型号未填写");
         } else {
@@ -590,7 +588,7 @@ public class SysDeviceServiceImpl extends ServiceImpl<SysDeviceMapper, SysDevice
             } catch (Exception e) {
                 msgList.add("投产时间格式错误");
             }
-        }
+        }*/
         String deviceStatus = deviceExport.getDeviceStatus();
         if (StringUtils.isEmpty(deviceStatus)) {
             msgList.add("资产状态未填写");

+ 6 - 6
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/util/DeviceExport.java

@@ -16,15 +16,15 @@ import lombok.Data;
 @HeadRowHeight(16) //表头行高
 @ContentRowHeight(16) //数据行高
 public class DeviceExport {
-    @ExcelProperty(value = "所属机构", index = 0)
+    @ExcelProperty(value = "所属机构(必填)", index = 0)
     private String orgName;
-    @ExcelProperty(value = "资产编号", index = 1)
+    @ExcelProperty(value = "资产编号(必填)", index = 1)
     private String assetNo;
-    @ExcelProperty(value = "设备名称", index = 2)
+    @ExcelProperty(value = "设备名称(必填)", index = 2)
     private String deviceName;
-    @ExcelProperty(value = "资产分类", index = 3)
+    @ExcelProperty(value = "资产分类(必填)", index = 3)
     private String assetType;
-    @ExcelProperty(value = "设备分类", index = 4)
+    @ExcelProperty(value = "设备分类(必填)", index = 4)
     private String deviceType;
     @ExcelProperty(value = "设备品牌", index = 5)
     private String deviceBrand;
@@ -41,6 +41,6 @@ public class DeviceExport {
     private String maintenanceTerm;
     @ExcelProperty(value = "投产时间", index = 11)
     private String useTime;
-    @ExcelProperty(value = "资产状态", index = 12)
+    @ExcelProperty(value = "资产状态(必填)", index = 12)
     private String deviceStatus;
 }