Browse Source

实现app录像诊断

jiawuxian 1 year ago
parent
commit
6724f7d0cf
15 changed files with 435 additions and 170 deletions
  1. 8 0
      project_data/sql/0.0.6-iot/soc/soc.sql
  2. 16 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/iot/DeviceSourceEnum.java
  3. 3 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/mapper/ProtectionMapper.java
  4. 21 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/ProtectionServiceImpl.java
  5. 11 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/vo/protection/SubSystemAppDetailVo.java
  6. 117 112
      soc-modules/soc-modules-core/src/main/resources/mapper/device/ProtectionMapper.xml
  7. 25 12
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/VideoDiagnosisController.java
  8. 25 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/dto/videoDiagnosis/VideoDiagnosisAppPageDto.java
  9. 11 5
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/mapper/IotDvrChannelMapper.java
  10. 6 6
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/VideoDiagnosisService.java
  11. 47 3
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/VideoDiagnosisServiceImpl.java
  12. 10 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/videoDiagnosis/VideoDiagnosisAppPageChannelVo.java
  13. 19 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/videoDiagnosis/VideoDiagnosisAppPageVo.java
  14. 2 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/videoDiagnosis/VideoDiagnosisStorageVo.java
  15. 114 30
      soc-modules/soc-modules-iot/src/main/resources/mapper/IotDvrChannelMapper.xml

+ 8 - 0
project_data/sql/0.0.6-iot/soc/soc.sql

@@ -796,5 +796,13 @@ INSERT INTO `sys_dict_data` ( `dict_sort`, `dict_label`, `dict_value`, `dict_typ
 INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 0, '正常', '0', 'video_diagnosis_state', NULL, 'default', 'N', '0', '超级管理员', '2024-02-22 18:04:49', '', NULL, NULL);
 INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 1, '异常', '1', 'video_diagnosis_state', NULL, 'default', 'N', '0', '超级管理员', '2024-02-22 18:04:57', '', NULL, NULL);
 
+DELETE from `sys_menu` where id in (01747911340288892930,01762681378201595906,01762681622628855809,01762681985838804994);
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01747911340288892930, '物联感知', 0, 27, 'iot', NULL, NULL, 1, 0, 'M', '0', '0', '', '1', 'job', NULL, '超级管理员', '2024-01-18 17:18:32', '超级管理员', '2024-02-01 09:34:05', '');
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01762681378201595906, '录像诊断', 1726900357129232386, 13, '/iot/videoDiagnosis', NULL, NULL, 1, 0, 'C', '0', '0', 'appiot:videoDiagnosis', '0', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAABBCAYAAACO98lFAAAACXBIWXMAAAsSAAALEgHS3X78AAACD0lEQVR4nO2by1HDMBCGfxjuoQMyowKgA+CqU0pIB8lBd8JdM4QKCB3gi87pgFCAZkIHUEEYZWXGhDxkm8Gxd79b/FDkL7urSBqfrFYrcOeUuwCIBIK9BIgEgr0EiASCvQSIBIK9BIgEgr0EiASCvYTAWfGDcqYPoN9cd0qz8Np+1G3keyqtnJkCGP33U/wBj17bcZ1m1unQYgGBkXJmUqeBvCa0VUBO/UjoAL2yjxDqn3Jmjs3CyAHlzHmMnLv8cVlJUM4MAYT6cVE8fgwSMgDTPefDLzerEvI5ypmr+B3X2843LSHz2g4OXaScuQHwWrbxGPqTQ4W/6cK4SLnIa5t0XRHlTMj7ZcrI17SEcQzVvShnZqkNhqhRzgRpD6kp1HQ6hE7OY6d3EUL6MqWxWPieynbiGApjb1fBqkCleQ/7WSREAsFeAkQCwV4CRALBXgJEAsFeAkQCwV4CRALBXgI6KCGsHr+XvalTEry2QUJYpLkH8Jl6X+fSIexNem0nUUaWck9na4LXdhkXcW8PpUjnC2NIEa9tf1+KsBkdYooEGc+b51gNkbFeDGOKvOXH2e1FojCKxNXpzkRC8nBYxGu73s/I0+FXnrSM5M2ZbeQSxsUcaRlZ3G+szI/Xf5Qzg/gnoy28VNmn3IT9O1CQWSTBXgJEAsFeAkQCwV4CRALBXgJEAsFeAkQCwV4CAHwBGKFz+db+wtQAAAAASUVORK5CYII=', NULL, '超级管理员', '2024-02-28 11:30:41', '超级管理员', '2024-02-28 11:38:43', '');
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01762681622628855809, '硬盘诊断', 1726900357129232386, 14, '/iot/dvrDisk', NULL, NULL, 1, 0, 'C', '0', '0', 'appiot:dvrDisk', '0', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAABBCAYAAACO98lFAAAACXBIWXMAAAsSAAALEgHS3X78AAACmElEQVR4nO2ZMXLbMBBFfzzp5YqtfQM5N1BOYKVg75ZVnBNER3DHVj2b3CDJCaIj2C0bKydQBlyAYSRQHiwWznh2f49v6nkB7F+8OxwO0K4L7QBgEEjqIcAgkNRDgEEgqYcAg0BSDwEGgaQeAgwC6f1r/JGqa+8APABYJCz7DWDT181DwU8bVDxFVl27AvA9w+JLaRCvsR3u//P6F1W0EqquvQTwLGD1oa+bnYBPVKUrYS3kcyfkE9VbgSDlE1Wx7SC4FYKKbYmSlXAj7LcS9htVEsIjgCchr58AtkJeJ1I/bYa1zST1EGAQSOohICdF+j7AdXKXiUu3fd08nvFdMa7DvffdJ64bxL4dqq51jcuStRj42NfNj4inS4ufmZ4uel9zQLC2Q9W16wwAiGUBX1lcAPCzClbG4J4Jub382v9oSU+8NQiLiIdEW7ysuvY6dVEyhKprbxLHZHM6HpZIJcVkmJxKkMr2Sw803AgSYMGByYEgme2Dl+TQ5DZ1AQdCal9wTuGaFJ0TRA7ds+I0SyuhatiFXsFNk6uudfd78qE245vUK6iP0rDsQFIPAQaB9M/B6DPBlvFmeN/XzewMMOMt8iVfTuA68R0PRt9u7jKaluhI3DdEv5ieTp/6uvkW8d0A+CrhO90Om8yuba7hyX1L3JT2nULIDTBzvUNuT3ESivy2zW2zl6GpGiD4kr3KNL3yHzdKMGyVSJyjb6iEUg+nUpng+EeLvnFKQ7g9Kl2p/9gYioSqNmj4vgv/0TmjsmOt8fe2EfOdbDXJFLtwvq4SJELLVCG8SPuGZCj90Et9gh9qSGg/7RVK+PoTXQrE4Ks+RcKyA0k9BBgEknoIMAgk9RBgEEjqIcAgkNRDgEEgqYcAgwAAwB8jC71/k/cB6QAAAABJRU5ErkJggg==', NULL, '超级管理员', '2024-02-28 11:31:39', '超级管理员', '2024-02-28 11:41:48', '');
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01762681985838804994, '动环诊断', 1726900357129232386, 15, '/iot/donghuang', NULL, NULL, 1, 0, 'C', '0', '0', 'appiot:donghuang', '0', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAMKADAAQAAAABAAAAMAAAAAD4/042AAADa0lEQVRoBe1Z3Z3SQBCfCbxLB2IHWIFYgViBXAVyDchKA8dVQK4Czwo8KzitAOwA3yXjf5KsrHu7ScA7CP7ggd2dne+vTTZM5U/MuJ8JTbEcEXHPwts1yhr63CZMH9mkK9WN9e+XGY9ZeKHzU/kJy0XXpCmXnr9vr9djLpU1IvGym2VsEIeWpkxMeYVzL8vIJMTypgqt1XvQPTlk6ojQZ81dEvr5OI7hHgw43K+TyEQLL0mkr8Y8huTDGSCybX0mXXdni1HC8hrR+PEvhuxmAJRQofDe152EImWShOY+DXr5HaIxIPD195queTO9kEbIuRLSh1A9TAjtd4gOlqKDPa+jtz27Cg/8BpuM58z0qgrP32tsQEyJ/BAsWnHYEKHvndli4AuOrTdmPKGC37MYjgtvlkJQQovPJbRzhUPBPtrxZai7IEUmFrfJ2DHpXNOqaZE3MqCJEqXgfp7Ptk0K3Wie+4rr6e/D3DVoVmWRv60r8loD1BMhJVyBdg68dWeWGhgMQ+gGo7F77rgRWmym46XWkQv35+B3q9GAU679PbuurQF0nRfqEUugIwT3MAyaGubS5jkufGVhQnLXYbrwZdh9O0LmKBP+ZNd2rI4ALA8xxjPIBMy+wItXpTGWX+UIXI3M1EVi4iF4Let4oeONXDo7jxtQ9G5jEe2YK8FcKsEwhO4BG9r9qlFTJ/7okvNabj6M3/s8wH+Adv3Oh+s6bgDyF95f+0SFEi6U8SJUHw0oMVJvu5QP53iRYp779QGZf1LOpwnXAI73vDV62OppVdYDO0tZ4Rld8/nOAeY1g0gt4953sbdzrQ8STnG4pVvo37NwBFgeFIuSQQmkQNUvHI3q1Inz04hVKa+U4QjkPOUbvHlpvYncNAjvNC7O3ymiAWgPUQs6xKfYZ11hQMGubHPXhff3ednXF/F96JqZ061DK9ocDevw4vtPp7zKDNdAXJvW7ZwNOHZITj4Cx3bgWf7Je6D2IGu7hSdfxGcDjp1i5wgcOwLRp9H84vUJtYu92cXkxvCjBtgXmaeyAXeyQdYxuTH8cw0E3XhA4DkCB3R2UNR/8Cxkr8KD9rUcqNefUPG25WpWqYfrd73DP8Uo5JfPYhIcHCvZ8TNQlUsOsgflVWfVPW+j+p1LP2ToV5VWR0MzpfjyM7Df7H4D/jCNsP/6NKgAAAAASUVORK5CYII=', NULL, '超级管理员', '2024-02-28 11:33:06', '超级管理员', '2024-02-28 11:40:18', '');
+
+
 
 update sys_menu set component ='iot/subSystem/index',parent_id=1747911340288892930 WHERE menu_name='布撤防情况跟踪' and platform_type=1;
+UPDATE sys_menu set path='/iot/subsystem' WHERE path='/protection' and platform_type=0;

+ 16 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/iot/DeviceSourceEnum.java

@@ -0,0 +1,16 @@
+package com.xunmei.common.core.enums.iot;
+
+import lombok.AllArgsConstructor;
+import lombok.NoArgsConstructor;
+
+/**
+ * 设备来源
+ */
+@AllArgsConstructor
+@NoArgsConstructor
+public enum DeviceSourceEnum {
+    ManualRegister("设备登记"),
+    IOT("人工");
+
+    private String text;
+}

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/mapper/ProtectionMapper.java

@@ -19,6 +19,9 @@ import org.apache.ibatis.annotations.Param;
 @Mapper
 public interface ProtectionMapper extends BaseMapper<IotAlarmSubsystem> {
     Page<ProtectionPageVo> pageList(@Param("page") Page<ProtectionPageVo> page, @Param("request") ProtectionPageDto request);
+
+
+    String getHostName(String hostCode);
 //    MePage<pageSensorVo> pageSensorList(@Param("mePage") MePage<pageSensorVo> mePage, @Param("request") pageSensorDto request);
 //
 //    MePage<ProtectionPageVo4Mybatis> pageByMybatis(@Param("request") ProtectionPageDto4Mybatis request, MePage<ProtectionPageVo4Mybatis> mePage);

+ 21 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/ProtectionServiceImpl.java

@@ -14,6 +14,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.panel.dto.PanelListDto;
 import com.xunmei.common.core.domain.panel.vo.PanelListVo;
+import com.xunmei.common.core.enums.iot.DeviceSourceEnum;
 import com.xunmei.common.core.utils.bean.BeanUtils;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.security.utils.SecurityUtils;
@@ -28,7 +29,10 @@ import com.xunmei.core.resumption.mapper.ProtectionMapper;
 import com.xunmei.core.resumption.service.IProtectionService;
 import com.xunmei.core.resumption.vo.protection.ProtectionLogPageVo;
 import com.xunmei.core.resumption.vo.protection.ProtectionPageVo;
+import com.xunmei.core.resumption.vo.protection.SubSystemAppDetailVo;
+import com.xunmei.system.api.RemoteDeviceService;
 import com.xunmei.system.api.RemoteDictDataService;
+import com.xunmei.system.api.domain.SysDevice;
 import com.xunmei.system.api.domain.SysDictData;
 import com.xunmei.system.api.enums.ProtectionStatus;
 import com.xunmei.system.api.vo.ProtectionVO;
@@ -60,6 +64,10 @@ public class ProtectionServiceImpl extends ServiceImpl<ProtectionMapper, IotAlar
     @Resource
     private RemoteDictDataService remoteDictDataService;
 
+    @Resource
+    RemoteDeviceService remoteDeviceService;
+
+
     @Override
     public TableDataInfo pageList(ProtectionPageDto request) {
         if (ObjectUtil.isNull(request.getOrgId())) {
@@ -93,7 +101,18 @@ public class ProtectionServiceImpl extends ServiceImpl<ProtectionMapper, IotAlar
 
     @Override
     public IotAlarmSubsystem get(Long id) {
-        return this.getById(id);
+        IotAlarmSubsystem e = this.getById(id);
+        SubSystemAppDetailVo vo = new SubSystemAppDetailVo();
+        BeanUtils.copyProperties(e, vo);
+        if (ObjectUtil.equal(e.getSource(), DeviceSourceEnum.IOT.ordinal())) {
+            vo.setHostName(baseMapper.getHostName(e.getAlarmHostCode()));
+        } else {
+            SysDevice host = remoteDeviceService.getInfoById(e.getDeviceId(), SecurityConstants.INNER);
+            if (ObjectUtil.isNotNull(host)) {
+                vo.setHostName(host.getDeviceName());
+            }
+        }
+        return vo;
     }
 
     @Override
@@ -177,7 +196,7 @@ public class ProtectionServiceImpl extends ServiceImpl<ProtectionMapper, IotAlar
         int count = baseMapper.update(null, new LambdaUpdateWrapper<IotAlarmSubsystem>()
                 .eq(IotAlarmSubsystem::getId, updateDto.getId())
                 .set(IotAlarmSubsystem::getStatus, updateDto.getState())
-                        .set(IotAlarmSubsystem::getStatusChangeTime,updateDto.getChangeTime())
+                .set(IotAlarmSubsystem::getStatusChangeTime, updateDto.getChangeTime())
                 .set(IotAlarmSubsystem::getStatusUpdateTime, now)
                 .set(IotAlarmSubsystem::getStatusUpdatorId, SecurityUtils.getUserId())
                 .set(IotAlarmSubsystem::getStatusUpdatorName, SecurityUtils.getLoginUser().getName()));

+ 11 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/vo/protection/SubSystemAppDetailVo.java

@@ -0,0 +1,11 @@
+package com.xunmei.core.resumption.vo.protection;
+
+import com.xunmei.common.core.domain.iot.domain.IotAlarmSubsystem;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class SubSystemAppDetailVo extends IotAlarmSubsystem {
+    @ApiModelProperty("报警主机名称")
+    private String hostName;
+}

+ 117 - 112
soc-modules/soc-modules-core/src/main/resources/mapper/device/ProtectionMapper.xml

@@ -1,17 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.xunmei.core.resumption.mapper.ProtectionMapper">
+    <!--    <select id="deviceList" resultType="com.isp.inspection.vo.SearchDeviceListVo">-->
 
-<!--    <select id="deviceList" resultType="com.isp.inspection.vo.SearchDeviceListVo">-->
-
-<!--        select id as deviceId,name as deviceName from t_device where deleted =0 and category_id=3713671920926720-->
-<!--        <if test="request.orgId!=null and request.orgId!=''">-->
-<!--            and org_id = #{request.orgId}-->
-<!--        </if>-->
-<!--        <if test="request.orgPath!=null and request.orgPath!=''">-->
-<!--            and org_path like concat(#{request.orgPath},'%')-->
-<!--        </if>-->
-<!--    </select>-->
+    <!--        select id as deviceId,name as deviceName from t_device where deleted =0 and category_id=3713671920926720-->
+    <!--        <if test="request.orgId!=null and request.orgId!=''">-->
+    <!--            and org_id = #{request.orgId}-->
+    <!--        </if>-->
+    <!--        <if test="request.orgPath!=null and request.orgPath!=''">-->
+    <!--            and org_path like concat(#{request.orgPath},'%')-->
+    <!--        </if>-->
+    <!--    </select>-->
 
     <select id="pageList" resultType="com.xunmei.core.resumption.vo.protection.ProtectionPageVo">
         select a.id,
@@ -28,7 +27,7 @@
         from iot_alarm_subsystem a
         inner join sys_org c on a.org_id = c.id and c.deleted=0
         <if test="request.checkSub==true">
-             and c.path like concat((select path from sys_org where id=#{request.orgId}),  '%')
+            and c.path like concat((select path from sys_org where id=#{request.orgId}), '%')
         </if>
         where a.deleted=0
         <if test="request.checkSub==false">
@@ -41,114 +40,120 @@
             and a.name like concat('%',#{request.key},'%')
         </if>
         <if test="request.startTime!=null and request.endTime!=null">
-            and a.status_update_time >= #{request.startTime} and  a.status_update_time&lt;=#{request.endTime}
+            and a.status_update_time >= #{request.startTime} and a.status_update_time&lt;=#{request.endTime}
         </if>
         order by a.org_Id asc,a.name,a.id desc
     </select>
-<!--    <select id="pageLog" resultType="com.xunmei.core.resumption.vo.protection.ProtectionLogPageVo">-->
-<!--        select a.id, a.name as name,a.status as status,a.status_update_time,a.status_updator_name-->
-<!--        from iot_alarm_subsystem_log a-->
-<!--        where a.deleted=0 and a.protection_id=#{request.protectionId}-->
-<!--        <if test="request.startTime!=null and request.endTime!=null">-->
-<!--            and a.status_update_time >= #{request.startTime} and  a.status_update_time&lt;=#{request.endTime}-->
-<!--        </if>-->
-<!--    </select>-->
 
-<!--    <select id="pageSensorList" resultType="com.isp.inspection.vo.pageSensorVo">-->
-<!--        select input_name as inputName,input_index as inputIndex,sensor_type_name as sensorTypeName,-->
-<!--        status_text as statusText,status_value as statusValue-->
-<!--        from t_sensor where defencearea_code =#{request.defenceareaCode}-->
-<!--        <if test="request.sensorName!=null and request.sensorName!=''">-->
-<!--            and input_name like concat('%',#{request.sensorName},'%')-->
-<!--        </if>-->
-<!--        <if test="request.status!=null and request.status!=''">-->
-<!--            and status_value =#{request.status}-->
-<!--        </if>-->
-<!--    </select>-->
+    <select id="getHostName" resultType="String">
+        select equipment_name
+        from iot_device
+        where equipment_code = #{hostCode}
+    </select>
+    <!--    <select id="pageLog" resultType="com.xunmei.core.resumption.vo.protection.ProtectionLogPageVo">-->
+    <!--        select a.id, a.name as name,a.status as status,a.status_update_time,a.status_updator_name-->
+    <!--        from iot_alarm_subsystem_log a-->
+    <!--        where a.deleted=0 and a.protection_id=#{request.protectionId}-->
+    <!--        <if test="request.startTime!=null and request.endTime!=null">-->
+    <!--            and a.status_update_time >= #{request.startTime} and  a.status_update_time&lt;=#{request.endTime}-->
+    <!--        </if>-->
+    <!--    </select>-->
+
+    <!--    <select id="pageSensorList" resultType="com.isp.inspection.vo.pageSensorVo">-->
+    <!--        select input_name as inputName,input_index as inputIndex,sensor_type_name as sensorTypeName,-->
+    <!--        status_text as statusText,status_value as statusValue-->
+    <!--        from t_sensor where defencearea_code =#{request.defenceareaCode}-->
+    <!--        <if test="request.sensorName!=null and request.sensorName!=''">-->
+    <!--            and input_name like concat('%',#{request.sensorName},'%')-->
+    <!--        </if>-->
+    <!--        <if test="request.status!=null and request.status!=''">-->
+    <!--            and status_value =#{request.status}-->
+    <!--        </if>-->
+    <!--    </select>-->
 
-<!--    <select id="pageByMybatis" resultType="com.isp.device.vo.protection.ProtectionPageVo4Mybatis">-->
-<!--        select p.id as id,-->
-<!--        p.name as name,-->
-<!--        p.code as code,-->
-<!--        p.org_id orgId,-->
-<!--        ifnull(p.update_time,p.create_time) as updateTime,-->
-<!--        p.status as `status`,-->
-<!--        p.org_name as orgName,-->
-<!--        d.name as alarmHostName-->
-<!--        from t_protection p left join t_device d on p.device_id = d.id-->
-<!--        <if test="request.code != null and request.code != ''">-->
-<!--            inner join t_category c on p.code = c.name = #{request.code,jdbcType=VARCHAR}-->
-<!--        </if>-->
-<!--        where p.deleted = 0-->
-<!--        <if test="request.name != null and request.name != ''">-->
-<!--            and p.name like concat('%',#{request.name},'%')-->
-<!--        </if>-->
-<!--        <if test="request.orgId != null">-->
-<!--            and p.org_path like concat((select path from t_org where id = #{request.orgId}),'%')-->
-<!--        </if>-->
-<!--        <if test="request.status != null">-->
-<!--            and p.status = #{request.status}-->
-<!--        </if>-->
-<!--        <if test="request.id != null and request.id != ''">-->
-<!--            and p.id = #{request.id}-->
-<!--        </if>-->
-<!--        <if test="request.path != null and request.path != ''">-->
-<!--            and p.org_path like concat(#{request.path},'%')-->
-<!--        </if>-->
+    <!--    <select id="pageByMybatis" resultType="com.isp.device.vo.protection.ProtectionPageVo4Mybatis">-->
+    <!--        select p.id as id,-->
+    <!--        p.name as name,-->
+    <!--        p.code as code,-->
+    <!--        p.org_id orgId,-->
+    <!--        ifnull(p.update_time,p.create_time) as updateTime,-->
+    <!--        p.status as `status`,-->
+    <!--        p.org_name as orgName,-->
+    <!--        d.name as alarmHostName-->
+    <!--        from t_protection p left join t_device d on p.device_id = d.id-->
+    <!--        <if test="request.code != null and request.code != ''">-->
+    <!--            inner join t_category c on p.code = c.name = #{request.code,jdbcType=VARCHAR}-->
+    <!--        </if>-->
+    <!--        where p.deleted = 0-->
+    <!--        <if test="request.name != null and request.name != ''">-->
+    <!--            and p.name like concat('%',#{request.name},'%')-->
+    <!--        </if>-->
+    <!--        <if test="request.orgId != null">-->
+    <!--            and p.org_path like concat((select path from t_org where id = #{request.orgId}),'%')-->
+    <!--        </if>-->
+    <!--        <if test="request.status != null">-->
+    <!--            and p.status = #{request.status}-->
+    <!--        </if>-->
+    <!--        <if test="request.id != null and request.id != ''">-->
+    <!--            and p.id = #{request.id}-->
+    <!--        </if>-->
+    <!--        <if test="request.path != null and request.path != ''">-->
+    <!--            and p.org_path like concat(#{request.path},'%')-->
+    <!--        </if>-->
 
-<!--        <choose>-->
-<!--            <when test="request.onlinType!=null and request.onlinType==1">-->
-<!--                <if test="request.time!=null">-->
-<!--                    and p.update_time >=#{request.time}-->
-<!--                </if>-->
-<!--                <if test="request.time==null">-->
-<!--                    and p.update_time is not null-->
-<!--                </if>-->
+    <!--        <choose>-->
+    <!--            <when test="request.onlinType!=null and request.onlinType==1">-->
+    <!--                <if test="request.time!=null">-->
+    <!--                    and p.update_time >=#{request.time}-->
+    <!--                </if>-->
+    <!--                <if test="request.time==null">-->
+    <!--                    and p.update_time is not null-->
+    <!--                </if>-->
 
-<!--            </when>-->
-<!--            <when test="request.onlinType!=null and request.onlinType==0">-->
-<!--                <if test="request.time!=null">-->
-<!--                    and #{request.time}>p.update_time-->
-<!--                </if>-->
-<!--                <if test="request.time==null">-->
-<!--                    and p.update_time is null-->
-<!--                </if>-->
-<!--            </when>-->
-<!--        </choose>-->
+    <!--            </when>-->
+    <!--            <when test="request.onlinType!=null and request.onlinType==0">-->
+    <!--                <if test="request.time!=null">-->
+    <!--                    and #{request.time}>p.update_time-->
+    <!--                </if>-->
+    <!--                <if test="request.time==null">-->
+    <!--                    and p.update_time is null-->
+    <!--                </if>-->
+    <!--            </when>-->
+    <!--        </choose>-->
 
 
-<!--        <if test="request.sortColumn == 'orgId'">-->
-<!--            order by p.org_id asc-->
-<!--        </if>-->
-<!--        <if test="request.sortColumn == 'updateTime'">-->
-<!--            order by ifnull(p.update_time,p.create_time) desc-->
-<!--        </if>-->
-<!--    </select>-->
-<!--    <select id="selectProtectSensorData" resultType="com.isp.board.vo.ProtectSensorList">-->
-<!--        SELECT p.`name`      AS protectionName,-->
-<!--               input_name    AS sensorName,-->
-<!--               d.update_time AS alarmTime,-->
-<!--               input_name   AS alarmType,-->
-<!--               isdo          as isDeal-->
-<!--        FROM t_protection p-->
-<!--                 INNER JOIN t_sensor_alarm_data d ON p.`code` = d.defencearea_code-->
-<!--        WHERE p.deleted = 0-->
-<!--          and p.org_id = #{orgId}-->
-<!--          and d.update_time &gt;= #{startTime}-->
-<!--          and d.update_time &lt;= #{endTime}-->
-<!--        ORDER BY d.update_time DESC-->
-<!--    </select>-->
-<!--    <select id="selectIds" resultType="Long">-->
-<!--        select  id from t_protection where  org_id=#{orgId} and deleted=0;-->
-<!--    </select>-->
-<!--    <select id="productDeviceAlarmData" resultType="com.isp.board.vo.ProductDeviceAlarmList">-->
-<!--        select p.id, p.device_name as productDeviceName,d.`update_time` as alarmTime,d.isdo as isDeal,c.name as alarmType from t_product_device p inner join t_sensor_alarm_data d on p.str_device_id = d.str_device_id-->
-<!--        left join t_category c on p.product_type = c.id    where p.org_id = #{orgId} and d.update_time &gt;= #{startTime} and d.update_time &lt;= #{endTime} and p.source =#{sorce}-->
-<!--        <if test="typeList.size>0">-->
-<!--            and p.product_type in-->
-<!--            <foreach collection="typeList" item="item" index="index" open="(" close=")" separator=",">-->
-<!--                #{item}-->
-<!--            </foreach>-->
-<!--        </if>-->
-<!--    </select>-->
+    <!--        <if test="request.sortColumn == 'orgId'">-->
+    <!--            order by p.org_id asc-->
+    <!--        </if>-->
+    <!--        <if test="request.sortColumn == 'updateTime'">-->
+    <!--            order by ifnull(p.update_time,p.create_time) desc-->
+    <!--        </if>-->
+    <!--    </select>-->
+    <!--    <select id="selectProtectSensorData" resultType="com.isp.board.vo.ProtectSensorList">-->
+    <!--        SELECT p.`name`      AS protectionName,-->
+    <!--               input_name    AS sensorName,-->
+    <!--               d.update_time AS alarmTime,-->
+    <!--               input_name   AS alarmType,-->
+    <!--               isdo          as isDeal-->
+    <!--        FROM t_protection p-->
+    <!--                 INNER JOIN t_sensor_alarm_data d ON p.`code` = d.defencearea_code-->
+    <!--        WHERE p.deleted = 0-->
+    <!--          and p.org_id = #{orgId}-->
+    <!--          and d.update_time &gt;= #{startTime}-->
+    <!--          and d.update_time &lt;= #{endTime}-->
+    <!--        ORDER BY d.update_time DESC-->
+    <!--    </select>-->
+    <!--    <select id="selectIds" resultType="Long">-->
+    <!--        select  id from t_protection where  org_id=#{orgId} and deleted=0;-->
+    <!--    </select>-->
+    <!--    <select id="productDeviceAlarmData" resultType="com.isp.board.vo.ProductDeviceAlarmList">-->
+    <!--        select p.id, p.device_name as productDeviceName,d.`update_time` as alarmTime,d.isdo as isDeal,c.name as alarmType from t_product_device p inner join t_sensor_alarm_data d on p.str_device_id = d.str_device_id-->
+    <!--        left join t_category c on p.product_type = c.id    where p.org_id = #{orgId} and d.update_time &gt;= #{startTime} and d.update_time &lt;= #{endTime} and p.source =#{sorce}-->
+    <!--        <if test="typeList.size>0">-->
+    <!--            and p.product_type in-->
+    <!--            <foreach collection="typeList" item="item" index="index" open="(" close=")" separator=",">-->
+    <!--                #{item}-->
+    <!--            </foreach>-->
+    <!--        </if>-->
+    <!--    </select>-->
 </mapper>

+ 25 - 12
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/VideoDiagnosisController.java

@@ -3,14 +3,20 @@ package com.xunmei.iot.controller;
 
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.iot.dto.videoDiagnosis.VideoDiagnosisAppPageDto;
 import com.xunmei.iot.dto.videoDiagnosis.VideoDiagnosisWebPageDto;
 import com.xunmei.iot.service.VideoDiagnosisService;
 import com.xunmei.iot.vo.videoDays.VideoDayCheckWebDetailVo;
+import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisAppPageVo;
+import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisIntegrityVo;
 import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisWebPageVo;
 import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisWebVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
 /**
  * 录像诊断
  *
@@ -24,18 +30,6 @@ public class VideoDiagnosisController {
     @Autowired
     private VideoDiagnosisService videoDiagnosisService;
 
-//    @PostMapping("/page")
-//    public TableDataInfo<VideoDaysCheckPageVo> page(@RequestBody VideoDayCheckPageDto request) throws Exception {
-//        TableDataInfo<VideoDaysCheckPageVo> pageData = this.videoDaysCheckService.getPageData(request);
-//        return pageData;
-//    }
-//
-//    @GetMapping("/channelDetail/{id}")
-//    public AjaxResult info(@PathVariable("id") String id) {
-//        VideoDaysCheckChannelDetailVo data = this.videoDaysCheckService.getChannelDetailData(id);
-//        return AjaxResult.success(data);
-//    }
-
     @PostMapping("/web/page")
     public TableDataInfo<VideoDiagnosisWebPageVo> webPage(@RequestBody VideoDiagnosisWebPageDto pageDto) {
         TableDataInfo<VideoDiagnosisWebPageVo> page = this.videoDiagnosisService.getPageData(pageDto);
@@ -47,4 +41,23 @@ public class VideoDiagnosisController {
         VideoDiagnosisWebVo detailVo = this.videoDiagnosisService.getDetail(hostCode, channelCode);
         return AjaxResult.success(detailVo);
     }
+
+    @GetMapping("/web/integrity/{hostCode}/{channelCode}/{recordDate}")
+    public AjaxResult getIntegrity(@PathVariable("hostCode") String hostCode, @PathVariable("channelCode") String channelCode, @PathVariable("recordDate") String date) throws Exception {
+
+        VideoDiagnosisIntegrityVo vo = this.videoDiagnosisService.getIntegrity(hostCode, channelCode, new SimpleDateFormat("yyyy-MM-dd").parse(date));
+        return AjaxResult.success(vo);
+    }
+
+    @PostMapping("/app/page")
+    public TableDataInfo<VideoDiagnosisAppPageVo> appPage(@RequestBody VideoDiagnosisAppPageDto pageDto) {
+        TableDataInfo<VideoDiagnosisAppPageVo> page = this.videoDiagnosisService.getAppPageData(pageDto);
+        return page;
+    }
+
+//    @PostMapping("/app/detail/{hostCode}/{channelCode}")
+//    public TableDataInfo<VideoDiagnosisAppPageVo> appInfo(@PathVariable("hostCode") String hostCode, @PathVariable("channelCode") String channelCode) {
+//        TableDataInfo<VideoDiagnosisAppPageVo> page = this.videoDiagnosisService.getAppPageData(pageDto);
+//        return page;
+//    }
 }

+ 25 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/dto/videoDiagnosis/VideoDiagnosisAppPageDto.java

@@ -0,0 +1,25 @@
+package com.xunmei.iot.dto.videoDiagnosis;
+
+import com.xunmei.common.core.web.domain.PageDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class VideoDiagnosisAppPageDto extends PageDto {
+    //    @ApiModelProperty(value = "监控主机")
+//    private String hostName;
+//
+//    @ApiModelProperty(value = "通道")
+//    private String channelName;
+//
+//    @ApiModelProperty(value = "录像完整性状态")
+//    private Integer integrityState;
+//
+//    @ApiModelProperty(value = "录像存储天数状态")
+//    private Integer daysState;
+//
+//    @ApiModelProperty(value = "视频诊断状态")
+//    private Integer diagnosisState;
+    @ApiModelProperty(value = "0:正常,1:异常,2:未知")
+    private Integer state;
+}

+ 11 - 5
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/mapper/IotDvrChannelMapper.java

@@ -7,26 +7,32 @@ import com.xunmei.common.core.domain.iot.domain.IotDvrDisk;
 import com.xunmei.common.core.domain.video.MediatorVideoIntegrityCheck;
 import com.xunmei.iot.dto.dvrDisk.DvrDiskAlarmHistoryPageDto;
 import com.xunmei.iot.dto.dvrDisk.DvrDiskPageDto;
+import com.xunmei.iot.dto.videoDiagnosis.VideoDiagnosisAppPageDto;
 import com.xunmei.iot.dto.videoDiagnosis.VideoDiagnosisWebPageDto;
 import com.xunmei.iot.vo.dvrDisk.DvrDiskAlarmHistoryPageVo;
 import com.xunmei.iot.vo.dvrDisk.DvrDiskPageVo;
 import com.xunmei.iot.vo.dvrDisk.DvrDiskStatisticVo;
+import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisAppPageVo;
 import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisWebPageVo;
 import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisWebVo;
 import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
- *  Mapper 接口
+ * Mapper 接口
  * </p>
  *
  * @author test
  * @since 2024-02-20
  */
 public interface IotDvrChannelMapper extends BaseMapper<IotDvrChannel> {
-    Page<VideoDiagnosisWebPageVo>  selectPage(@Param("page") Page<VideoDiagnosisWebPageVo> page,
-                                                  @Param("pageDto") VideoDiagnosisWebPageDto pageDto,
-                                                  @Param("orgPath") String orgPath);
+    Page<VideoDiagnosisWebPageVo> selectPage(@Param("page") Page<VideoDiagnosisWebPageVo> page,
+                                             @Param("pageDto") VideoDiagnosisWebPageDto pageDto,
+                                             @Param("orgPath") String orgPath);
 
-    VideoDiagnosisWebVo diagnosisDetail(@Param("hostCode") String hostCode,@Param("channelCode") String channelCode);
+    VideoDiagnosisWebVo diagnosisDetail(@Param("hostCode") String hostCode, @Param("channelCode") String channelCode);
+
+    Page<VideoDiagnosisAppPageVo> selectAppPage(@Param("page") Page<VideoDiagnosisAppPageVo> page,
+                                                @Param("pageDto") VideoDiagnosisAppPageDto pageDto,
+                                                @Param("orgPath") String orgPath);
 }

+ 6 - 6
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/VideoDiagnosisService.java

@@ -3,10 +3,9 @@ package com.xunmei.iot.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.domain.iot.domain.IotDvrChannel;
 import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.iot.dto.videoDiagnosis.VideoDiagnosisAppPageDto;
 import com.xunmei.iot.dto.videoDiagnosis.VideoDiagnosisWebPageDto;
-import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisIntegrityVo;
-import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisWebPageVo;
-import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisWebVo;
+import com.xunmei.iot.vo.videoDiagnosis.*;
 import org.apache.http.annotation.Obsolete;
 import org.springframework.web.bind.annotation.PathVariable;
 
@@ -22,11 +21,12 @@ import java.util.Date;
  */
 @Obsolete
 public interface VideoDiagnosisService extends IService<IotDvrChannel> {
-
     TableDataInfo<VideoDiagnosisWebPageVo> getPageData(VideoDiagnosisWebPageDto request);
 
-    VideoDiagnosisWebVo getDetail(String equipmentCode,String channelCode);
+    VideoDiagnosisWebVo getDetail(String equipmentCode, String channelCode);
+
+    VideoDiagnosisIntegrityVo getIntegrity(String hostCode, String channelCode, Date date);
 
-  VideoDiagnosisIntegrityVo getIntegrity(String hostCode, String channelCode , Date date);
+    TableDataInfo<VideoDiagnosisAppPageVo> getAppPageData(VideoDiagnosisAppPageDto request);
 
 }

+ 47 - 3
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/VideoDiagnosisServiceImpl.java

@@ -1,5 +1,7 @@
 package com.xunmei.iot.service.impl;
 
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -9,19 +11,19 @@ import com.xunmei.common.core.domain.iot.domain.IotDvrChannel;
 import com.xunmei.common.core.domain.video.MediatorVideoIntegrityCheck;
 import com.xunmei.common.core.enums.iot.VideoIntegrityStatus;
 import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.iot.dto.videoDiagnosis.VideoDiagnosisAppPageDto;
 import com.xunmei.iot.dto.videoDiagnosis.VideoDiagnosisWebPageDto;
 import com.xunmei.iot.mapper.IotDvrChannelMapper;
 import com.xunmei.iot.mapper.VideoIntegrityCheckMapper;
 import com.xunmei.iot.service.VideoDiagnosisService;
-import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisIntegrityVo;
-import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisWebPageVo;
-import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisWebVo;
+import com.xunmei.iot.vo.videoDiagnosis.*;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.validation.constraints.AssertFalse;
+import java.text.SimpleDateFormat;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Date;
@@ -51,6 +53,31 @@ public class VideoDiagnosisServiceImpl extends ServiceImpl<IotDvrChannelMapper,
     }
 
     @Override
+    public TableDataInfo<VideoDiagnosisAppPageVo> getAppPageData(VideoDiagnosisAppPageDto request) {
+        String orgPath = "";
+        if (request.getCheckSub()) {
+            SysOrg org = orgService.selectOrgById(request.getOrgId(), SecurityConstants.INNER);
+            orgPath = org.getPath();
+        }
+
+        Page<VideoDiagnosisAppPageVo> page = request.toPage();
+
+        page = baseMapper.selectAppPage(page, request, orgPath);
+        page.getRecords().forEach(r -> {
+            if (ObjectUtil.isEmpty(r.getChannels())) {
+                r.setState(null);
+            } else if (r.getChannels().stream().filter(c -> ObjectUtil.equal(c.getState(), 1)).findAny().isPresent()) {
+                r.setState(1);
+            } else if (r.getChannels().stream().filter(c -> ObjectUtil.equal(c.getState(), 2)).findAny().isPresent()) {
+                r.setState(2);
+            } else {
+                r.setState(0);
+            }
+        });
+        return TableDataInfo.success(page);
+    }
+
+    @Override
     public VideoDiagnosisWebVo getDetail(String hostCode, String channelCode) {
         VideoDiagnosisWebVo vo = baseMapper.diagnosisDetail(hostCode, channelCode);
         if (ObjectUtil.isNull(vo)) {
@@ -94,11 +121,28 @@ public class VideoDiagnosisServiceImpl extends ServiceImpl<IotDvrChannelMapper,
             } else {
                 vo.getStorage().setAllLostDates(new ArrayList<>());
             }
+
+            setUnknownDate(vo.getStorage(), vo.getStorage().getEarliestTime());
         }
 
         return vo;
     }
 
+    private void setUnknownDate(VideoDiagnosisStorageVo storage, Date earliest) {
+        storage.setUnknownDates(new ArrayList<>());
+        Date start = DateUtil.beginOfDay(earliest);
+        Date end=DateUtil.offset(new Date(),DateField.DAY_OF_YEAR,-1);
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        for (; !start.after(end); ) {
+            String str = format.format(start);
+            if (!storage.getFullDates().contains(str) && !storage.getPartialLossDates().contains(str) && !storage.getAllLostDates().contains(str)) {
+                storage.getUnknownDates().add(str);
+            }
+
+            start=DateUtil.offset(start, DateField.DAY_OF_YEAR,1);
+        }
+    }
+
     @Override
     public VideoDiagnosisIntegrityVo getIntegrity(String hostCode, String channelCode, Date date) {
         LambdaQueryWrapper<MediatorVideoIntegrityCheck> wrapper = new LambdaQueryWrapper<>();

+ 10 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/videoDiagnosis/VideoDiagnosisAppPageChannelVo.java

@@ -0,0 +1,10 @@
+package com.xunmei.iot.vo.videoDiagnosis;
+
+import lombok.Data;
+
+@Data
+public class VideoDiagnosisAppPageChannelVo {
+    private String channelCode;
+
+    private Integer state;
+}

+ 19 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/videoDiagnosis/VideoDiagnosisAppPageVo.java

@@ -0,0 +1,19 @@
+package com.xunmei.iot.vo.videoDiagnosis;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class VideoDiagnosisAppPageVo {
+    private String hostCode;
+
+    private String hostName;
+
+    private String orgName;
+
+    private  Integer state;
+
+    private List<VideoDiagnosisAppPageChannelVo> channels;
+}

+ 2 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/videoDiagnosis/VideoDiagnosisStorageVo.java

@@ -24,4 +24,6 @@ public class VideoDiagnosisStorageVo {
     private List<String> partialLossDates;
     @ApiModelProperty("全部丢失")
     private List<String> allLostDates;
+    @ApiModelProperty("未上报的日期")
+    private List<String> unknownDates;
 }

+ 114 - 30
soc-modules/soc-modules-iot/src/main/resources/mapper/IotDvrChannelMapper.xml

@@ -30,6 +30,19 @@
             <result column="storage_earliest_video_time" property="earliestTime"></result>
         </association>
     </resultMap>
+
+    <resultMap id="appPageMap" type="com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisAppPageVo">
+        <result column="equipment_code" property="hostCode"></result>
+        <result column="equipment_name" property="hostName"></result>
+        <result column="org_name" property="orgName"></result>
+        <result column="state" property="state"></result>
+        <collection property="channels" ofType="com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisAppPageChannelVo"
+                    column="equipmentCode=equipment_code,state=state"
+                    select="selectAppChannels">
+            <result column="channel_code" property="channelCode"></result>
+            <result column="state" property="state"></result>
+        </collection>
+    </resultMap>
     <select id="selectPage" resultType="com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisWebPageVo">
         SELECT
         c.id,
@@ -43,7 +56,8 @@
         vdc.real_days,
         vdr.signal_lost,
         vdr.occlude,
-        if(vdr.id is null,null,if(vdr.brightness+vdr.color_cast+vdr.snowflake+vdr.stripe+vdr.contrast+vdr.blurry>1,1,0)) as quality
+        if(vdr.id is null,null,if(vdr.brightness+vdr.color_cast+vdr.snowflake+vdr.stripe+vdr.contrast+vdr.blurry>1,1,0))
+        as quality
         from iot_dvr_channel c
         INNER JOIN iot_device d on c.host_code=d.equipment_code
         left JOIN mediator_video_days_check vdc on c.host_code=vdc.equipment_code and c.channel_code=vdc.channel_code
@@ -73,39 +87,109 @@
         <if test="pageDto.diagnosisState!=null">
             and vdr.is_alarm=#{pageDto.diagnosisState}
         </if>
-<!--        <if test="pageDto.status !=null">-->
-<!--            and dhd.`status` = #{pageDto.status}-->
-<!--        </if>-->
+        <!--        <if test="pageDto.status !=null">-->
+        <!--            and dhd.`status` = #{pageDto.status}-->
+        <!--        </if>-->
     </select>
 
     <select id="diagnosisDetail" resultMap="diagnosisDetailMap">
-        SELECT
-            d.equipment_name as hostName,
-            c.channel_name as channelName,
-            c.channel_addr as channelIp,
-            vdr.update_time as quality_update_time,
-            vdr.signal_lost as quality_signal_lost,
-            vdr.occlude as quality_occlude,
-            vdr.brightness as quality_brightness,
-            vdr.color_cast as quality_colorCast,
-            vdr.snowflake as quality_snowflake,
-            vdr.stripe as quality_stripe,
-            vdr.contrast as quality_contrast,
-            vdr.blurry as quality_blurry,
-            vdr.img_url as quality_image,
-            vic.record_date as integrity_record_date,
-            vic.lose_duration as integrity_lose_duration,
-            vic.lose_span as integrity_lose_span,
-            vic.check_span as integrity_check_span,
-            vic.update_time as integrity_update_time,
-            vdc.plan_days as storage_plan_days,
-            vdc.real_days as storage_real_days,
-            vdc.earliest_video_time as storage_earliest_video_time
+        SELECT d.equipment_name        as hostName,
+               c.channel_name          as channelName,
+               c.channel_addr          as channelIp,
+               vdr.update_time         as quality_update_time,
+               vdr.signal_lost         as quality_signal_lost,
+               vdr.occlude             as quality_occlude,
+               vdr.brightness          as quality_brightness,
+               vdr.color_cast          as quality_colorCast,
+               vdr.snowflake           as quality_snowflake,
+               vdr.stripe              as quality_stripe,
+               vdr.contrast            as quality_contrast,
+               vdr.blurry              as quality_blurry,
+               vdr.img_url             as quality_image,
+               vic.record_date         as integrity_record_date,
+               vic.lose_duration       as integrity_lose_duration,
+               vic.lose_span           as integrity_lose_span,
+               vic.check_span          as integrity_check_span,
+               vic.update_time         as integrity_update_time,
+               vdc.plan_days           as storage_plan_days,
+               vdc.real_days           as storage_real_days,
+               vdc.earliest_video_time as storage_earliest_video_time
         FROM iot_dvr_channel c
                  INNER JOIN iot_device d ON c.host_code = d.equipment_code
-                 LEFT JOIN mediator_video_days_check vdc ON c.host_code = vdc.equipment_code	AND c.channel_code = vdc.channel_code
-                 LEFT JOIN mediator_video_integrity_check_log vic ON c.host_code = vic.equipment_code	AND c.channel_code = vic.channel_code
-                 LEFT JOIN mediator_video_diagnosis_record vdr ON c.host_code = vdr.equipment_code AND c.channel_code = vdr.channel_code
-     	WHERE c.host_code=#{hostCode} and c.channel_code=#{channelCode}
+                 LEFT JOIN mediator_video_days_check vdc
+                           ON c.host_code = vdc.equipment_code AND c.channel_code = vdc.channel_code
+                 LEFT JOIN mediator_video_integrity_check vic
+                           ON c.host_code = vic.equipment_code AND c.channel_code = vic.channel_code
+                 LEFT JOIN mediator_video_diagnosis_record vdr
+                           ON c.host_code = vdr.equipment_code AND c.channel_code = vdr.channel_code
+        WHERE c.host_code = #{hostCode}
+          and c.channel_code = #{channelCode}
+    </select>
+
+    <select id="selectAppChannels" resultType="com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisAppPageChannelVo">
+        select dc.channel_code,
+        if(vdc.status is null and vic.status is null and vdr.is_alarm is null,2,if(vdc.status=0 and vic.status=0 and vdr.is_alarm=0,0,1)) as state
+        FROM iot_dvr_channel dc
+        LEFT JOIN mediator_video_days_check vdc on dc.host_code=vdc.equipment_code and dc.channel_code
+        =vdc.channel_code
+        LEFT JOIN mediator_video_integrity_check vic on dc.host_code=vic.equipment_code and dc.channel_code
+        =vic.channel_code
+        LEFT JOIN mediator_video_diagnosis_record vdr on dc.host_code=vdr.equipment_code and dc.channel_code
+        =vdr.channel_code
+        where dc.host_code=#{equipmentCode} and dc.deleted=0
+        <if test="state==0">
+            and (vdc.`status`=0 or vic.`status`=0 or vdr.is_alarm=0)
+        </if>
+        <if test="state==1">
+            and (vdc.`status`=1 or vic.`status`>0 or vdr.is_alarm=1)
+        </if>
+        <if test="state==2">
+            and (vdc.`status` is null or vic.`status` is null or vdr.is_alarm is null)
+        </if>
+        order by  dc.channel_code asc
+    </select>
+    <select id="selectAppPage" resultMap="appPageMap">
+        SELECT equipment_code,
+        equipment_name,
+        org_name,
+        #{pageDto.state} as state
+        from iot_device
+        WHERE category_id = 1
+        <if test="pageDto.checkSub==true">
+            and org_path like concat(#{orgPath}, '%')
+        </if>
+        <if test="pageDto.checkSub==false">
+            and org_id=#{pageDto.orgId}
+        </if>
+        and deleted=0
+        <if test="pageDto.state!=null">
+            and equipment_code in (
+            SELECT dc.host_code
+            FROM iot_dvr_channel dc
+            LEFT JOIN mediator_video_days_check vdc on dc.host_code=vdc.equipment_code and dc.channel_code
+            =vdc.channel_code
+            LEFT JOIN mediator_video_integrity_check vic on dc.host_code=vic.equipment_code and dc.channel_code
+            =vic.channel_code
+            LEFT JOIN mediator_video_diagnosis_record vdr on dc.host_code=vdr.equipment_code and dc.channel_code
+            =vdr.channel_code
+            WHERE dc.deleted=0
+            <if test="pageDto.state==0">
+                and (vdc.`status`=0 or vic.`status`=0 or vdr.is_alarm=0)
+            </if>
+            <if test="pageDto.state==1">
+                and (vdc.`status`=1 or vic.`status`>0 or vdr.is_alarm=1)
+            </if>
+            <if test="pageDto.state==2">
+                and (vdc.`status` is null or vic.`status` is null or vdr.is_alarm is null)
+            </if>
+            <if test="pageDto.checkSub==true">
+                and dc.org_path like concat(#{orgPath}, '%')
+            </if>
+            <if test="pageDto.checkSub==false">
+                and dc.org_id=#{pageDto.orgId}
+            </if>
+            GROUP BY dc.host_code
+            )
+        </if>
     </select>
 </mapper>