Browse Source

APP接口

wangyangyang 4 years ago
parent
commit
fd450020b9

+ 177 - 5
sms_water/src/main/java/com/huaxu/controller/AppDataController.java

@@ -1,19 +1,28 @@
 package com.huaxu.controller;
 
+import com.huaxu.common.StringUtils;
+import com.huaxu.dto.AlarmDetailsDto;
 import com.huaxu.dto.AppSmsDataDto;
+import com.huaxu.dto.SceneDataDto;
+import com.huaxu.dto.SceneDataForAppDto;
+import com.huaxu.entity.*;
 import com.huaxu.model.AjaxMessage;
 import com.huaxu.model.ResultStatus;
-import com.huaxu.service.MonitorDataReportService;
+import com.huaxu.service.*;
+import com.huaxu.util.ByteArrayUtils;
+import com.huaxu.util.RedisUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
-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 org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/appData")
@@ -21,6 +30,18 @@ import java.math.BigDecimal;
 public class AppDataController {
     @Autowired
     private MonitorDataReportService monitorDataReportService;
+    @Autowired
+    private SceneService sceneService;
+    @Autowired
+    private MonitorInfoService monitorInfoService;
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private AlarmDetailsService alarmDetailsService;
+    @Autowired
+    private DeviceAttributeSpecsService deviceAttributeSpecsService;
+    @Autowired
+    private DeviceParmService deviceParmService;
 
     @RequestMapping(value = "getProductionDataForSameMonth", method = RequestMethod.GET)
     @ApiOperation(value = "综合调度——本月供水情况")
@@ -52,4 +73,155 @@ public class AppDataController {
         }
         return new AjaxMessage<>(ResultStatus.OK, appSmsDataDto);
     }
+
+    @RequestMapping(value = "/findByParentId", method = RequestMethod.GET)
+    @ResponseBody
+    @ApiOperation(value = "综合调度——工艺场景")
+    public AjaxMessage<List<SceneEntity>> findByParentId(@ApiParam(value = "父级场景ID", required = false) @RequestParam(required = false) Long id) {
+        List<SceneEntity> sceneEntities = sceneService.findByParentIdForAPP(id);
+        return new AjaxMessage<>(ResultStatus.OK, sceneEntities);
+    }
+
+    /**
+     * 今日统计量
+     * @param typeName
+     * @param id
+     * @return
+     */
+    private   List<SceneDataDto> getTotalAmount(@ApiParam(value = "类型名称(水源、水厂、泵站、售水)") @RequestParam(required = true) String typeName,
+                                              @ApiParam(value = "场景ID", required = true) @RequestParam Long id) {
+        List<SceneDataDto> sceneDataDtos = new ArrayList<>();
+        switch (typeName) {
+            case "水源":
+                SceneDataDto item1 = new SceneDataDto();
+                item1.setMonitorName("今日取水量");
+                item1.setMonitorValue(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 4, 1).doubleValue() + "m³");
+                sceneDataDtos.add(item1);
+                SceneDataDto item2 = new SceneDataDto();
+                item2.setMonitorName("今日耗电量");
+                item2.setMonitorValue(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 5, 1).doubleValue() + "kw");
+                sceneDataDtos.add(item2);
+                break;
+            case "水厂":
+                SceneDataDto item5 = new SceneDataDto();
+                item5.setMonitorName("今日进水量");
+                item5.setMonitorValue(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 4, 1).doubleValue() + "m³");
+                sceneDataDtos.add(item5);
+                SceneDataDto item3 = new SceneDataDto();
+                item3.setMonitorName("今日制水量");
+                item3.setMonitorValue(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 3, 1).doubleValue() + "m³");
+                sceneDataDtos.add(item3);
+                SceneDataDto item4 = new SceneDataDto();
+                item4.setMonitorName("今日耗电量");
+                item4.setMonitorValue(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 5, 1).doubleValue() + "kw");
+                sceneDataDtos.add(item4);
+                SceneDataDto item6 = new SceneDataDto();
+                item6.setMonitorName("今日耗药量");
+                item6.setMonitorValue(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 6, 1).doubleValue() + "kg");
+                sceneDataDtos.add(item6);
+                break;
+            case "泵站":
+                SceneDataDto item7 = new SceneDataDto();
+                item7.setMonitorName("今日进水量");
+                item7.setMonitorValue(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 4, 1).doubleValue() + "m³");
+                sceneDataDtos.add(item7);
+                SceneDataDto item8 = new SceneDataDto();
+                item8.setMonitorName("今日供水量");
+                item8.setMonitorValue(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 3, 1).doubleValue() + "m³");
+                sceneDataDtos.add(item8);
+                SceneDataDto item9 = new SceneDataDto();
+                item9.setMonitorName("今日耗电量");
+                item9.setMonitorValue(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 5, 1).doubleValue() + "kw");
+                sceneDataDtos.add(item9);
+                break;
+        }
+        return sceneDataDtos;
+    }
+
+    @ApiOperation(value = "综合调度——工艺场景(详情)")
+    @RequestMapping(value = "/findBySceneId", method = RequestMethod.GET)
+    @ResponseBody
+    public AjaxMessage<SceneDataForAppDto> findBySceneId(
+            @ApiParam(value = "类型名称(水源、水厂、泵站、售水)") @RequestParam(required = true) String typeName,
+            @ApiParam(value = "场景ID", required = true) @RequestParam Long id) {
+        SceneDataForAppDto returnInfo = new SceneDataForAppDto();
+        SceneEntity sceneEntity = sceneService.findSceneByIdForApp(id);
+        if (sceneEntity != null) {
+            returnInfo.setAddress(sceneEntity.getAddress());
+            returnInfo.setSceneName(sceneEntity.getSceneName());
+            returnInfo.setImagePath(sceneEntity.getSceneImages().size() > 0 ? sceneEntity.getSceneImages().get(0).getImagePath() : null);
+            if (sceneEntity.getParentSceneId().equals("0")) {
+                List<SceneDataDto> sceneDataDtos = getTotalAmount(typeName, id);
+                returnInfo.getInfos().addAll(sceneDataDtos);
+            }
+        } else {
+            return null;
+        }
+        List<SceneDataDto> sceneDataDtos = new ArrayList<>();
+        List<String> deviceCodes = new ArrayList<>();
+        //查询到所有的测点信息
+        List<DeviceParmEntity> deviceParmEntities = deviceParmService.selectByScendId(id.intValue());
+        Map<String, List<AlarmDetailsDto>> alarms = new HashMap<>();
+        Map<String, List<DeviceParmEntity>> parmMap = new HashMap<>();
+        for (DeviceParmEntity deviceParmEntity : deviceParmEntities) {
+            if (!deviceCodes.contains(deviceParmEntity.getDeviceCode())) {
+                deviceCodes.add(deviceParmEntity.getDeviceCode());
+                //查询报警信息
+                List<AlarmDetailsDto> alarmDetailsDtos = alarmDetailsService.selectByDeviceId(deviceParmEntity.getDeviceId());
+                alarms.put(deviceParmEntity.getDeviceCode(), alarmDetailsDtos);
+                List<DeviceParmEntity> deviceParms = new ArrayList<>();
+                deviceParms.add(deviceParmEntity);
+                parmMap.put(deviceParmEntity.getDeviceCode(), deviceParms);
+            } else {
+                parmMap.get(deviceParmEntity.getDeviceId()).add(deviceParmEntity);
+            }
+        }
+        for (String deveiceCode : deviceCodes) {
+            byte[] bytes = redisUtil.get(("sms_water_" + deveiceCode).getBytes());
+            //将报警信息放置map中
+            Map<Integer, AlarmDetailsDto> mapAlarm = new HashMap<>();
+            List<AlarmDetailsDto> alarmDetailsDtos = alarms.get(deveiceCode);
+            mapAlarm = alarmDetailsDtos.stream().collect(Collectors.toMap(AlarmDetailsDto::getAttributeId, a -> a, (k1, k2) -> k1));
+            //将缓存中的实时数据放到map中方便进行遍历
+            if (bytes != null && bytes.length > 0) {
+                MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
+                Map<Long, MonitorDataValueEntity> map = new HashMap<>();
+                returnInfo.setCollectDate(monitorDataEntity.getCollectDate());
+                //将缓存中的实时数据放到map中方便进行遍历
+                map = monitorDataEntity.getDataValues().stream().collect(Collectors.toMap(MonitorDataValueEntity::getAttributeId, a -> a, (k1, k2) -> k1));
+                for (DeviceParmEntity item : parmMap.get(deveiceCode)) {
+                    SceneDataDto sceneDataDto = new SceneDataDto();
+                    sceneDataDto.setMonitorName(item.getAttributeName());
+                    //按属性ID查询标签值
+                    DeviceAttributeSpecsEntity deviceAttributeSpecsEntity = new DeviceAttributeSpecsEntity();
+                    deviceAttributeSpecsEntity.setAttributeId(Long.valueOf(item.getAttributeId()));
+                    List<DeviceAttributeSpecsEntity> deviceAttributeSpecsEntities = deviceAttributeSpecsService.findList(deviceAttributeSpecsEntity);
+                    if (map.containsKey(item.getAttributeId())) {
+                        Double value = map.get(item.getAttributeId()).getDataValue();
+                        if (deviceAttributeSpecsEntities.size() > 0) {
+                            if (value != null) {
+                                for (DeviceAttributeSpecsEntity specsEntity : deviceAttributeSpecsEntities)
+                                    if (Integer.valueOf(specsEntity.getSpecsValue()) == value.intValue()) {
+                                        sceneDataDto.setMonitorValue(specsEntity.getSpecsName());
+                                    }
+                            }
+                        } else {
+                            if (value != null) {
+                                sceneDataDto.setMonitorValue(String.format("%.3f", map.get(item.getAttributeId()).getDataValue()) + (StringUtils.isNotEmpty(map.get(item.getAttributeId()).getUnit()) ? map.get(item.getAttributeId()).getUnit() : ""));
+                            }
+                        }
+                    }
+                    //判断是否报警
+                    if (mapAlarm.containsKey(item.getAttributeId().intValue()))
+                        sceneDataDto.setIsAlarm(1);
+                    else
+                        sceneDataDto.setIsAlarm(0);
+                    sceneDataDtos.add(sceneDataDto);
+                }
+            }
+        }
+        returnInfo.setInfos(sceneDataDtos);
+        return new AjaxMessage<>(ResultStatus.OK, returnInfo);
+    }
+
 }

+ 2 - 0
sms_water/src/main/java/com/huaxu/dao/DeviceParmMapper.java

@@ -85,4 +85,6 @@ public interface DeviceParmMapper  {
     List<ParmTypeCountDto> findAlarmTotalCount(@Param("info") DeviceParmEntity deviceParmEntity);
 
     List<ParmTypeCountDto> findAlarmCountTotalCount(@Param("info") DeviceParmEntity deviceParmEntity);
+
+    List<DeviceParmEntity> selectBySceneId(@Param("sceneId")Integer sceneId);
 }

+ 23 - 0
sms_water/src/main/java/com/huaxu/dto/SceneDataDto.java

@@ -0,0 +1,23 @@
+package com.huaxu.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "场景信息标签")
+public class SceneDataDto {
+    /** 标签名称 */
+    @ApiModelProperty(value = "标签名称(名称或场景ID)")
+    private String monitorName;
+    /** 标签值 */
+    @ApiModelProperty(value = "标签值(注:标签的实时数据不用保存)")
+    @TableField(exist = false)
+    private String monitorValue;
+
+    /** 是否报警 */
+    @ApiModelProperty(value = "是否报警(0不报警1报警)")
+    @TableField(exist = false)
+    private Integer isAlarm;
+}

+ 32 - 0
sms_water/src/main/java/com/huaxu/dto/SceneDataForAppDto.java

@@ -0,0 +1,32 @@
+package com.huaxu.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class SceneDataForAppDto {
+    /** 场景名称 */
+    @ApiModelProperty(value = "场景名称")
+    private String sceneName;
+    /** 地址 */
+    @ApiModelProperty(value = "地址")
+    private String address;
+
+    /** 图片路径 */
+    @ApiModelProperty(value = "图片路径")
+    private String imagePath;
+
+    /** 采集时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
+    @NotNull(message = "参数值不能为空")
+    @ApiModelProperty(value = "采集时间")
+    private Date collectDate;
+
+    @ApiModelProperty(value = "标记信息")
+    private List<SceneDataDto> infos;
+}

+ 6 - 0
sms_water/src/main/java/com/huaxu/service/DeviceParmService.java

@@ -27,6 +27,12 @@ public interface DeviceParmService {
      * @return
      */
     List<DeviceParmEntity> selectByDeviceId(Integer sceneId,Integer id);
+
+    /**
+     * 按场景查询设备参数
+     * @return
+     */
+    List<DeviceParmEntity> selectByScendId(Integer sceneId);
     /**
      * 查询单个设备参数信息针对工艺图
      * @return

+ 34 - 0
sms_water/src/main/java/com/huaxu/service/SceneService.java

@@ -337,6 +337,18 @@ public class SceneService extends ServiceImpl<SceneMapper, SceneEntity> {
         sceneEntity.setSceneImages(sceneImageEntities);
         return sceneEntity;
     }
+    /**
+     * 根居ID获取对象
+     */
+    public SceneEntity findSceneByIdForApp(Long id) {
+        SceneEntity sceneEntity = sceneMapper.findSceneById(id);
+        SceneImageEntity sceneImageEntity = new SceneImageEntity();
+        sceneImageEntity.setSceneId(id);
+        sceneImageEntity.setImageType(3l);
+        List<SceneImageEntity> sceneImageEntities = sceneImageService.findList(sceneImageEntity);
+        sceneEntity.setSceneImages(sceneImageEntities);
+        return sceneEntity;
+    }
 
     public List<SceneEntity> findBySceneTypeIds(Long[] Ids) {
         return sceneMapper.findBySceneTypeIds(Ids);
@@ -378,6 +390,28 @@ public class SceneService extends ServiceImpl<SceneMapper, SceneEntity> {
         List<SceneEntity> sceneTree = getSceneTree(sceneEntities, Long.valueOf(0), 1);
         return sceneTree;
     }
+    public List<SceneEntity> findByParentIdForAPP(Long id) {
+        SceneEntity sceneEntity = new SceneEntity();
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        sceneEntity.setTenantId(currentUser.getTenantId());
+        sceneEntity.setProgramItems(currentUser.getProgramItemList());
+        sceneEntity.setUserType(currentUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        sceneEntity.setPermissonType(currentUser.getPermissonType());
+        if (id != null)
+            sceneEntity.setParentSceneIds("%," + id + ",%");
+        List<SceneEntity> sceneEntities = sceneMapper.findByParentId(sceneEntity);
+        for (SceneEntity item : sceneEntities) {
+            SceneImageEntity sceneImageEntity = new SceneImageEntity();
+            sceneImageEntity.setSceneId(item.getId());
+            sceneImageEntity.setImageType(3L);
+            List<SceneImageEntity> sceneImageEntities = sceneImageService.findList(sceneImageEntity);
+            item.setSceneImages(sceneImageEntities);
+        }
+
+        List<SceneEntity> sceneTree = getSceneTree(sceneEntities, Long.valueOf(0), 1);
+        return sceneTree;
+    }
 
     /**
      * 根据场景id查询一级场景信息

+ 6 - 0
sms_water/src/main/java/com/huaxu/service/impl/DeviceParmServiceImpl.java

@@ -53,6 +53,12 @@ public class DeviceParmServiceImpl  implements DeviceParmService {
         return deviceParmEntities;
     }
 
+    @Override
+    public List<DeviceParmEntity> selectByScendId(Integer sceneId) {
+        List<DeviceParmEntity> deviceParmEntities = deviceParmMapper.selectBySceneId(sceneId);
+        return deviceParmEntities;
+    }
+
     @Override
     public List<DeviceParmEntity> selectByDeviceIdForGis(Integer sceneId, Integer id) {
         List<DeviceParmEntity> deviceParmEntities = deviceParmMapper.selectByDeviceIdForGis(sceneId, id);

+ 28 - 0
sms_water/src/main/resources/mapper/DeviceParmMapper.xml

@@ -57,6 +57,34 @@
         inner join sms_device_attribute b on p.ATTRIBUTE_ID=b.id and b.`STATUS`=1
         where a.id=#{id}
     </select>
+    <select id="selectBySceneId" resultType="com.huaxu.entity.DeviceParmEntity">
+        select       p.ID as "id"
+                    ,p.TENANT_ID as "tenantId"
+                    ,p.parent_scene_id as "parentSceneId"
+                    ,p.scene_id as "sceneId"
+                    ,p.DEVICE_ID as "deviceId"
+                    ,b.id  as "attributeId"
+                    ,p.IS_SUSPENSION as "isSuspension"
+                    ,p.IS_REPORT as "isReport"
+                    ,p.IS_CHART as "isChart"
+                    ,p.IS_MAP as "isMap"
+                    ,p.IS_ALARM as "isAlarm"
+                    ,p.IS_ARTWORK as "isArtwork"
+                    ,p.SEQ as "seq"
+                    ,p.REMARK as "remark"
+                    ,p.STATUS as "status"
+                    ,p.DATE_CREATE as "dateCreate"
+                    ,p.CREATE_BY as "createBy"
+                    ,p.DATE_UPDATE as "dateUpdate"
+                    ,p.UPDATE_BY as "updateBy"
+                    ,b.`NAME` as "attributeName"
+                    ,p.PARM_TYPE as "parmType"
+                    ,a.DEVICE_MODE as "deviceCode"
+        from sms_device_parm p
+        inner join sms_device_attribute b on p.ATTRIBUTE_ID=b.id and b.`STATUS`=1
+        inner join sms_device  a on a.id=p.DEVICE_ID
+        where p.IS_ARTWORK=1 and p.scene_id = #{sceneId} and p.`STATUS`=1
+    </select>
     <select id="selectByDeviceIdForGis" resultType="com.huaxu.entity.DeviceParmEntity">
         select      p.ID as "id"
                     ,p.TENANT_ID as "tenantId"