Jelajahi Sumber

物联看板

jiawuxian 1 tahun lalu
induk
melakukan
418a91cc1d

+ 9 - 0
project_data/sql/0.1.1/soc/soc.sql

@@ -1157,3 +1157,12 @@ INSERT INTO sys_multi_layer_dictionary (id, code, name, parent_id, type, type_na
 INSERT INTO sys_multi_layer_dictionary (id, code, name, parent_id, type, type_name, level, sort, create_time, modified_name, update_time, modified_id, deleted) VALUES (3713672266842156, '315', '火灾报警控制器', 3713672266842141, 'AssetDeviceType', '资产设备类', 2, 0, null, null, null, null, 0);
 INSERT INTO sys_multi_layer_dictionary (id, code, name, parent_id, type, type_name, level, sort, create_time, modified_name, update_time, modified_id, deleted) VALUES (3713672266842157, '316', '防火门', 3713672266842141, 'AssetDeviceType', '资产设备类', 2, 0, null, null, null, null, 0);
 INSERT INTO sys_multi_layer_dictionary (`id`, `code`, `name`, `parent_id`, `type`, `type_name`, `level`, `sort`, `create_time`, `modified_name`, `update_time`, `modified_id`, `deleted`) VALUES (6, '226', '报警控制器', 3713670431768576, 'AssetDeviceType', '资产设备类', 2, 0, NULL, NULL, NULL, NULL, 0);
+
+DELETE from `sys_role_menu` where menu_id=1839945558511747073;
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (115, 1839945558511747073);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (114, 1839945558511747073);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (116, 1839945558511747073);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (117, 1839945558511747073);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (118, 1839945558511747073);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (119, 1839945558511747073);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (120, 1839945558511747073);

+ 12 - 11
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/service/impl/CockpitServiceImpl.java

@@ -163,7 +163,7 @@ public class CockpitServiceImpl implements CockpitService {
          * 2、省联社、地区行社查看汇总数据,直接子集的汇总数据
          * 3、行社查看所有网点的数据,不能走直接子集的汇总数据,只能统计每个网点的数据。
          */
-        if(OrgTypeEnum.SHEGN_LIAN_SHE.getCode().equals(org.getType())){
+        if (OrgTypeEnum.SHEGN_LIAN_SHE.getCode().equals(org.getType())) {
             //统计省联社,获取每个地区行社的数据
             orgGA38StatisticVos = cockpitMapper.selectOrgGA38(org.getPath(), date, 1);
             orgGA38StatisticVos.sort(Comparator.comparing(OrgGA38StatisticVo::getReachRate));
@@ -206,14 +206,14 @@ public class CockpitServiceImpl implements CockpitService {
             return r;*/
         }
 
-        if(OrgTypeEnum.DIQU_HANG_SHE.getCode().equals(org.getType()) || "地区行社".equals(org.getName())){
+        if (OrgTypeEnum.DIQU_HANG_SHE.getCode().equals(org.getType()) || "地区行社".equals(org.getName())) {
             orgGA38StatisticVos = cockpitMapper.selectOrgGA38(org.getPath(), date, 2);
             orgGA38StatisticVos.sort(Comparator.comparing(OrgGA38StatisticVo::getReachRate));
             Collections.reverse(orgGA38StatisticVos);
             return orgGA38StatisticVos;
         }
 
-        if(OrgTypeEnum.HANG_SHE.getCode().equals(org.getType())){
+        if (OrgTypeEnum.HANG_SHE.getCode().equals(org.getType())) {
             //如果统计的具体行社,则要先查出所有网点
             orgGA38StatisticVos = cockpitMapper.selectOrgGA38(org.getPath(), date, 3);
         }
@@ -273,8 +273,8 @@ public class CockpitServiceImpl implements CockpitService {
             vo.setElectronicRate(NumberUtils.computeRate(total, vo.getElectronicCount()));
             vo.setUrgencyRate(NumberUtils.computeRate(total, vo.getUrgencyCount()));
             vo.setPaperRate(NumberUtils.computeRate(total, vo.getPaperCount()));
-        }else{
-            vo=new  VisitInfoVo();
+        } else {
+            vo = new VisitInfoVo();
         }
 
         return vo;
@@ -292,7 +292,7 @@ public class CockpitServiceImpl implements CockpitService {
 //        Map<String, Object> overdueCount = cockpitMapper.selectOverDueQuestionCount(org.getPath(), range.getStartTime(), range.getEndTime());
 
         QuestionStatisticVo vo = new QuestionStatisticVo();
-        int reformTotal=questionDto.getTotal()-questionDto.getUnconfirmedCount()- questionDto.getDissentCount()-questionDto.getClosedCount();
+        int reformTotal = questionDto.getTotal() - questionDto.getUnconfirmedCount() - questionDto.getDissentCount() - questionDto.getClosedCount();
         vo.setTotal(reformTotal);
         vo.setUnconfirm(NumberUtils.computeRate(questionDto.getTotal(), questionDto.getUnconfirmedCount()));
         vo.setDissent(NumberUtils.computeRate(questionDto.getTotal(), questionDto.getDissentCount()));
@@ -330,8 +330,9 @@ public class CockpitServiceImpl implements CockpitService {
         }
 
         vo.setMap(mapOption.get().getMap());
-        List<OrgSiteInfo> sites = orgMaps.stream().filter(o -> ObjectUtil.isNotNull(o.getLatitude()) && ObjectUtil.isNotNull(o.getLatitude()))
-                .map(o -> new OrgSiteInfo(o.getLongitude(), o.getLatitude(), o.getOrgName()))
+        List<OrgSiteInfo> sites = orgMaps.stream()
+                .filter(o -> ObjectUtil.isNotNull(o.getLatitude()) && ObjectUtil.isNotNull(o.getLatitude()))
+                .map(o -> new OrgSiteInfo(o.getLongitude(), o.getLatitude(), o.getOrgName(), o.getOrgId()))
                 .collect(Collectors.toList());
         vo.setSites(sites);
 
@@ -383,9 +384,9 @@ public class CockpitServiceImpl implements CockpitService {
 
     private List<TaskStatisticVo> getTaskChildren(SysOrg parent, List<Integer> hsChildType) {
         List<SysOrg> children;
-        if (ObjectUtil.equal(OrgTypeEnum.HANG_SHE.getCode(),parent.getType())){
-            children = remoteOrgService.selectByOrgPathAndOrgType(parent.getPath(),OrgTypeEnum.YINGYE_WANGDIAN.getCode(), SecurityConstants.INNER);
-        }else {
+        if (ObjectUtil.equal(OrgTypeEnum.HANG_SHE.getCode(), parent.getType())) {
+            children = remoteOrgService.selectByOrgPathAndOrgType(parent.getPath(), OrgTypeEnum.YINGYE_WANGDIAN.getCode(), SecurityConstants.INNER);
+        } else {
             children = remoteOrgService.selectChildrenFromDb(parent.getId(), SecurityConstants.INNER);
         }
 

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/OrgSiteInfo.java

@@ -8,6 +8,7 @@ import lombok.NoArgsConstructor;
 @NoArgsConstructor
 @Data
 public class OrgSiteInfo {
+
     /**
      * 经度
      */
@@ -19,4 +20,6 @@ public class OrgSiteInfo {
     private Double latitude;
 
     private String orgName;
+
+    private Long orgId;
 }

+ 6 - 2
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/IotWebStatisticController.java

@@ -4,9 +4,7 @@ import cn.hutool.core.util.EnumUtil;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.iot.enums.BoardPeriodEnum;
 import com.xunmei.iot.service.IIotWebStatisticBoardService;
-import com.xunmei.iot.vo.webStatisticBoard.BoardDeviceCountVo;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -67,4 +65,10 @@ public class IotWebStatisticController {
     public AjaxResult alarmList(@PathVariable Long orgId) {
         return AjaxResult.success(iotWebStatisticBoardService.alarmList(orgId));
     }
+
+    @ApiOperation("设备地图")
+    @GetMapping("/deviceCountOfChildren/{orgId}")
+    public AjaxResult deviceCountOfChildren(@PathVariable Long orgId) {
+        return AjaxResult.success(iotWebStatisticBoardService.deviceCountOfChildren(orgId));
+    }
 }

+ 14 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/dto/webStatisticBoard/BoardDeviceCountDto.java

@@ -0,0 +1,14 @@
+package com.xunmei.iot.dto.webStatisticBoard;
+
+import lombok.Data;
+
+@Data
+public class BoardDeviceCountDto {
+    private Long orgId;
+
+    private String orgPath;
+
+    private String deviceType;
+
+    private Integer count;
+}

+ 3 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/mapper/IotWebStatisticBoardMapper.java

@@ -2,6 +2,7 @@ package com.xunmei.iot.mapper;
 
 import com.xunmei.iot.dto.webStatisticBoard.BoardAlarmTrendDto;
 import com.xunmei.iot.dto.webStatisticBoard.BoardDeviceCountByTypeDto;
+import com.xunmei.iot.dto.webStatisticBoard.BoardDeviceCountDto;
 import com.xunmei.iot.vo.webStatisticBoard.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -26,4 +27,6 @@ public interface IotWebStatisticBoardMapper {
     BoardAlarmRateVo alarmRate(Long orgId);
 
     List<BoardAlarmInfoVo> alarmList(Long orgId);
+
+    List<BoardDeviceCountDto> orgDeviceCount(Long orgId);
 }

+ 2 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IIotWebStatisticBoardService.java

@@ -2,7 +2,6 @@ package com.xunmei.iot.service;
 
 import com.xunmei.iot.enums.BoardPeriodEnum;
 import com.xunmei.iot.vo.webStatisticBoard.*;
-import org.springframework.web.bind.annotation.PathVariable;
 
 import java.text.ParseException;
 import java.util.Collection;
@@ -22,4 +21,6 @@ public interface IIotWebStatisticBoardService {
     BoardAlarmRateVo alarmRate(Long orgId);
 
     List<BoardAlarmInfoVo> alarmList(Long orgId);
+
+    List<BoardDeviceCountVo> deviceCountOfChildren(Long orgId);
 }

+ 90 - 15
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotWebStatisticBoardServiceImpl.java

@@ -2,15 +2,19 @@ package com.xunmei.iot.service.impl;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.xunmei.common.core.constant.SecurityConstants;
+import com.xunmei.common.core.enums.iot.BaseDeviceTypeEnum;
 import com.xunmei.common.core.enums.iot.DeviceTypeEnum;
 import com.xunmei.common.core.utils.NumberUtils;
 import com.xunmei.iot.dto.webStatisticBoard.BoardAlarmTrendDto;
 import com.xunmei.iot.dto.webStatisticBoard.BoardDeviceCountByTypeDto;
+import com.xunmei.iot.dto.webStatisticBoard.BoardDeviceCountDto;
 import com.xunmei.iot.enums.BoardPeriodEnum;
 import com.xunmei.iot.mapper.IotWebStatisticBoardMapper;
 import com.xunmei.iot.service.IIotWebStatisticBoardService;
 import com.xunmei.iot.vo.webStatisticBoard.*;
 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;
 
@@ -27,10 +31,36 @@ public class IotWebStatisticBoardServiceImpl implements IIotWebStatisticBoardSer
     @Autowired
     IotWebStatisticBoardMapper iotWebStatisticBoardMapper;
 
-    final List<String> monitorDeviceTypes = Arrays.asList(DeviceTypeEnum.DVS.getCode(), DeviceTypeEnum.MONITOR_CAMERA.getCode(), DeviceTypeEnum.NUMBER_CAMERA.getCode());
-    final List<String> fireDeviceTypes = Arrays.asList(DeviceTypeEnum.FSU_Smoke.getCode(), DeviceTypeEnum.FSU_Gas.getCode(), DeviceTypeEnum.FSU_TemperatureAndHumidity.getCode());
-    final List<String> environmentTypes = Arrays.asList(DeviceTypeEnum.FSU_Theft.getCode(), DeviceTypeEnum.FSU_Infrared.getCode(), DeviceTypeEnum.FSU_DoorMagnetic.getCode(),
-            DeviceTypeEnum.FSU_RollingShutterDoor.getCode(), DeviceTypeEnum.FSU_Water.getCode(), DeviceTypeEnum.FSU_Ups.getCode(), DeviceTypeEnum.FSU_AirConditioner.getCode());
+    final List<String> monitorDeviceTypes = Arrays.asList(BaseDeviceTypeEnum.Dvs.getCode(),
+            BaseDeviceTypeEnum.monitor_camera.getCode(),
+            BaseDeviceTypeEnum.number_camera.getCode());
+    final List<String> fireDeviceTypes = Arrays.asList(BaseDeviceTypeEnum.FSU_Smoke.getCode(),
+            BaseDeviceTypeEnum.FSU_Gas.getCode(),
+            BaseDeviceTypeEnum.FSU_TemperatureAndHumidity.getCode(),
+            BaseDeviceTypeEnum.AlarmHostInput_Smoke.getCode(),
+            BaseDeviceTypeEnum.AlarmHostInput_Temperature.getCode(),
+            BaseDeviceTypeEnum.AlarmHostInput_Humidity.getCode());
+    final List<String> environmentTypes = Arrays.asList(BaseDeviceTypeEnum.FSU_Theft.getCode(),
+            BaseDeviceTypeEnum.FSU_Infrared.getCode(),
+            BaseDeviceTypeEnum.FSU_DoorMagnetic.getCode(),
+            BaseDeviceTypeEnum.FSU_Water.getCode(),
+            BaseDeviceTypeEnum.FSU_Ups.getCode(),
+            BaseDeviceTypeEnum.FSU_AirConditioner.getCode(),
+            BaseDeviceTypeEnum.FSU_DoPowerControl.getCode(),
+            BaseDeviceTypeEnum.FSU_DoPowerCollection.getCode(),
+            BaseDeviceTypeEnum.FSU_DoPowerControlBoxButton.getCode(),
+            BaseDeviceTypeEnum.AlarmHostInput_DoorSensor.getCode(),
+            BaseDeviceTypeEnum.AlarmHostInput_Infrared.getCode(),
+            BaseDeviceTypeEnum.AlarmHostInput_Soaking.getCode(),
+            BaseDeviceTypeEnum.AlarmHostInput_Displacement.getCode(),
+            BaseDeviceTypeEnum.AlarmHostInput_Broken.getCode(),
+            BaseDeviceTypeEnum.AlarmHostInput_Shock.getCode(),
+            BaseDeviceTypeEnum.AlarmHostInput_Tamper.getCode(),
+            BaseDeviceTypeEnum.AlarmHostInput_Intrusion.getCode(),
+            BaseDeviceTypeEnum.AlarmHostInput_IMDualIdentification.getCode(),
+            BaseDeviceTypeEnum.AlarmHostInput_Microwave.getCode(),
+            BaseDeviceTypeEnum.AlarmHostInput_EmergencyButton.getCode()
+    );
 
     final SimpleDateFormat dayFormat = new SimpleDateFormat("M月d");
     final SimpleDateFormat monthFormat = new SimpleDateFormat("yy年M月");
@@ -43,6 +73,7 @@ public class IotWebStatisticBoardServiceImpl implements IIotWebStatisticBoardSer
         Integer environmentCount = list.stream().filter(i -> environmentTypes.contains(i.getDeviceType())).mapToInt(i -> i.getCount()).sum();
 
         BoardDeviceCountVo vo = BoardDeviceCountVo.builder()
+                .orgId(orgId)
                 .monitorCount(monitorCount)
                 .fireCount(fireCount)
                 .environmentCount(environmentCount)
@@ -57,16 +88,16 @@ public class IotWebStatisticBoardServiceImpl implements IIotWebStatisticBoardSer
 
     @Override
     public List<BoardOnlineByTypeVo> deviceOnline(Long orgId) {
-        List<BoardOnlineByTypeVo> list = iotWebStatisticBoardMapper.deviceOnline(orgId, Arrays.asList(DeviceTypeEnum.DVS.getCode(),
-                DeviceTypeEnum.ALARM_HOST.getCode(), DeviceTypeEnum.FSU_Gateway.getCode()));
+        List<BoardOnlineByTypeVo> list = iotWebStatisticBoardMapper.deviceOnline(orgId, Arrays.asList(BaseDeviceTypeEnum.Dvs.getCode(),
+                BaseDeviceTypeEnum.FSU.getCode(), BaseDeviceTypeEnum.AlarmHost.getCode()));
         Set<String> hasDataType = list.stream().map(BoardOnlineByTypeVo::getDeviceType).collect(Collectors.toSet());
         list.addAll(initDeviceOnline().stream().filter(id -> !hasDataType.contains(id.getDeviceType())).collect(Collectors.toList()));
 
         for (BoardOnlineByTypeVo vo : list) {
             vo.setOnLineRate(NumberUtils.computeRate(vo.getDeviceCount(), vo.getOnLineCount()));
-            if (ObjectUtil.isNotEmpty(DeviceTypeEnum.getDescByCode(vo.getDeviceType()))) {
-                vo.setDeviceTypeName(DeviceTypeEnum.getDescByCode(vo.getDeviceType()));
-                if (ObjectUtil.equal(vo.getDeviceType(), DeviceTypeEnum.DVS.getCode())) {
+            if (ObjectUtil.isNotEmpty(BaseDeviceTypeEnum.getDescByCode(vo.getDeviceType()))) {
+                vo.setDeviceTypeName(BaseDeviceTypeEnum.getDescByCode(vo.getDeviceType()));
+                if (ObjectUtil.equal(vo.getDeviceType(), BaseDeviceTypeEnum.Dvs.getCode())) {
                     vo.setDeviceTypeName("监控主机");
                 }
             }
@@ -82,10 +113,9 @@ public class IotWebStatisticBoardServiceImpl implements IIotWebStatisticBoardSer
 
     private List<BoardOnlineByTypeVo> initDeviceOnline() {
         List<BoardOnlineByTypeVo> list = new ArrayList<>();
-        list.add(BoardOnlineByTypeVo.builder().deviceType(DeviceTypeEnum.DVS.getCode()).deviceTypeName("监控主机").deviceCount(0).onLineCount(0).onLineRate(0f).build());
-        list.add(BoardOnlineByTypeVo.builder().deviceType(DeviceTypeEnum.ALARM_HOST.getCode()).deviceTypeName(DeviceTypeEnum.ALARM_HOST.getDesc()).deviceCount(0).onLineCount(0).onLineRate(0f).build());
-        list.add(BoardOnlineByTypeVo.builder().deviceType(DeviceTypeEnum.FSU_Gateway.getCode()).deviceTypeName(DeviceTypeEnum.FSU_Gateway.getDesc()).deviceCount(0).onLineCount(0).onLineRate(0f).build());
-
+        list.add(BoardOnlineByTypeVo.builder().deviceType(BaseDeviceTypeEnum.Dvs.getCode()).deviceTypeName("监控主机").deviceCount(0).onLineCount(0).onLineRate(0f).build());
+        list.add(BoardOnlineByTypeVo.builder().deviceType(BaseDeviceTypeEnum.AlarmHost.getCode()).deviceTypeName(BaseDeviceTypeEnum.AlarmHost.getDesc()).deviceCount(0).onLineCount(0).onLineRate(0f).build());
+        list.add(BoardOnlineByTypeVo.builder().deviceType(BaseDeviceTypeEnum.FSU.getCode()).deviceTypeName(BaseDeviceTypeEnum.FSU.getDesc()).deviceCount(0).onLineCount(0).onLineRate(0f).build());
 
         return list;
     }
@@ -205,8 +235,8 @@ public class IotWebStatisticBoardServiceImpl implements IIotWebStatisticBoardSer
 
     @Override
     public BoardAlarmRateVo alarmRate(Long orgId) {
-        BoardAlarmRateVo vo=iotWebStatisticBoardMapper.alarmRate(orgId);
-        if(vo==null){
+        BoardAlarmRateVo vo = iotWebStatisticBoardMapper.alarmRate(orgId);
+        if (vo == null) {
             return new BoardAlarmRateVo();
         }
 
@@ -217,4 +247,49 @@ public class IotWebStatisticBoardServiceImpl implements IIotWebStatisticBoardSer
     public List<BoardAlarmInfoVo> alarmList(Long orgId) {
         return iotWebStatisticBoardMapper.alarmList(orgId);
     }
+
+    @Override
+    public List<BoardDeviceCountVo> deviceCountOfChildren(Long orgId) {
+        SysOrg sysOrg = orgService.selectOrgById(orgId, SecurityConstants.INNER);
+        List<SysOrg> children = new ArrayList<>();
+        if (sysOrg.getType() < 3 || sysOrg.getShortName().endsWith("地区行社") || sysOrg.getType() == 9) {
+            children = orgService.selectSysOrgByPathAndType(sysOrg.getPath(), 3, SecurityConstants.INNER);
+        } else if (sysOrg.getType() == 3 || sysOrg.getType() == 4) {
+            children = orgService.selectSysOrgByPathAndType(sysOrg.getPath(), 4, SecurityConstants.INNER);
+        } else {
+            return Collections.emptyList();
+        }
+
+        children.add(sysOrg);
+        List<BoardDeviceCountDto> deviceCountDtos = iotWebStatisticBoardMapper.orgDeviceCount(orgId);
+        List<BoardDeviceCountVo> vos = new ArrayList<>();
+        for (SysOrg child : children) {
+            BoardDeviceCountVo vo = BoardDeviceCountVo.builder()
+                    .orgId(child.getId())
+                    .environmentCount(0)
+                    .fireCount(0)
+                    .monitorCount(0)
+                    .build();
+            for (BoardDeviceCountDto deviceCountDto : deviceCountDtos) {
+                if (ObjectUtil.isEmpty(deviceCountDto.getOrgPath()) || !deviceCountDto.getOrgPath().startsWith(child.getPath())) {
+                    continue;
+                }
+
+                if (monitorDeviceTypes.contains(deviceCountDto.getDeviceType())) {
+                    vo.setMonitorCount(vo.getMonitorCount() + deviceCountDto.getCount());
+                }
+                if (fireDeviceTypes.contains(deviceCountDto.getDeviceType())) {
+                    vo.setFireCount(vo.getFireCount() + deviceCountDto.getCount());
+                }
+                if (environmentTypes.contains(deviceCountDto.getDeviceType())) {
+                    vo.setEnvironmentCount(vo.getEnvironmentCount() + deviceCountDto.getCount());
+                }
+            }
+            if (vo.getMonitorCount() > 0 || vo.getFireCount() > 0 || vo.getEnvironmentCount() > 0) {
+                vos.add(vo);
+            }
+        }
+
+        return vos;
+    }
 }

+ 2 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/webStatisticBoard/BoardDeviceCountVo.java

@@ -7,6 +7,8 @@ import lombok.Data;
 @Data
 @Builder
 public class BoardDeviceCountVo {
+    private Long orgId;
+
     @ApiModelProperty("监控设备数量")
     private Integer monitorCount;
 

+ 11 - 2
soc-modules/soc-modules-iot/src/main/resources/mapper/IotWebStatisticBoardMapper.xml

@@ -10,6 +10,15 @@
         GROUP BY di.device_type
     </select>
 
+    <select id="orgDeviceCount" resultType="com.xunmei.iot.dto.webStatisticBoard.BoardDeviceCountDto">
+        SELECT o.id as orgId, o.path as orgPath, di.device_type, count(0) as count
+        FROM iot_device_info di
+                 INNER JOIN sys_org o on di.org_id = o.id and o.deleted = 0 and o.is_lock = 0
+        WHERE o.path like CONCAT((select path from sys_org where id = #{orgId}), '%')
+          and di.deleted = 0
+        GROUP BY di.device_type, o.id, o.path
+    </select>
+
     <select id="protection" resultType="com.xunmei.iot.vo.webStatisticBoard.BoardProtectionVo">
         SELECT count(0)                            AS total,
                sum(
@@ -85,9 +94,9 @@
             AND o.deleted = 0
             AND o.is_lock = 0
             AND o.path LIKE concat((SELECT path FROM sys_org WHERE id = #{orgId}),
-             '%')
+                                   '%')
                  INNER JOIN iot_device_status ds
-        ON di.id = ds.device_id
+                            ON di.id = ds.device_id
     </select>
 
     <select id="alarmList" resultType="com.xunmei.iot.vo.webStatisticBoard.BoardAlarmInfoVo">