Pārlūkot izejas kodu

app综合调度、监测列表、管网监测查询

yuejiaying 4 gadi atpakaļ
vecāks
revīzija
97106563d2

+ 48 - 0
sms_water/src/main/java/com/huaxu/controller/OnlineMonitorController.java

@@ -243,4 +243,52 @@ public class OnlineMonitorController {
         return new AjaxMessage<>(ResultStatus.OK, result);
     }
 
+    @RequestMapping(value="statsPipeNetQualified" , method = RequestMethod.GET)
+    @ApiOperation(value = "App-统计管网设备合格数据",notes = "sceneTypeName 为压力、水质、流量")
+    public AjaxMessage<List<DeviceCountStatsDto>> statsPipeNetQualified(
+            @ApiParam(value = "场景类型名称", required = false) @RequestParam(required = false) String sceneTypeName){
+        OnlineDataDto onlineDataDto=new OnlineDataDto();
+        onlineDataDto.setSceneTypeName(sceneTypeName);
+        onlineDataDto.setFlag(1);
+        onlineDataDto.setSceneIds(sceneService.findByParentIdsLike(null));
+        List<DeviceCountStatsDto> result=onlineMonitorService.statsDeviceQualified(onlineDataDto);
+        return new AjaxMessage<>(ResultStatus.OK, result);
+    }
+
+    @RequestMapping(value="selectList" , method = RequestMethod.GET)
+    @ApiOperation(value = "App-查询场景实时数据列表")
+    public AjaxMessage<List<OnlineDataDto>> selectList(
+            @ApiParam(value = "一级场景类型名称", required = true) @RequestParam String sceneTypeName,
+            @ApiParam(value = "场景id", required = false) @RequestParam(required = false)Long sceneId,
+            @ApiParam(value = "公司id", required = false) @RequestParam(required = false)Integer companyOrgId){
+        OnlineDataDto onlineDataDto=new OnlineDataDto();
+        onlineDataDto.setSceneTypeName(sceneTypeName);
+        onlineDataDto.setSceneId(sceneId);
+        onlineDataDto.setCompanyOrgId(companyOrgId);
+        onlineDataDto.setSceneIds(sceneService.findByParentIdsLike(null));
+        List<OnlineDataDto> result = onlineMonitorService.selectList(onlineDataDto);
+        return new AjaxMessage<>(ResultStatus.OK, result);
+    }
+
+    @RequestMapping(value="selectPipeNetList" , method = RequestMethod.GET)
+    @ApiOperation(value = "App-查询管网实时数据列表")
+    public AjaxMessage<List<OnlineDataDto>> selectPipeNetList(
+            @ApiParam(value = "场景类型名称(压力、流量、水质)", required = true) @RequestParam String sceneTypeName,
+            @ApiParam(value = "设备id", required = false) @RequestParam(required = false)Long deviceId,
+            @ApiParam(value = "公司id", required = false) @RequestParam(required = false)Integer companyOrgId){
+        OnlineDataDto onlineDataDto=new OnlineDataDto();
+        onlineDataDto.setSceneTypeName(sceneTypeName);
+        if(sceneTypeName.equals("压力")){
+            onlineDataDto.setType(1);
+        }else if(sceneTypeName.equals("流量")){
+            onlineDataDto.setType(2);
+        }else if(sceneTypeName.equals("水质")){
+            onlineDataDto.setType(3);
+        }
+        onlineDataDto.setDeviceId(deviceId);
+        onlineDataDto.setCompanyOrgId(companyOrgId);
+        onlineDataDto.setSceneIds(sceneService.findByParentIdsLike(null));
+        List<OnlineDataDto> result = onlineMonitorService.selectPipeNetList(onlineDataDto);
+        return new AjaxMessage<>(ResultStatus.OK, result);
+    }
 }

+ 12 - 0
sms_water/src/main/java/com/huaxu/dao/OnlineMonitorMapper.java

@@ -98,4 +98,16 @@ public interface OnlineMonitorMapper {
      * @return
      */
     Double selectTotalYieldWater(MonitorDataCollectDto monitorDataCollectDto);
+
+    /**
+     * 查询场景列表
+     * @return
+     */
+    List<OnlineDataDto> selectList(OnlineDataDto onlineDataDto);
+
+    /**
+     * 查询管网设备列表
+     * @return
+     */
+    List<OnlineDataDto> selectPipeNetList(OnlineDataDto onlineDataDto);
 }

+ 5 - 0
sms_water/src/main/java/com/huaxu/dto/DeviceCountStatsDto.java

@@ -30,6 +30,11 @@ public class DeviceCountStatsDto {
      */
     @ApiModelProperty(value = "正常设备数量")
     private Integer normalCount;
+    /**
+     * 离线设备数量
+     */
+    @ApiModelProperty(value = "离线设备数量")
+    private Integer offlineCount;
     /**
      * 设备属性合格数据
      */

+ 2 - 1
sms_water/src/main/java/com/huaxu/dto/MonitorDataCollectDto.java

@@ -95,7 +95,8 @@ public class MonitorDataCollectDto {
     @ApiModelProperty(value ="一级场景类型名称")
     private String sceneTypeName;
 
-    @ApiModelProperty(value ="在线监测类型 1查询需计算的属性、2查询监测列表的属性、3查询地图悬浮属性、4查询地图参数属性",hidden = true)
+    @ApiModelProperty(value ="在线监测类型 1查询需计算的属性、2查询监测列表的属性、" +
+            "3查询地图悬浮属性、4查询地图参数属性、5查询App监测列表的属性",hidden = true)
     @JsonIgnore
     private Integer type;
 

+ 7 - 0
sms_water/src/main/java/com/huaxu/dto/OnlineDataDto.java

@@ -134,4 +134,11 @@ public class OnlineDataDto {
     @ApiModelProperty(value ="0或空无离线、1有离线",hidden = true)
     @JsonIgnore
     private Integer flag;
+
+    @ApiModelProperty("场景状态 1报警 0正常 2离线")
+    private Integer sceneState;
+
+    @ApiModelProperty(value ="公司id",hidden = true)
+    @JsonIgnore
+    private Integer companyOrgId;
 }

+ 11 - 0
sms_water/src/main/java/com/huaxu/service/OnlineMonitorService.java

@@ -100,4 +100,15 @@ public interface OnlineMonitorService {
      * @return
      */
     List<SecDataCollectDto> selectMapForWholeCompany(MonitorDataCollectDto monitorDataCollectDto);
+
+    /**
+     * 查询场景列表
+     * @return
+     */
+    List<OnlineDataDto> selectList(OnlineDataDto onlineDataDto);
+    /**
+     * 查询管网设备列表
+     * @return
+     */
+    List<OnlineDataDto> selectPipeNetList(OnlineDataDto onlineDataDto);
 }

+ 46 - 1
sms_water/src/main/java/com/huaxu/service/impl/OnlineMonitorImpl.java

@@ -256,7 +256,7 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
         //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
         onlineDataDto.setPermissonType(loginUser.getPermissonType());
         List<DeviceCountStatsDto> result=onlineMonitorMapper.statsDeviceQualified(onlineDataDto);
-        if(!StringUtils.isEmpty(onlineDataDto.getSceneTypeName())&&result.size()>0) {
+        if(!StringUtils.isEmpty(onlineDataDto.getSceneTypeName())&&result.size()>0&&onlineDataDto.getFlag()==null) {
             List<DeviceCountStatsDto> parmResult=onlineMonitorMapper.statsParmQualified(onlineDataDto);
             result.get(0).setParmQualified(parmResult);
             for(DeviceCountStatsDto parm : result.get(0).getParmQualified()){
@@ -527,7 +527,52 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
         }
         return secDataCollectDtos;
     }
+    /**
+     * 查询场景列表
+     * @return
+     */
+    @Override
+    public List<OnlineDataDto> selectList(OnlineDataDto onlineDataDto){
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        onlineDataDto.setTenantId(loginUser.getTenantId());
+        onlineDataDto.setProgramItems(loginUser.getProgramItemList());
+        onlineDataDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        onlineDataDto.setPermissonType(loginUser.getPermissonType());
+
+        List<OnlineDataDto> result =onlineMonitorMapper.selectList(onlineDataDto);
+        MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
+        List<Long> sceneIds = result.stream().map(OnlineDataDto::getSceneId).collect(Collectors.toList());
+        monitorDataCollectDto.setType(5);
+        monitorDataCollectDto.setSceneIds(sceneIds);
+        monitorDataCollectDto.setTenantId(loginUser.getTenantId());
+        List<MonitorDataCollectDto> calculateRes=onlineMonitorMapper.selectSceneParam(monitorDataCollectDto);
+
+        GetCalOnlineData(result,calculateRes);//获取在线数据及计算数据
+        return result;
+    }
+    /**
+     * 查询管网设备列表
+     * @return
+     */
+    @Override
+    public List<OnlineDataDto> selectPipeNetList(OnlineDataDto onlineDataDto){
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        onlineDataDto.setTenantId(loginUser.getTenantId());
+        onlineDataDto.setProgramItems(loginUser.getProgramItemList());
+        onlineDataDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        onlineDataDto.setPermissonType(loginUser.getPermissonType());
+
+        List<OnlineDataDto> result =onlineMonitorMapper.selectPipeNetList(onlineDataDto);
+        List<Long> deviceIds = result.stream().map(OnlineDataDto::getDeviceId).collect(Collectors.toList());
+        onlineDataDto.setDeviceIds(deviceIds);
+        onlineDataDto.setTenantId(loginUser.getTenantId());
+        List<MonitorDataCollectDto> calculateRes=onlineMonitorMapper.statsDeviceParm(onlineDataDto);
 
+        GetCalOnlineData(result,calculateRes);//获取在线数据及计算数据
+        return result;
+    }
     /**
      * 获取在线数据及计算数据
      */

+ 140 - 11
sms_water/src/main/resources/mapper/OnlineMonitorMapper.xml

@@ -130,12 +130,12 @@
             group by parent_scene_id
         )t7 on t7.parent_scene_id=t1.id
         <if test="flag == 1">
-        left join (
-            select parent_scene_id,count(distinct device_id) setting_device_count
-            from sms_alarm_setting
-            where alarm_type='状态报警' and status=1
-            group by parent_scene_id
-        )t10 on t7.parent_scene_id=t10.parent_scene_id
+            left join (
+                select parent_scene_id,count(distinct device_id) setting_device_count
+                from sms_alarm_setting
+                where alarm_type='状态报警' and status=1
+                group by parent_scene_id
+            )t10 on t7.parent_scene_id=t10.parent_scene_id
         </if>
     </sql>
 
@@ -276,11 +276,27 @@
         </if>
         order by t1.scene_name,t5.seq
     </select>
-    <!--查询实时数据列表-->
+    <!--分页查询实时数据列表-->
     <select id="selectPage" resultType="com.huaxu.dto.OnlineDataDto">
         select t1.id scene_id,t1.scene_name,t1.address
         from sms_scene t1
         inner join sms_scene_type t3 on t3.id = t1.scene_type_id and t3. status = 1
+        left join(
+            select parent_scene_id,max(last_update_time) last_update_time
+            from sms_device_scene a1
+            left join sms_device a2 on a2.id=a1.device_id
+            where
+            <if test="onlineDataDto.sceneIds != null and onlineDataDto.sceneIds.size() > 0">
+                a1.scene_id  in
+                <foreach collection="onlineDataDto.sceneIds" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="onlineDataDto.sceneIds == null or onlineDataDto.sceneIds.size() == 0">
+                a1.scene_id is null
+            </if>
+            group by parent_scene_id
+        )t4 on t1.id=t4.parent_scene_id
         where t1.parent_scene_id = 0 and t1. status = 1 and t1. enable_state = 1 and t3.scene_type_name = #{onlineDataDto.sceneTypeName}
         <if test="onlineDataDto.sceneIds != null and onlineDataDto.sceneIds.size() > 0">
             and t1.id  in
@@ -297,7 +313,7 @@
         <if test="onlineDataDto.tenantId != null and onlineDataDto.tenantId != ''">
             and t1.tenant_id = #{onlineDataDto.tenantId}
         </if>
-        order by  t1.date_create
+        order by t4.last_update_time desc
     </select>
     <!--查询设备报警分析-->
     <select id="selectAlarmStats" resultType="java.util.Map">
@@ -344,6 +360,9 @@
         <if test="type == 2 ">
             and t5.parm_type in(2,3,4,5,6,7,8,9,10,11,12,13,14)
         </if>
+        <if test="type == 5 ">
+            and t5.parm_type in(3,4,13,14)
+        </if>
         <if test="sceneTypeName != null and sceneTypeName != '' ">
             and t3.scene_type_name = #{sceneTypeName}
         </if>
@@ -456,13 +475,29 @@
     </select>
     <!--统计设备合格数据-->
     <select id="statsDeviceQualified" resultType="com.huaxu.dto.DeviceCountStatsDto">
-        select t5.scene_type_name type,count(1) totalCount,sum(if(t7.device_id is null,0,1)) alarmCount,count(1)-sum(if(t7.device_id is null,0,1)) normalCount
+        select t5.scene_type_name type,count(1) totalCount,sum(if(t7.device_id is null,0,1)) alarmCount
+        <if test="flag == null or flag ==0">
+            ,count(1)-sum(if(t7.device_id is null,0,1)) normalCount
+        </if>
+        <if test="flag == 1">
+            ,sum(if(t8.device_id is null,0,1)) offlineCount
+            ,count(1)-sum(if(t7.device_id is null,0,1))-sum(if(t8.device_id is null,0,1)) normalCount
+        </if>
         from sms_scene t1
         <include refid="deviceInnerJoins"/>
         left join(
-            select a1.scene_id, a1.device_id from sms_alarm_details a1 where a1.`status` = 1 and a1.state = 1 and a1.alarm_type = '参数报警'
+            select a1.scene_id, a1.device_id from sms_alarm_details a1 where a1.`status` = 1 and a1.state = 1
+            <if test="sceneTypeName != null and sceneTypeName !=''">
+                and a1.alarm_type = '参数报警'
+            </if>
             group by a1.scene_id, a1.device_id
         )t7 on t7.scene_id=t2.scene_id and t7.device_id=t2.device_id
+        <if test="flag == 1">
+            left join(
+                select a1.scene_id, a1.device_id from sms_alarm_details a1 where a1.`status` = 1 and a1.state = 1 and a1.alarm_type = '状态报警'
+                group by a1.scene_id, a1.device_id
+            )t8 on t8.scene_id=t2.scene_id and t8.device_id=t2.device_id
+        </if>
         where t1.parent_scene_id = 0 and t1. status = 1 and t1. enable_state = 1 and t3.scene_type_name = '管网'
         <choose>
             <when test="sceneTypeName != null and sceneTypeName !=''">
@@ -577,7 +612,7 @@
             and t6.device_name like concat('%', #{deviceName},'%')
         </if>
     </select>
-    <!--查询管网实时数据列表-->
+    <!--分页查询管网实时数据列表-->
     <select id="selectPipeNetPage" resultType="com.huaxu.dto.OnlineDataDto">
         select t1.id scene_id,t1.scene_name,t6.id device_id,t6.device_code,t6.device_name,t6.address,if (t7.alarm_count>0, 1, 0) deviceState
         from sms_scene t1
@@ -663,4 +698,98 @@
             and t1.tenant_id = #{tenantId}
         </if>
     </select>
+    <!--查询实时数据列表-->
+    <select id="selectList" resultType="com.huaxu.dto.OnlineDataDto">
+        select t1.id scene_id,t1.scene_name,t1.address
+            ,case when t7.offline_alarm_count=t10.setting_device_count then 2
+            when t7.alarm_count>0 or t7.offline_alarm_count>0 then 1 else 0 end scene_state
+        from sms_scene t1
+        inner join sms_scene_type t3 on t3.id = t1.scene_type_id and t3. status = 1
+        left join(
+            select parent_scene_id,max(last_update_time) last_update_time
+            from sms_device_scene a1
+            left join sms_device a2 on a2.id=a1.device_id
+            where
+            <if test="sceneIds != null and sceneIds.size() > 0">
+                a1.scene_id  in
+                <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="sceneIds == null or sceneIds.size() == 0">
+                a1.scene_id is null
+            </if>
+            group by parent_scene_id
+        )t4 on t1.id=t4.parent_scene_id
+        left join (
+            select parent_scene_id
+                ,sum(case when alarm_type='参数报警' then 1 else 0 end) alarm_count
+                ,sum(case when alarm_type='状态报警' then 1 else 0 end) offline_alarm_count
+            from sms_alarm_details a1
+            where a1.`status` = 1 and a1.state = 1
+            <if test="sceneIds != null and sceneIds.size() > 0">
+                and a1.scene_id  in
+                <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+            group by parent_scene_id
+        )t7 on t7.parent_scene_id=t1.id
+        left join (
+            select parent_scene_id,count(distinct device_id) setting_device_count
+            from sms_alarm_setting
+            where alarm_type='状态报警' and status=1
+            group by parent_scene_id
+        )t10 on t7.parent_scene_id=t10.parent_scene_id
+        where t1.parent_scene_id = 0 and t1. status = 1 and t1. enable_state = 1 and t3.scene_type_name = #{sceneTypeName}
+        <if test="sceneIds != null and sceneIds.size() > 0">
+            and t1.id  in
+            <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="sceneIds == null or sceneIds.size() == 0">
+            and t1.id is null
+        </if>
+        <if test="tenantId != null and tenantId != ''">
+            and t1.tenant_id = #{tenantId}
+        </if>
+        <if test="sceneId != null and sceneId != ''">
+            and t1.id = #{sceneId}
+        </if>
+        <if test="companyOrgId != null and companyOrgId != ''">
+            and t1.company_org_id = #{companyOrgId}
+        </if>
+        order by  field(scene_state,1,0,2),t4.last_update_time desc
+    </select>
+    <!--查询管网实时数据列表-->
+    <select id="selectPipeNetList" resultType="com.huaxu.dto.OnlineDataDto">
+        select t1.id scene_id,t1.scene_name,t6.id device_id,t6.device_code,t6.device_name,t6.address
+        ,case when t7.offline_alarm_count>0 then 2 when t7.alarm_count>0 then 1 else 0 end device_state
+        from sms_scene t1
+        <include refid="deviceInnerJoins"/>
+        left join(
+            select a1.scene_id, a1.device_id
+            ,sum(case when alarm_type='参数报警' then 1 else 0 end) alarm_count
+            ,sum(case when alarm_type='状态报警' then 1 else 0 end) offline_alarm_count
+         from sms_alarm_details a1 where a1.`status` = 1 and a1.state = 1 group by a1.scene_id, a1.device_id
+        )t7 on t7.scene_id=t2.scene_id and t7.device_id=t2.device_id
+        where t1.parent_scene_id = 0 and t1. status = 1 and t1. enable_state = 1 and t3.scene_type_name = '管网' and t5.scene_type_name = #{sceneTypeName}
+        <if test="sceneIds != null and sceneIds.size() > 0">
+            and t1.id  in
+            <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="sceneIds == null or sceneIds.size() == 0">
+            and t1.id is null
+        </if>
+        <if test="deviceId != null and deviceId != ''">
+            and t6.id = #{deviceId}
+        </if>
+        <if test="companyOrgId != null and companyOrgId != ''">
+            and t1.company_org_id = #{companyOrgId}
+        </if>
+        order by field(device_state,1,0,2),t6.last_update_time desc
+    </select>
 </mapper>