Prechádzať zdrojové kódy

物联总览bug修改

jingyuanchao 1 rok pred
rodič
commit
4b2391fac3

+ 14 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/iot/BaseDeviceTypeEnum.java

@@ -1,11 +1,13 @@
 package com.xunmei.common.core.enums.iot;
 
+import cn.hutool.core.collection.ListUtil;
 import io.netty.util.internal.StringUtil;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 
 import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
 
 @Getter
@@ -94,4 +96,16 @@ public enum BaseDeviceTypeEnum {
     public static BaseDeviceTypeEnum getEnumByCode(String code) {
         return enumMap.get(code);
     }
+
+
+    public static List<String> getSensorCodeList(){
+
+      return   ListUtil.of(
+              FSU_Smoke.getCode(),
+              FSU_Infrared.getCode(),
+              FSU_TemperatureAndHumidity.getCode(),
+              FSU_DoorMagnetic.getCode(),
+              FSU_Gas.getCode(),
+              FSU_Water.getCode());
+    }
 }

+ 2 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/mapper/IotAlarmDataMapper.java

@@ -34,4 +34,6 @@ public interface IotAlarmDataMapper extends BaseMapper<IotAlarmData> {
     List<Map<String,String>> selectAlarmCount(@Param("orgPath") String orgPath, @Param("beginTime") Date beginTime);
 
     List<AlarmTypeSelectedVO> selectAlarmTypeList(@Param("excludeTypes") List<String> excludeTypes,@Param("mixTypes") List<String> mixTypes, @Param("category")String category);
+
+    Integer selectUpsAlarmCount(@Param("orgPath") String orgPath, @Param("beginTime") Date beginTime);
 }

+ 6 - 3
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/mapper/IotBoardMapper.java

@@ -3,6 +3,7 @@ package com.xunmei.iot.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.xunmei.common.core.domain.video.MediatorVideoIntegrityCheckLog;
 import com.xunmei.iot.vo.board.IotBoardOverviewItemVo;
+import com.xunmei.iot.vo.overview.DeviceSummary;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -26,14 +27,16 @@ public interface IotBoardMapper extends BaseMapper {
 
     IotBoardOverviewItemVo dvrDisk(String orgPath);
 
-    List<Map<String,String>> countDeviceNums(String orgPath);
+    List<DeviceSummary> countDeviceNums(String orgPath);
 
-    List<Map<String, String>> countDeviceNums2(String orgPath);
+    List<Map<String, String>> countDeviceNums2(@Param("orgPath") String orgPath, @Param("sensorCodeList") List<String> sensorCodeList);
 
-    List<Map<String, String>> countSensorNums(String orgPath);
+    List<DeviceSummary> countSensorNums(@Param("orgPath") String orgPath, @Param("sensorCodeList") List<String> sensorCodeList);
 
 
     List<Map<String, String>> selectVideoDaysStorage(@Param("orgPath") String orgPath,@Param("startTime") Date startTime);
 
     List<MediatorVideoIntegrityCheckLog> selectVideoCheckSelf(@Param("orgPath") String orgPath, @Param("startTime") String startTime);
+
+    Integer countSensorNumsByType(@Param("orgPath") String orgPath, @Param("deviceType") String deviceType);
 }

+ 2 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IotAlarmDataService.java

@@ -44,4 +44,6 @@ public interface IotAlarmDataService extends IService<IotAlarmData> {
     void deleteData(Long orgId);
 
     List<AlarmTypeSelectedVO> getDeviceTypeList(String type);
+
+    Integer selectUpsAlarmCount(String orgPath);
 }

+ 7 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotAlarmDataServiceImpl.java

@@ -307,6 +307,13 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
     }
 
     @Override
+    public Integer selectUpsAlarmCount(String orgPath) {
+        Date date = new Date();
+        Date beginTime = DateUtil.offsetDay(DateUtil.beginOfDay(date), -90);
+        return baseMapper.selectUpsAlarmCount(orgPath, beginTime);
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public void deleteData(Long orgId) {
         baseMapper.delete(new LambdaQueryWrapper<IotAlarmData>().eq(IotAlarmData::getOrgId, orgId));

+ 43 - 26
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotBoardServiceImpl.java

@@ -9,11 +9,10 @@ import com.google.common.collect.Lists;
 import com.xunmei.common.core.constant.CacheConstants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.iot.domain.IotDvrDisk;
-import com.xunmei.common.core.domain.iot.domain.IotSensor;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmData;
 import com.xunmei.common.core.domain.video.MediatorVideoDaysCheck;
 import com.xunmei.common.core.domain.video.MediatorVideoIntegrityCheckLog;
-import com.xunmei.common.core.enums.CategoryDataEnum;
+import com.xunmei.common.core.enums.iot.BaseDeviceTypeEnum;
 import com.xunmei.common.core.enums.iot.SensorType;
 import com.xunmei.common.core.exception.ServiceException;
 import com.xunmei.common.core.thread.ThreadPoolConfig;
@@ -30,6 +29,7 @@ import com.xunmei.iot.vo.board.IotBoardOverviewItemVo;
 import com.xunmei.iot.vo.board.IotBoardOverviewVo;
 import com.xunmei.iot.vo.board.IotBoardTotalData;
 import com.xunmei.iot.vo.deviceInfo.DeviceDetailInfoVo;
+import com.xunmei.iot.vo.overview.DeviceSummary;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.domain.SysRole;
@@ -226,8 +226,8 @@ public class IotBoardServiceImpl implements IotBoardService {
         //查询当前登录用户需要通知的告警类型
         LoginUser loginUser = SecurityUtils.getLoginUser();
         List<Long> roleIds = null;
-        List<SysRole> sysRoles= loginUser.getSysUser().getRoles();
-        if (sysRoles != null && !sysRoles.isEmpty()){
+        List<SysRole> sysRoles = loginUser.getSysUser().getRoles();
+        if (sysRoles != null && !sysRoles.isEmpty()) {
             roleIds = sysRoles.stream().map(SysRole::getId).collect(Collectors.toList());
         }
         List<String> productTypes = coreNoticeRuleItemService.getNoticeProductTypesByUser(roleIds, orgId, loginUser.getUserid());
@@ -337,19 +337,19 @@ public class IotBoardServiceImpl implements IotBoardService {
         IotBoardTotalData totalData = new IotBoardTotalData();
         //构建设备一览表数据
         IotBoardTotalData.DeviceOverview deviceOverview = new IotBoardTotalData.DeviceOverview();
-        List<Map<String, String>> deviceNums = iotBoardMapper.countDeviceNums(orgPath);
-        List<Map<String, String>> deviceNums2 = iotBoardMapper.countDeviceNums2(orgPath);
-        for (Map<String, String> map : deviceNums) {
-            String aLong = map.get(MAP_VALUE);
-            int res = Integer.parseInt(aLong);
-            if (CategoryDataEnum.IOT_DETECTION_DEVICE.getId().equals(map.get(CATEGORY_ID))) {
-                deviceOverview.setEdgeComputingHosts(res);
+        List<DeviceSummary> deviceNums = iotBoardMapper.countDeviceNums(orgPath);
+        final List<String> sensorCodeList = BaseDeviceTypeEnum.getSensorCodeList();
+        List<Map<String, String>> deviceNums2 = iotBoardMapper.countDeviceNums2(orgPath, sensorCodeList);
+        for (DeviceSummary deviceSummary : deviceNums) {
+            final BaseDeviceTypeEnum typeEnum = BaseDeviceTypeEnum.getEnumByCode(deviceSummary.getDeviceType());
+            if (BaseDeviceTypeEnum.FSU.equals(typeEnum)) {
+                deviceOverview.setEdgeComputingHosts(deviceSummary.getNums());
             }
-            if (CategoryDataEnum.ALARM_HOST_DEVICE.getId().equals(map.get(CATEGORY_ID))) {
-                deviceOverview.setAlarmControllers(res);
+            if (BaseDeviceTypeEnum.AlarmHost.equals(typeEnum)) {
+                deviceOverview.setAlarmControllers(deviceSummary.getNums());
             }
-            if (CategoryDataEnum.MONITOR_HOST_DEVICE.getId().equals(map.get(CATEGORY_ID))) {
-                deviceOverview.setHardDiskRecorders(res);
+            if (BaseDeviceTypeEnum.Dvs.equals(typeEnum)) {
+                deviceOverview.setHardDiskRecorders(deviceSummary.getNums());
             }
         }
         for (Map<String, String> map : deviceNums2) {
@@ -375,29 +375,46 @@ public class IotBoardServiceImpl implements IotBoardService {
         IotBoardTotalData.VideoDiagnostic videoDiagnostic = videoDiagnosisService.selectVideoDiagnostic(orgPath, startTime);
         totalData.setVideoDiagnostic(videoDiagnostic);
 
-        totalData.setAirConditionerInfo(new IotBoardTotalData.AirConditionerInfo());
-        totalData.setUpsInfo(new IotBoardTotalData.UpsInfo());
+        //空调
+        totalData.setAirConditionerInfo(getAirConditionerInfo(orgPath));
+        totalData.setUpsInfo(getUpsInfo(orgPath));
 
         return totalData;
     }
 
+    private IotBoardTotalData.AirConditionerInfo getAirConditionerInfo(String orgPath) {
+        IotBoardTotalData.AirConditionerInfo info = new IotBoardTotalData.AirConditionerInfo();
+        Integer nums = iotBoardMapper.countSensorNumsByType(orgPath, BaseDeviceTypeEnum.FSU_Ups.getCode());
+        info.setTotalDevices(nums);
+        return info;
+    }
+
+    private IotBoardTotalData.UpsInfo getUpsInfo(String orgPath) {
+        IotBoardTotalData.UpsInfo info = new IotBoardTotalData.UpsInfo();
+        Integer nums = iotBoardMapper.countSensorNumsByType(orgPath, BaseDeviceTypeEnum.FSU_AirConditioner.getCode());
+        final Integer alarmCount = alarmDataService.selectUpsAlarmCount(orgPath);
+        info.setTotalDevices(nums);
+        info.setHistoricalAlarmCounts(ObjectUtil.isNull(alarmCount) ? 0 : alarmCount);
+        return info;
+    }
+
     private void sensorData(String MAP_VALUE, String DEVICE_TYPE, String orgPath, IotBoardTotalData totalData) {
         //物联设备最近90天的告警数据
         List<Map<String, String>> alarmCountMap = alarmDataService.selectAlarmCount(orgPath);
         //计算alarmCountMap 所有nums的总和
-        int nums = alarmCountMap.stream().filter(m -> ObjectUtil.notEqual(Integer.parseInt(m.get(DEVICE_TYPE)), SensorType.ALARM_SENSOR.getCode())).mapToInt(m -> Integer.parseInt(m.get(MAP_VALUE))).sum();
+        int nums = alarmCountMap.stream().filter(m -> ObjectUtil.notEqual(m.get(DEVICE_TYPE), SensorType.ALARM_SENSOR.getProductName())).mapToInt(m -> Integer.parseInt(m.get(MAP_VALUE))).sum();
         totalData.setTotalAlerts(nums);
 
         //传感器数据
-        List<Map<String, String>> mapList = iotBoardMapper.countSensorNums(orgPath);
+        List<DeviceSummary> mapList = iotBoardMapper.countSensorNums(orgPath, BaseDeviceTypeEnum.getSensorCodeList());
         List<IotBoardTotalData.SensorData> sensorDataList = new ArrayList<>();
         for (SensorType sensorType : SensorType.values()) {
-            Optional<Map<String, String>> mapOptional = mapList.stream().filter(m -> ObjectUtil.equal(sensorType.getCode().toString(), String.valueOf(m.get(DEVICE_TYPE)))).findAny();
+            final Optional<DeviceSummary> any = mapList.stream().filter(m -> ObjectUtil.equal(sensorType.getProductName(), String.valueOf(m.getDeviceProduct()))).findAny();
             int sensorNum = 0;
-            if (mapOptional.isPresent()) {
-                sensorNum = Integer.parseInt(mapOptional.get().get(MAP_VALUE));
+            if (any.isPresent()) {
+                sensorNum = any.get().getNums();
             }
-            Optional<Map<String, String>> alarmNumoptional = alarmCountMap.stream().filter(m -> ObjectUtil.equal(sensorType.getCode().toString(), String.valueOf(m.get(DEVICE_TYPE)))).findAny();
+            Optional<Map<String, String>> alarmNumoptional = alarmCountMap.stream().filter(m -> ObjectUtil.equal(sensorType.getProductName(), String.valueOf(m.get(DEVICE_TYPE)))).findAny();
             int alarmNum = 0;
             if (alarmNumoptional.isPresent()) {
                 alarmNum = Integer.parseInt(alarmNumoptional.get().get(MAP_VALUE));
@@ -444,8 +461,8 @@ public class IotBoardServiceImpl implements IotBoardService {
             videoInspection.setLostRate("-");
         } else {
             final Optional<MediatorVideoIntegrityCheckLog> optional = videoIntegrityCheckLogs.stream().max(Comparator.comparing(MediatorVideoIntegrityCheckLog::getCreateTime));
-            optional.ifPresent(d->videoInspection.setUpdateTime(d.getUpdateTime()));
-           // videoInspection.setUpdateTime(videoIntegrityCheckLogs.get(0).getUpdateTime());
+            optional.ifPresent(d -> videoInspection.setUpdateTime(d.getUpdateTime()));
+            // videoInspection.setUpdateTime(videoIntegrityCheckLogs.get(0).getUpdateTime());
         }
         //获取通道数量
         Integer channelNums = dvrChannelMapper.selectChannelCount(org.getPath());
@@ -475,7 +492,7 @@ public class IotBoardServiceImpl implements IotBoardService {
         final List<IotDvrDisk> dvrDiskList = iotDvrDiskMapper.selectDiskCount(org.getPath());
         if (ObjectUtil.isEmpty(dvrDiskList)) {
             videoInspection.setHardDiskExceptionRate("-");
-        }else {
+        } else {
             final long count1 = dvrDiskList.stream().filter(d -> ObjectUtil.equal(d.getState(), 0)).count();
             videoInspection.setHardDiskExceptionRate(String.format("%.2f", ((dvrDiskList.size() - count1) * 100.0 / dvrDiskList.size())) + "%");
         }

+ 11 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/overview/DeviceSummary.java

@@ -0,0 +1,11 @@
+package com.xunmei.iot.vo.overview;
+
+
+import lombok.Data;
+
+@Data
+public class DeviceSummary {
+    private String deviceProduct;
+    private String deviceType;
+    private int nums;
+}

+ 39 - 14
soc-modules/soc-modules-iot/src/main/resources/mapper/IotAlarmDataMapper.xml

@@ -130,17 +130,17 @@
 
     <select id="selectDeviceTypeCount" resultType="com.xunmei.iot.vo.alarmData.DeviceTypeCountVo">
         SELECT a.id,
-            a.device_type as deviceType,
-            count(1) as deviceTypeCount,
-            t.alarmNums as deviceTypeAlarmCount
+        a.device_type as deviceType,
+        count(1) as deviceTypeCount,
+        t.alarmNums as deviceTypeAlarmCount
         FROM iot_device_info a
         left JOIN (
-            SELECT s.device_id as deviceId,
-                      COUNT(1) as alarmNums
-            from iot_device_info i
-            INNER join iot_device_status s on i.id = s.device_id and i.iot_token = s.iot_token and i.deleted = 0
-            WHERE s.state=1
-            group by s.device_id
+        SELECT s.device_id as deviceId,
+        COUNT(1) as alarmNums
+        from iot_device_info i
+        INNER join iot_device_status s on i.id = s.device_id and i.iot_token = s.iot_token and i.deleted = 0
+        WHERE s.state=1
+        group by s.device_id
         ) t on t.deviceId= a.id
         WHERE a.deleted = 0
         <if test="  query.checkSub != null and query.checkSub == true">
@@ -152,13 +152,13 @@
         GROUP BY a.id
         union all
         SELECT a.id,
-            a.sensor_type as deviceType,
-            count(1) as deviceTypeCount,
-            t.alarmNums as deviceTypeAlarmCount
+        a.sensor_type as deviceType,
+        count(1) as deviceTypeCount,
+        t.alarmNums as deviceTypeAlarmCount
         FROM iot_alarm_defence_area a
         left JOIN (
-                SELECT a.id as deviceId,
-                sum(IF(a.state='alarm',1,0)) as alarmNums FROM iot_alarm_defence_area a where a.deleted=0 GROUP BY a.id
+        SELECT a.id as deviceId,
+        sum(IF(a.state='alarm',1,0)) as alarmNums FROM iot_alarm_defence_area a where a.deleted=0 GROUP BY a.id
         ) t on a.id=t.deviceId WHERE a.deleted = 0
         <if test="  query.checkSub != null and query.checkSub == true">
             and a.org_path like concat(concat('%',#{query.orgPath}),'%')
@@ -244,4 +244,29 @@
         </choose>
         group by product_type
     </select>
+
+    <select id="selectUpsAlarmCount" resultType="java.lang.Integer">
+        select CAST(SUM(1) AS CHAR) as nums
+        from iot_alarm_data d
+                 inner join sys_org o on o.id = d.org_id
+        where o.deleted = 0
+          and data_type = 0
+          and (
+                (
+                            #{beginTime}   <![CDATA[<=]]> d.time
+                        and now()       <![CDATA[>=]]> d.time
+                    )
+                or
+                (
+                            #{beginTime}   <![CDATA[<=]]> d.end_time
+                        and now()       <![CDATA[>=]]> d.end_time
+                    )
+                or (
+                            #{beginTime}   <![CDATA[>=]]> d.time
+                        and now()     <![CDATA[<=]]> d.end_time
+                    )
+            )
+          and o.path like concat(#{orgPath}, '%')
+          and d.source_type = 'FSU_Ups'
+    </select>
 </mapper>

+ 41 - 22
soc-modules/soc-modules-iot/src/main/resources/mapper/IotBoardMapper.xml

@@ -92,46 +92,55 @@
           and d.org_path like concat(#{orgPath}, '%')
     </select>
 
-    <select id="countDeviceNums" resultType="java.util.Map">
-        select category_id as categoryId, CAST(COUNT(1) AS CHAR) as nums
-        from iot_device d
+    <select id="countDeviceNums" resultType="com.xunmei.iot.vo.overview.DeviceSummary">
+        select device_product as deviceProduct, d.device_type as deviceType, CAST(COUNT(1) AS CHAR) as nums
+        from iot_device_info d
                  inner join sys_org o on o.id = d.org_id
         where d.deleted = 0
           and o.deleted = 0
           and org_path like concat(#{orgPath}, '%')
-        group by category_id
+        group by device_product
     </select>
 
     <select id="countDeviceNums2" resultType="java.util.Map">
         select 'sensor' as categoryId, CAST(COUNT(1) AS CHAR) as nums
-        from iot_sensor s
-                 inner join sys_org o on o.id = s.org_id
+        from iot_device_info s
+        inner join sys_org o on o.id = s.org_id
         where s.deleted = 0
-          and o.deleted = 0
-          and org_path like concat(#{orgPath}, '%')
+        and o.deleted = 0
+        and s.device_type in
+        <foreach collection="sensorCodeList" item="item" separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        and org_path like concat(#{orgPath}, '%')
         union all
         select 'channel' as categoryId, CAST(COUNT(1) AS CHAR) as nums
-        from iot_dvr_channel c
-                 inner join sys_org o on o.id = c.org_id
+        from iot_device_info c
+        inner join sys_org o on o.id = c.org_id
         where c.deleted = 0
-          and o.deleted = 0
-          and org_path like concat(#{orgPath}, '%')
+        and o.deleted = 0
+        and c.device_type in(2,3)
+        and org_path like concat(#{orgPath}, '%')
         union all
         select 'disk' as categoryId, CAST(COUNT(1) AS CHAR) as nums
         from iot_dvr_disk d
-                 inner join sys_org o on o.id = d.org_id
+        inner join sys_org o on o.id = d.org_id
         where d.deleted = 0
-          and o.deleted = 0
-          and org_path like concat(#{orgPath}, '%')
+        and o.deleted = 0
+        and org_path like concat(#{orgPath}, '%')
     </select>
 
-    <select id="countSensorNums" resultType="java.util.Map">
-        select s.device_type as deviceType, CAST(COUNT(1) AS CHAR) as nums
-        from iot_sensor s
-                 inner join sys_org o on o.id = s.org_id
+    <select id="countSensorNums" resultType="com.xunmei.iot.vo.overview.DeviceSummary">
+        select s.device_type as deviceType,s.device_product as deviceProduct, CAST(COUNT(1) AS CHAR) as nums
+        from iot_device_info s
+        inner join sys_org o on o.id = s.org_id
         where o.deleted = 0
-          and s.deleted = 0
-          and org_path like concat(#{orgPath}, '%')
+        and s.deleted = 0
+        and s.device_type in
+        <foreach collection="sensorCodeList" item="item" separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        and org_path like concat(#{orgPath}, '%')
         group by s.device_type
     </select>
 
@@ -154,7 +163,17 @@
                  inner join sys_org o on o.id = c.org_id
         where o.deleted = 0
           and record_date >= #{startTime}
-          and org_path  like concat(#{orgPath}, '%')
+          and org_path like concat(#{orgPath}, '%')
         group by c.equipment_code, c.channel_code, record_date
     </select>
+
+    <select id="countSensorNumsByType" resultType="java.lang.Integer">
+        select count(1)
+        from iot_device_info s
+                 inner join sys_org o on o.id = s.org_id
+        where o.deleted = 0
+          and s.deleted = 0
+          and s.device_type = #{deviceType}
+          and o.path like concat(#{orgPath}, '%')
+    </select>
 </mapper>

+ 2 - 1
soc-modules/soc-modules-iot/src/main/resources/mapper/IotDvrChannelMapper.xml

@@ -550,10 +550,11 @@
 
     <select id="selectChannelCount" resultType="java.lang.Integer">
         select count(1)
-        from iot_dvr_channel d
+        from iot_device_info d
                  inner join sys_org o on o.id = d.org_id
         where o.deleted = 0
           and d.deleted = 0
+            and device_type in (2,3)
           and o.path like concat(#{orgPath}, '%')
     </select>