Browse Source

添加管网压力排名接口

lihui007 4 years ago
parent
commit
e2baaab7df

+ 43 - 0
sms_water/src/main/java/com/huaxu/controller/RankingController.java

@@ -0,0 +1,43 @@
+package com.huaxu.controller;
+
+import com.huaxu.dto.ranking.RankingDto;
+import com.huaxu.entity.AlarmDetailsEntity;
+import com.huaxu.model.AjaxMessage;
+import com.huaxu.model.ResultStatus;
+import com.huaxu.service.AlarmDetailsService;
+import com.huaxu.service.RankingService;
+import com.huaxu.service.SceneService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @description
+ * @auto lihui
+ * @data 2021-04-01
+ */
+@RestController
+@RequestMapping("/ranking")
+@Api(tags = "排名")
+@Slf4j
+public class RankingController {
+
+    @Autowired
+    private RankingService rankingService;
+
+    @RequestMapping(value="getPipePressure" , method = RequestMethod.GET)
+    @ApiOperation(value = "管网压力排名")
+    public AjaxMessage<List<RankingDto>> getPipePressure(){
+        return new AjaxMessage<List<RankingDto>>(ResultStatus.OK, rankingService.findPipeRanking("压力", 13));
+    }
+
+}

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

@@ -2,6 +2,8 @@ package com.huaxu.dao;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.huaxu.dto.*;
+import com.huaxu.dto.ranking.SceneDeviceDto;
+import com.huaxu.dto.ranking.SceneDeviceQueryDto;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -110,4 +112,10 @@ public interface OnlineMonitorMapper {
      * @return
      */
     List<OnlineDataDto> selectPipeNetList(OnlineDataDto onlineDataDto);
+
+    /**
+     * 查找场景下的所有设备
+     * @return
+     */
+    List<SceneDeviceDto> selectSceneDevice(SceneDeviceQueryDto sceneDeviceQueryDto);
 }

+ 61 - 0
sms_water/src/main/java/com/huaxu/dto/ranking/RankingDto.java

@@ -0,0 +1,61 @@
+package com.huaxu.dto.ranking;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @description
+ * @auto lihui
+ * @data 2021-04-01
+ */
+@ApiModel("排名实体类")
+@Data
+public class RankingDto implements Comparable<RankingDto>{
+
+    private static final long serialVersionUID = -3866939316262264972L;
+
+    @ApiModelProperty(value = "名字",hidden = true)
+    private String name;
+
+    @ApiModelProperty(value = "得分",hidden = true)
+    private Double score;
+
+    @Override
+    public int compareTo(RankingDto o) {
+        return o.getScore().compareTo(this.getScore());
+    }
+
+    public static void main(String[] args) {
+        List<RankingDto> list = new ArrayList<>();
+        RankingDto dto = new RankingDto();
+        dto.setName("排名5");
+        dto.setScore(55.333);
+        list.add(dto);
+        dto = new RankingDto();
+        dto.setName("排名1");
+        dto.setScore(100.333);
+        list.add(dto);
+        dto = new RankingDto();
+        dto.setName("排名3");
+        dto.setScore(91.333);
+        list.add(dto);
+        dto = new RankingDto();
+        dto.setName("排名2");
+        dto.setScore(92.333);
+        list.add(dto);
+        dto = new RankingDto();
+        dto.setName("排名4");
+        dto.setScore(66.333);
+        list.add(dto);
+        Collections.sort(list);
+        for (RankingDto rankingDto : list){
+            System.out.println(rankingDto.getName() +"=1=1=" + rankingDto.getScore());
+        }
+    }
+
+}

+ 33 - 0
sms_water/src/main/java/com/huaxu/dto/ranking/SceneDeviceDto.java

@@ -0,0 +1,33 @@
+package com.huaxu.dto.ranking;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @description
+ * @auto lihui
+ * @data 2021-04-01
+ */
+@ApiModel("场景设备属性实体")
+@Data
+public class SceneDeviceDto {
+
+    private static final long serialVersionUID = -3866939316262264972L;
+
+    @ApiModelProperty(value = "设备ID",hidden = true)
+    private int deviceId;
+
+    @ApiModelProperty(value = "设备CODE",hidden = true)
+    private String deviceCode;
+
+    @ApiModelProperty(value = "设备名字",hidden = true)
+    private String deviceName;
+
+    @ApiModelProperty(value = "设备属性ID",hidden = true)
+    private Long attributeId;
+
+    @ApiModelProperty(value = "设备属性名字",hidden = true)
+    private String attributeName;
+
+}

+ 50 - 0
sms_water/src/main/java/com/huaxu/dto/ranking/SceneDeviceQueryDto.java

@@ -0,0 +1,50 @@
+package com.huaxu.dto.ranking;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.huaxu.common.converter.Double3Serializer;
+import com.huaxu.dto.MonitorDataDto;
+import com.huaxu.model.ProgramItem;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @description
+ * @auto yjy
+ * @data 2020-12-3
+ */
+@ApiModel("在线监测列表数据")
+@Data
+public class SceneDeviceQueryDto {
+
+    private static final long serialVersionUID = -3866939316262264972L;
+
+    @ApiModelProperty(value = "租户标识",hidden = true)
+    private String tenantId;
+
+    @ApiModelProperty(value ="权限",hidden = true)
+    private List<ProgramItem> programItems;
+
+    @ApiModelProperty(value = "用户类型(-9999 超管 -999普通用户 2普通用户)",hidden = true)
+    private String userType;
+
+    @ApiModelProperty(value="用户权限类型",hidden = true)
+    private Integer permissonType;
+
+    @ApiModelProperty(value = "场景ids" ,hidden = true )
+    private List<Long> sceneIds;
+
+    @ApiModelProperty(value =  "一级场景名字")
+    private String firstSceneTypeName;
+
+    @ApiModelProperty(value =  "二级场景名字")
+    private String secondSceneTypeName;
+
+    @ApiModelProperty(value =  "属性类型")
+    private int parmType;
+}

+ 19 - 0
sms_water/src/main/java/com/huaxu/service/RankingService.java

@@ -0,0 +1,19 @@
+package com.huaxu.service;
+
+import com.huaxu.dto.ranking.RankingDto;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public interface RankingService {
+
+    /**
+     * 查询管网下的排名
+     * @param sceneTypeName  场景
+     * @param parmType       属性类型
+     * @return
+     */
+    List<RankingDto> findPipeRanking(String sceneTypeName, int parmType);
+
+}

+ 101 - 0
sms_water/src/main/java/com/huaxu/service/impl/RankingServiceImpl.java

@@ -0,0 +1,101 @@
+package com.huaxu.service.impl;
+
+import com.huaxu.dao.OnlineMonitorMapper;
+import com.huaxu.dto.ranking.RankingDto;
+import com.huaxu.dto.ranking.SceneDeviceDto;
+import com.huaxu.dto.ranking.SceneDeviceQueryDto;
+import com.huaxu.entity.MonitorDataEntity;
+import com.huaxu.entity.MonitorDataValueEntity;
+import com.huaxu.model.LoginUser;
+import com.huaxu.service.RankingService;
+import com.huaxu.service.SceneService;
+import com.huaxu.util.ByteArrayUtils;
+import com.huaxu.util.RedisUtil;
+import com.huaxu.util.UserUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+@Service
+public class RankingServiceImpl implements RankingService {
+
+    private  static final String PIPE_NAME = "管网";
+
+    private static final String SMS_WATER_CACHE_KEY = "sms_water_%s";
+
+    @Resource
+    private OnlineMonitorMapper onlineMonitorMapper;
+
+    @Autowired
+    private SceneService sceneService;
+
+    @Autowired
+    private RedisUtil redisUtil;
+
+
+    @Override
+    public List<RankingDto> findPipeRanking(String secondSceneTypeName, int parmType){
+        List<RankingDto> result = new ArrayList<>();
+        List<SceneDeviceDto> sceneDeviceDtoList = findSceneDevice(PIPE_NAME, secondSceneTypeName, parmType);
+        if (CollectionUtils.isEmpty(sceneDeviceDtoList)){
+            return result;
+        }
+        String cacheKey = null;
+        for (SceneDeviceDto sceneDeviceDto: sceneDeviceDtoList) {
+            if (sceneDeviceDto.getAttributeId() == null) {
+                continue;
+            }
+            cacheKey = String.format(SMS_WATER_CACHE_KEY, sceneDeviceDto.getDeviceCode());
+            byte[] bytes = redisUtil.get(cacheKey.getBytes());
+            if(bytes == null || bytes.length == 0) {
+                continue;
+            }
+            MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
+            List<MonitorDataValueEntity> monitorList = monitorDataEntity.getDataValues();
+            if (CollectionUtils.isEmpty(monitorList)){
+                continue;
+            }
+            for (MonitorDataValueEntity monitorEntity:monitorList ) {
+                if (sceneDeviceDto.getAttributeId().equals(monitorEntity.getAttributeId())){
+                    RankingDto rankingDto = new RankingDto();
+                    rankingDto.setName(monitorEntity.getAttributeName());
+                    rankingDto.setScore(monitorEntity.getDataValue());
+                    result.add(rankingDto);
+                    break;
+                }
+            }
+        }
+        if (result.size() > 1){
+            Collections.sort(result);
+        }
+        return result;
+    }
+
+    /**
+     * 查找场景下的所有设备
+     * @param firstSceneTypeName   一级场景名字
+     * @param secondSceneTypeName  二级场景名字
+     * @param parmType             属性类型
+     * @return
+     */
+    private List<SceneDeviceDto> findSceneDevice(String firstSceneTypeName, String secondSceneTypeName, int parmType) {
+        SceneDeviceQueryDto sceneDeviceQueryDto  = new SceneDeviceQueryDto();
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        sceneDeviceQueryDto.setTenantId(loginUser.getTenantId());
+        sceneDeviceQueryDto.setProgramItems(loginUser.getProgramItemList());
+        sceneDeviceQueryDto.setUserType(loginUser.getType());
+        sceneDeviceQueryDto.setSceneIds(sceneService.findByParentIdsLike(null));
+        sceneDeviceQueryDto.setFirstSceneTypeName(firstSceneTypeName);
+        sceneDeviceQueryDto.setSecondSceneTypeName(secondSceneTypeName);
+        sceneDeviceQueryDto.setParmType(parmType);
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        sceneDeviceQueryDto.setPermissonType(loginUser.getPermissonType());
+        return onlineMonitorMapper.selectSceneDevice(sceneDeviceQueryDto);
+    }
+
+}

+ 25 - 0
sms_water/src/main/resources/mapper/OnlineMonitorMapper.xml

@@ -803,4 +803,29 @@
         </if>
         order by field(device_state,1,0,2),t6.last_update_time desc
     </select>
+    <!--查找场景下的设备-->
+    <select id="selectSceneDevice" resultType="com.huaxu.dto.ranking.SceneDeviceDto">
+        select  t6.id deviceId,
+                t6.device_code deviceCode,
+                t6.device_name deviceName,
+                t8.attribute_id attributeId,
+                ifnull(t8.remark, t9.`name`) attribute_name
+        from sms_scene t1
+        <include refid="deviceInnerJoins"/>
+        left join sms_device_parm t8 on t8.scene_id = t2.scene_id and t8.device_id=t2.device_id and t8. status = 1 and t8.PARM_TYPE = #{parmType}
+        left join sms_device_attribute t9 on t8.attribute_id=t9.id and t9.status = 1
+        where t1.parent_scene_id = 0 and t1. status = 1 and t1. enable_state = 1
+        and t3.scene_type_name = #{firstSceneTypeName}
+        and t5.scene_type_name = #{secondSceneTypeName}
+        <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>
+        order by t4.scene_name,t8.seq
+    </select>
 </mapper>