Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

hym 4 tahun lalu
induk
melakukan
5da774e707

+ 9 - 2
sms_water/src/main/java/com/huaxu/controller/AlarmSettingController.java

@@ -6,6 +6,7 @@ import com.huaxu.common.StringUtils;
 import com.huaxu.dto.AlarmSettingDto;
 import com.huaxu.entity.AlarmSetting;
 import com.huaxu.entity.GisSetting;
+import com.huaxu.entity.SceneEntity;
 import com.huaxu.model.AjaxMessage;
 import com.huaxu.model.LoginUser;
 import com.huaxu.model.Pagination;
@@ -80,13 +81,19 @@ public class AlarmSettingController {
     @ApiOperation(value = "批量增加报警配置信息",notes = "alarmType 为参数报警或状态报警")
     public AjaxMessage<Boolean> insertBatch(@ApiParam(value = "报警配置列表", required = true) @RequestBody List<AlarmSetting> listAlarmSetting) {
         LoginUser currentUser = UserUtil.getCurrentUser();
+        SceneEntity sceneEntity=new  SceneEntity();
+        if(listAlarmSetting.size()>0){
+             sceneEntity=sceneService.findParentSceneById(listAlarmSetting.get(0).getSceneId());
+        }
         for (AlarmSetting alarm:listAlarmSetting) {
-            if(!(alarm.getAlarmType().equals("参数报警")||alarm.getAlarmType().equals("状态报警"))||alarm.getDeviceId()==null||
+            if(!(alarm.getAlarmType().equals("参数报警")||alarm.getAlarmType().equals("状态报警"))||alarm.getDeviceId()==null||alarm.getSceneId()==null||
                     (alarm.getAlarmType().equals("参数报警")&&(alarm.getAttributeId()==null|| StringUtils.isEmpty(alarm.getAlarmCondition())||alarm.getAlarmValue()==null))||
                     (alarm.getAlarmType().equals("状态报警")&&(StringUtils.isEmpty(alarm.getAlarmCondition())||alarm.getAlarmValue()==null))){
                 return new AjaxMessage<>(ResultStatus.PARAM_ERROR);
             }
-
+            alarm.setSceneName(sceneEntity.getSceneName());
+            alarm.setParentSceneId(sceneEntity.getParentSceneId());
+            alarm.setParentSceneName(sceneEntity.getParentSceneName());
             alarm.setCreateBy(currentUser.getUsername());
             alarm.setTenantId(currentUser.getTenantId());
             alarm.setStatus(1);

+ 40 - 24
sms_water/src/main/java/com/huaxu/controller/DeviceController.java

@@ -71,18 +71,18 @@ public class DeviceController {
             orderItem.setColumn("d.date_create");
             iPage.orders().add(orderItem);
         }
-        if(sceneId != null && sceneId != 0) {
-            if(searchType != null && searchType ==1){
-                List<Long> list = new ArrayList<>();
-                list.add(sceneId);
-                deviceDto.setSceneIds(list);
-            }else{
-                deviceDto.setSceneIds(sceneService.findByParentIdsLike(sceneId.longValue()));
-            }
-            if(deviceDto.getSceneIds() == null || deviceDto.getSceneIds().size() == 0){
-                return new AjaxMessage<>(ResultStatus.OK, new Pagination<>(iPage));
-            }
-        }
+//        if(sceneId != null && sceneId != 0) {
+//            if(searchType != null && searchType ==1){
+//                List<Long> list = new ArrayList<>();
+//                list.add(sceneId);
+//                deviceDto.setSceneIds(list);
+//            }else{
+//                deviceDto.setSceneIds(sceneService.findByParentIdsLike(sceneId.longValue()));
+//            }
+//            if(deviceDto.getSceneIds() == null || deviceDto.getSceneIds().size() == 0){
+//                return new AjaxMessage<>(ResultStatus.OK, new Pagination<>(iPage));
+//            }
+//        }
         iPage = deviceService.selectPage(iPage,deviceDto);
 
         Pagination<DeviceDto> pages = new Pagination<>(iPage);
@@ -108,20 +108,36 @@ public class DeviceController {
         deviceDto.setCompanyOrgId(companyOrgId);
         deviceDto.setDeptOrgId(deptOrgId);
         deviceDto.setEnableState(enableState);
-        if(sceneId != null && sceneId != 0) {
-            if(searchType != null && searchType ==1){
-                List<Long> list = new ArrayList<>();
-                list.add(sceneId);
-                deviceDto.setSceneIds(list);
-            }else{
-                deviceDto.setSceneIds(sceneService.findByParentIdsLike(sceneId.longValue()));
-            }
-            if(deviceDto.getSceneIds() == null || deviceDto.getSceneIds().size() == 0){
-                return new AjaxMessage<>(ResultStatus.OK, new ArrayList<>());
-            }
-        }
+//        if(sceneId != null && sceneId != 0) {
+//            if(searchType != null && searchType ==1){
+//                List<Long> list = new ArrayList<>();
+//                list.add(sceneId);
+//                deviceDto.setSceneIds(list);
+//            }else{
+//                deviceDto.setSceneIds(sceneService.findByParentIdsLike(sceneId.longValue()));
+//            }
+//            if(deviceDto.getSceneIds() == null || deviceDto.getSceneIds().size() == 0){
+//                return new AjaxMessage<>(ResultStatus.OK, new ArrayList<>());
+//            }
+//        }
         return new AjaxMessage<>(ResultStatus.OK, deviceService.selectList(deviceDto));
     }
+    @RequestMapping(value="selectListByScene" , method = RequestMethod.GET)
+    @ApiOperation(value = "按场景查询设备信息(场景绑定设备信息)")
+    public AjaxMessage<List<DeviceDto>> selectListByScene(
+            @ApiParam(value = "设备编号/名称") @RequestParam(required = false)  String condition,
+            @ApiParam(value = "所属公司") @RequestParam(required = false)  Integer companyOrgId,
+            @ApiParam(value = "所属部门") @RequestParam(required = false)  Integer deptOrgId,
+            @ApiParam(value = "所属场景id",required = true) @RequestParam(required = true)  Long sceneId
+    ){
+        DeviceDto deviceDto = new DeviceDto();
+        deviceDto.setCondition(condition);
+        deviceDto.setCompanyOrgId(companyOrgId);
+        deviceDto.setDeptOrgId(deptOrgId);
+        deviceDto.setEnableState(1);
+        deviceDto.setSceneId(sceneId.intValue());
+        return new AjaxMessage<>(ResultStatus.OK, deviceService.selectListByScene(deviceDto));
+    }
 
     @RequestMapping(value="add" , method = RequestMethod.POST)
     @ApiOperation(value = "新增设备信息")

+ 22 - 8
sms_water/src/main/java/com/huaxu/controller/MonitorInfoController.java

@@ -1,5 +1,6 @@
 package com.huaxu.controller;
 
+import com.huaxu.common.StringUtils;
 import com.huaxu.dto.*;
 import com.huaxu.entity.*;
 import com.huaxu.model.AjaxMessage;
@@ -77,34 +78,47 @@ public class MonitorInfoController {
                 //将缓存中的实时数据放到map中方便进行遍历
                 for (MonitorDataValueEntity dateValue : monitorDataEntity.getDataValues()) {
                     map.put(dateValue.getAttributeId(), dateValue);
+                    System.out.println("dateValue.getAttributeId()" + dateValue.getAttributeId() + " " + dateValue);
                 }
                 for (SceneDeviceAttributeDto itemAttribute : sceneDeviceAttributeDtos) {
+                    System.out.println("itemAttribute.getAttributeId()" + itemAttribute.getAttributeId());
                     Double attributeDiffValue = 0d;
-                    if(!map.containsKey(itemAttribute.getAttributeId()))
+                    if(!map.containsKey(itemAttribute.getAttributeId())) {
+                        System.out.println("map.containsKey(itemAttribute.getAttributeId()" + map.containsKey(itemAttribute.getAttributeId()));
                         continue;
+                    }
                     if (map.get(itemAttribute.getAttributeId()).getDataValue() != null && itemAttribute.getLatestValue() != null) {
                         attributeDiffValue = map.get(itemAttribute.getAttributeId()).getDataValue() - itemAttribute.getLatestValue();
                     } else if (map.get(itemAttribute.getAttributeId()).getDataValue() != null && itemAttribute.getLatestValue() == null) {
-                        attributeDiffValue = map.get(itemAttribute.getAttributeId()).getDataValue();
+                        attributeDiffValue =  map.get(itemAttribute.getAttributeId()).getDataValue();
                     }
+
                     switch (itemAttribute.getAttributeType()) {
                         case "3":
-                            sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage() != null ? sceneUsageDto.getYieldWaterUsage() + attributeDiffValue : attributeDiffValue);
+                            sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage() != null ? (double) Math.round((sceneUsageDto.getYieldWaterUsage() + attributeDiffValue)*1000)/1000 : (double) Math.round((attributeDiffValue)*1000)/1000 );
                             break;
                         case "4":
-                            sceneUsageDto.setIntakeWaterUsage(sceneUsageDto.getIntakeWaterUsage() != null ? sceneUsageDto.getIntakeWaterUsage() + attributeDiffValue : attributeDiffValue);
+                            sceneUsageDto.setIntakeWaterUsage(sceneUsageDto.getIntakeWaterUsage() != null ? (double) Math.round((sceneUsageDto.getIntakeWaterUsage() + attributeDiffValue )*1000)/1000 : (double) Math.round((attributeDiffValue)*1000)/1000 );
                             break;
                         case "5":
-                            sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage() != null ? sceneUsageDto.getPowerUsage() + attributeDiffValue : attributeDiffValue);
+                            sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage() != null ? (double) Math.round((sceneUsageDto.getPowerUsage() + attributeDiffValue)*1000)/1000  : (double) Math.round((attributeDiffValue)*1000)/1000 );
                             break;
                         case "6":
-                            sceneUsageDto.setDrugUsage(sceneUsageDto.getDrugUsage() != null ? sceneUsageDto.getDrugUsage() + attributeDiffValue : attributeDiffValue);
+                            sceneUsageDto.setDrugUsage(sceneUsageDto.getDrugUsage() != null ? (double) Math.round((sceneUsageDto.getDrugUsage() + attributeDiffValue)*1000)/1000  : (double) Math.round((attributeDiffValue)*1000)/1000 );
                             break;
                     }
                 }
+                if(sceneUsageDto.getYieldWaterUsage()==null)
+                    sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage());
+                if(sceneUsageDto.getIntakeWaterUsage()==null)
+                    sceneUsageDto.setIntakeWaterUsage(sceneUsageDto.getIntakeWaterUsage());
+                if(sceneUsageDto.getPowerUsage()==null)
+                    sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage());
+                if(sceneUsageDto.getDrugUsage()==null)
+                    sceneUsageDto.setDrugUsage(sceneUsageDto.getDrugUsage());
             }
         }
-        return new AjaxMessage<>(ResultStatus.OK);
+        return new AjaxMessage<>(ResultStatus.OK,sceneUsageDto);
     }
 
 
@@ -145,7 +159,7 @@ public class MonitorInfoController {
                     //判断如果是标签则进行map中取值
                     if (item.getMonitorType().equals(0L))//标签
                     {
-                        item.setMonitorValue(map.get(item.getAttributeId()).getDataValue() + map.get(item.getAttributeId()).getUnit());
+                        item.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()))
                             item.setIsAlarm(1);

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

@@ -64,4 +64,6 @@ public interface DeviceMapper {
      * @return
      */
     IPage<DeviceDto> selectPage(IPage<DeviceDto> page, DeviceDto deviceDto);
+
+    List<DeviceDto> selectListByScene( @Param("deviceDto") DeviceDto deviceDto);
 }

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

@@ -39,5 +39,7 @@ public interface SceneMapper extends BaseMapper<SceneEntity> {
 
     List<SceneEntity> findByParentId(@Param(value = "scene")SceneEntity sceneEntity);
 
+    SceneEntity findParentSceneById(@Param(value = "id")Long id);
+
     /**删除相关方法  使用mybatis-plus集成的 **/
 }

+ 0 - 10
sms_water/src/main/java/com/huaxu/dto/AlarmSettingDto.java

@@ -32,21 +32,11 @@ public class AlarmSettingDto extends AlarmSetting {
      */
     @ApiModelProperty(value = "所属部门名称")
     private String deptOrgName;
-    /**
-     * 场景id
-     */
-    @ApiModelProperty(value = "场景id")
-    private Long sceneId;
     /**
      * 场景id
      */
     @ApiModelProperty(value = "场景id及所有下级id")
     private List<Long> sceneIds;
-    /**
-     * 场景名称
-     */
-    @ApiModelProperty(value = "场景名称")
-    private String sceneName;
     /**
      * 设备类型
      */

+ 3 - 0
sms_water/src/main/java/com/huaxu/dto/DeviceDto.java

@@ -55,6 +55,9 @@ public class DeviceDto extends DeviceEntity {
     @JsonIgnore
     private String userType;
 
+    @ApiModelProperty(value = "是否已经勾选")
+    private Integer isCheck;
+
 }
 
 

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

@@ -33,7 +33,7 @@ public class SceneDeviceAttributeDto {
      * 设备属性ID
      */
     @ApiModelProperty("设备属性ID")
-    private String attributeId;
+    private Long attributeId;
 
     @ApiModelProperty(value = "属性类型标记",hidden = true)
     @JsonIgnore

+ 20 - 0
sms_water/src/main/java/com/huaxu/entity/AlarmSetting.java

@@ -34,6 +34,26 @@ public class AlarmSetting implements Serializable {
      */
     @ApiModelProperty(value = "租户标识")
     private String tenantId;
+    /**
+     * 一级场景id
+     */
+    @ApiModelProperty(value = "一级场景")
+    private Long parentSceneId;
+    /**
+     * 一级场景名称
+     */
+    @ApiModelProperty(value = "一级场景名称")
+    private String parentSceneName;
+    /**
+     * 场景id
+     */
+    @ApiModelProperty(value = "场景id")
+    private Long sceneId;
+    /**
+     * 场景名称
+     */
+    @ApiModelProperty(value = "场景名称")
+    private String sceneName;
     /**
      * 设备编号
      */

+ 4 - 0
sms_water/src/main/java/com/huaxu/entity/SceneEntity.java

@@ -144,4 +144,8 @@ public class SceneEntity implements Serializable {
     @ApiModelProperty(value = "场景图片", position = 100)
     @TableField(exist = false)
     private List<SceneImageEntity> sceneImages;
+
+    /** 一级场景名称 */
+    @ApiModelProperty(value = "一级场景名称",hidden = true)
+    private String parentSceneName;
 }

+ 2 - 0
sms_water/src/main/java/com/huaxu/service/DeviceService.java

@@ -49,4 +49,6 @@ public interface DeviceService {
     IPage<DeviceDto> selectPage(IPage<DeviceDto> page, DeviceDto deviceDto);
 
     List<DeviceDto> selectList(DeviceDto deviceDto);
+
+    List<DeviceDto> selectListByScene(DeviceDto deviceDto);
 }

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

@@ -357,4 +357,11 @@ public class SceneService extends ServiceImpl<SceneMapper, SceneEntity> {
         List<SceneEntity> sceneTree = getSceneTree(sceneEntities, Long.valueOf(0), 1);
         return sceneTree;
     }
+
+    /**
+     * 根据场景id查询一级场景信息
+     */
+    public SceneEntity findParentSceneById(Long id) {
+        return sceneMapper.findParentSceneById(id);
+    }
 }

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

@@ -100,4 +100,15 @@ public class DeviceServiceImpl implements DeviceService {
         deviceDto.setPermissonType(loginUser.getPermissonType());
         return deviceMapper.selectList(deviceDto);
     }
+
+    @Override
+    public List<DeviceDto> selectListByScene(DeviceDto deviceDto) {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        deviceDto.setTenantId(loginUser.getTenantId());
+        deviceDto.setProgramItems(loginUser.getProgramItemList());
+        deviceDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        deviceDto.setPermissonType(loginUser.getPermissonType());
+        return deviceMapper.selectListByScene(deviceDto);
+    }
 }

+ 92 - 84
sms_water/src/main/java/com/huaxu/service/impl/OnlineMonitorImpl.java

@@ -20,6 +20,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -188,6 +189,7 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
                 byte[] bytes = redisUtil.get(("sms_water_"+monData.getDeviceCode()).getBytes());
                 if(bytes != null && bytes.length>0){
                     MonitorDataEntity monitorDataEntity= (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
+                    SimpleDateFormat formatdate = new SimpleDateFormat("YYYY-MM-dd");//日期算换格式
                     monDataCol.setCollectDate(monitorDataEntity.getCollectDate());
                     //筛选该设备相同属性的值
                     List<MonitorDataValueEntity>  attributeEntities=monitorDataEntity.getDataValues().stream().filter((MonitorDataValueEntity m)
@@ -214,30 +216,32 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
                         byte[] bytes = redisUtil.get(("sms_water_"+monitorData.getDeviceCode()).getBytes());
                         if(bytes != null && bytes.length>0) {
                             MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
-                            //筛选该设备相同属性的值
-                            List<MonitorDataValueEntity> attributeEntities = monitorDataEntity.getDataValues().stream().filter((MonitorDataValueEntity m)
-                                    -> m.getAttributeId().equals(monitorData.getAttributeId())).collect(Collectors.toList());
-                            MonitorDataValueEntity  attributeEntity=attributeEntities.size()>0?attributeEntities.get(0):null;
-                            if (attributeEntity != null) {
-                                Double attributeValue =0d;
-                                if(attributeEntity.getDataValue() != null && monitorData.getLatestValue() != null){
-                                    attributeValue=attributeEntity.getDataValue() - monitorData.getLatestValue();
-                                }else if(attributeEntity.getDataValue() != null && monitorData.getLatestValue() == null) {
-                                    attributeValue=attributeEntity.getDataValue();
-                                }
-                                switch (monitorData.getAttributeType()) {
-                                    case "3":
-                                        monDataCol.setYieldWaterUsage(monDataCol.getYieldWaterUsage() != null ? monDataCol.getYieldWaterUsage() + attributeValue : attributeValue);
-                                        break;
-                                    case "4":
-                                        monDataCol.setIntakeWaterUsage(monDataCol.getIntakeWaterUsage() != null ? monDataCol.getIntakeWaterUsage() + attributeValue : attributeValue);
-                                        break;
-                                    case "5":
-                                        monDataCol.setPowerUsage(monDataCol.getPowerUsage() != null ? monDataCol.getPowerUsage() + attributeValue : attributeValue);
-                                        break;
-                                    case "6":
-                                        monDataCol.setDrugUsage(monDataCol.getDrugUsage() != null ? monDataCol.getDrugUsage() + attributeValue : attributeValue);
-                                        break;
+                            SimpleDateFormat formatdate = new SimpleDateFormat("YYYY-MM-dd");//日期算换格式
+                            //计算今日数据
+                            if(formatdate.format(new Date()).equals(monitorDataEntity.getCollectDate())) {
+                                //筛选该设备相同属性的值
+                                List<MonitorDataValueEntity> attributeEntities = monitorDataEntity.getDataValues().stream().filter((MonitorDataValueEntity m)
+                                        -> m.getAttributeId().equals(monitorData.getAttributeId())).collect(Collectors.toList());
+                                MonitorDataValueEntity  attributeEntity=attributeEntities.size()>0?attributeEntities.get(0):null;
+                                if (attributeEntity != null) {
+                                    Double attributeValue =0d;
+                                    if(attributeEntity.getDataValue() != null && monitorData.getLatestValue() != null){
+                                        attributeValue=attributeEntity.getDataValue() - monitorData.getLatestValue();
+                                    }
+                                    switch (monitorData.getAttributeType()) {
+                                        case "3":
+                                            monDataCol.setYieldWaterUsage(monDataCol.getYieldWaterUsage() != null ? monDataCol.getYieldWaterUsage() + attributeValue : attributeValue);
+                                            break;
+                                        case "4":
+                                            monDataCol.setIntakeWaterUsage(monDataCol.getIntakeWaterUsage() != null ? monDataCol.getIntakeWaterUsage() + attributeValue : attributeValue);
+                                            break;
+                                        case "5":
+                                            monDataCol.setPowerUsage(monDataCol.getPowerUsage() != null ? monDataCol.getPowerUsage() + attributeValue : attributeValue);
+                                            break;
+                                        case "6":
+                                            monDataCol.setDrugUsage(monDataCol.getDrugUsage() != null ? monDataCol.getDrugUsage() + attributeValue : attributeValue);
+                                            break;
+                                    }
                                 }
                             }
                         }
@@ -260,65 +264,70 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
                         byte[] bytes = redisUtil.get(("sms_water_"+monitorData.getDeviceCode()).getBytes());
                         if(bytes != null && bytes.length>0) {
                             MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
-                            monDataCol.setCollectDate(monitorDataEntity.getCollectDate());
-                            //筛选该设备相同属性的值
-                            List<MonitorDataValueEntity> attributeEntities = monitorDataEntity.getDataValues().stream().filter((MonitorDataValueEntity m)
-                                    -> m.getAttributeId().equals(monitorData.getAttributeId())).collect(Collectors.toList());
-                            MonitorDataValueEntity  attributeEntity=attributeEntities.size()>0?attributeEntities.get(0):null;
-                            if (attributeEntity != null) {
-                                Double attributeValue =0d;
-                                if(attributeEntity.getDataValue() != null && monitorData.getLatestValue() != null){
-                                    attributeValue=attributeEntity.getDataValue() - monitorData.getLatestValue();
-                                }else if(attributeEntity.getDataValue() != null && monitorData.getLatestValue() == null) {
-                                    attributeValue=attributeEntity.getDataValue();
-                                }
-                                //实时数据
-                                monitorData.setDataValue(attributeEntity.getDataValue());
-                                monitorData.setUnit(attributeEntity.getUnit());
-                                switch (monitorData.getAttributeType()) {
-                                    case "3"://供水量or出水量
-                                        monDataCol.setYieldWaterUsage(monDataCol.getYieldWaterUsage() != null ? monDataCol.getYieldWaterUsage() + attributeValue : attributeValue);
-                                        break;
-                                    case "4"://取水量or进水量
-                                        monDataCol.setIntakeWaterUsage(monDataCol.getIntakeWaterUsage() != null ? monDataCol.getIntakeWaterUsage() + attributeValue : attributeValue);
-                                        break;
-                                    case "5"://耗电量
-                                        monDataCol.setPowerUsage(monDataCol.getPowerUsage() != null ? monDataCol.getPowerUsage() + attributeValue : attributeValue);
-                                        break;
-                                    case "6"://耗药量
-                                        monDataCol.setDrugUsage(monDataCol.getDrugUsage() != null ? monDataCol.getDrugUsage() + attributeValue : attributeValue);
-                                        break;
-                                    case "7"://取水PHor进水PH
-                                        monDataCol.setIntakePh(monitorData);
-                                        break;
-                                    case "8"://供水PHor出水PH
-                                        monDataCol.setYieldPh(monitorData);
-                                        break;
-                                    case "9"://取水浊度or进水浊度
-                                        monDataCol.setIntakeTurbidity(monitorData);
-                                        break;
-                                    case "10"://供水浊度or出水浊度
-                                        monDataCol.setYieldTurbidity(monitorData);
-                                        break;
-                                    case "11"://余氯
-                                        monDataCol.setResidualChlorine(monitorData);
-                                        break;
-                                    case "12"://水位
-                                        monDataCol.setWaterLevel(monitorData);
-                                        break;
-                                    case "13"://压力
-                                        monDataCol.setPressure(monitorData);
-                                        break;
-                                    case "14"://瞬时流量
-                                        monDataCol.setInstantFlow(monitorData);
-                                        break;
-                                    case "2"://水泵状态
-                                        DecimalFormat decimalFormat = new DecimalFormat("###################.###########");//去掉末尾小数点
-                                        String specsValue = attributeEntity.getDataValue() == null ? null : decimalFormat.format(attributeEntity.getDataValue());
-                                        monitorData.setSpecsName(specsValue == null ? null : deviceAttributeSpecsService.selectSpecsName(attributeEntity.getAttributeId(), specsValue));
-                                        pumpStatus.add(monitorData);
-                                        monDataCol.setPumpStatus(pumpStatus);
-                                        break;
+                                monDataCol.setCollectDate(monitorDataEntity.getCollectDate());
+                                //筛选该设备相同属性的值
+                                List<MonitorDataValueEntity> attributeEntities = monitorDataEntity.getDataValues().stream().filter((MonitorDataValueEntity m)
+                                        -> m.getAttributeId().equals(monitorData.getAttributeId())).collect(Collectors.toList());
+                                MonitorDataValueEntity  attributeEntity=attributeEntities.size()>0?attributeEntities.get(0):null;
+                                if (attributeEntity != null) {
+                                    //实时数据
+                                    monitorData.setDataValue(attributeEntity.getDataValue());
+                                    monitorData.setUnit(attributeEntity.getUnit());
+                                    SimpleDateFormat formatdate = new SimpleDateFormat("YYYY-MM-dd");//日期算换格式
+                                    //计算今日数据
+                                    if(formatdate.format(new Date()).equals(monitorDataEntity.getCollectDate())) {
+                                        Double attributeValue =0d;
+                                        if(attributeEntity.getDataValue() != null && monitorData.getLatestValue() != null){
+                                            attributeValue=attributeEntity.getDataValue() - monitorData.getLatestValue();
+                                        }
+                                        switch (monitorData.getAttributeType()) {
+                                            case "3"://供水量or出水量
+                                                monDataCol.setYieldWaterUsage(monDataCol.getYieldWaterUsage() != null ? monDataCol.getYieldWaterUsage() + attributeValue : attributeValue);
+                                                break;
+                                            case "4"://取水量or进水量
+                                                monDataCol.setIntakeWaterUsage(monDataCol.getIntakeWaterUsage() != null ? monDataCol.getIntakeWaterUsage() + attributeValue : attributeValue);
+                                                break;
+                                            case "5"://耗电量
+                                                monDataCol.setPowerUsage(monDataCol.getPowerUsage() != null ? monDataCol.getPowerUsage() + attributeValue : attributeValue);
+                                                break;
+                                            case "6"://耗药量
+                                                monDataCol.setDrugUsage(monDataCol.getDrugUsage() != null ? monDataCol.getDrugUsage() + attributeValue : attributeValue);
+                                                break;
+                                        }
+                                    }
+                                    switch (monitorData.getAttributeType()) {
+                                        case "7"://取水PHor进水PH
+                                            monDataCol.setIntakePh(monitorData);
+                                            break;
+                                        case "8"://供水PHor出水PH
+                                            monDataCol.setYieldPh(monitorData);
+                                            break;
+                                        case "9"://取水浊度or进水浊度
+                                            monDataCol.setIntakeTurbidity(monitorData);
+                                            break;
+                                        case "10"://供水浊度or出水浊度
+                                            monDataCol.setYieldTurbidity(monitorData);
+                                            break;
+                                        case "11"://余氯
+                                            monDataCol.setResidualChlorine(monitorData);
+                                            break;
+                                        case "12"://水位
+                                            monDataCol.setWaterLevel(monitorData);
+                                            break;
+                                        case "13"://压力
+                                            monDataCol.setPressure(monitorData);
+                                            break;
+                                        case "14"://瞬时流量
+                                            monDataCol.setInstantFlow(monitorData);
+                                            break;
+                                        case "2"://水泵状态
+                                            DecimalFormat decimalFormat = new DecimalFormat("###################.###########");//去掉末尾小数点
+                                            String specsValue = attributeEntity.getDataValue() == null ? null : decimalFormat.format(attributeEntity.getDataValue());
+                                            monitorData.setSpecsName(specsValue == null ? null : deviceAttributeSpecsService.selectSpecsName(attributeEntity.getAttributeId(), specsValue));
+                                            pumpStatus.add(monitorData);
+                                            monDataCol.setPumpStatus(pumpStatus);
+                                            break;
+                                    }
                                 }
                             }
                         }
@@ -326,5 +335,4 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
                 }
             }
         }
-    }
 }

+ 3 - 3
sms_water/src/main/resources/mapper/AlarmSettingMapper.xml

@@ -32,7 +32,7 @@
     <!-- 外联表  -->
     <sql id="leftJoins">
         left join sms_device t2 on t1.device_id=t2.id and t2.status =1
-        left join sms_scene t3 on t2.scene_id=t3.id and t3.status =1
+        left join sms_scene t3 on t1.scene_id=t3.id and t3.status =1
         left join sms_device_attribute t4 on t1.attribute_id=t4.id and t4.status =1
         left join sms_device_type t5 on t2.device_type_id=t5.id and t5.status =1
      </sql>
@@ -53,10 +53,10 @@
                 and t4.name like CONCAT('%',#{alarm.attributeName},'%')
             </if>
             <if test="alarm.sceneId != null ">
-                and t2.scene_id = #{alarm.sceneId}
+                and t1.scene_id = #{alarm.sceneId}
             </if>
             <if test="alarm.sceneIds != null and alarm.sceneIds.size()>0">
-                and t2.scene_id in
+                and t1.scene_id in
                 <foreach item="item" index="index" collection="alarm.sceneIds" open="("
                          separator="," close=")">
                     #{item}

+ 100 - 10
sms_water/src/main/resources/mapper/DeviceMapper.xml

@@ -22,9 +22,31 @@
             ,d.CREATE_BY as "createBy"
             ,d.DATE_UPDATE as "dateUpdate"
             ,d.UPDATE_BY as "updateBy"
-
-            ,s.SCENE_NAME as "sceneName"
-
+            ,t.MANUFACTURER_NAME as "manufacturerName"
+            ,t.MANUFACTURER_ID as "manufacturerId"
+            ,t.DEVICE_TYPE as "deviceType"
+            ,t.DEVICE_MODE as "deviceMode"
+    </sql>
+    <sql id="Base_Column_SceneList">
+            d.id
+            ,d.TENANT_ID as "tenantId"
+            ,d.DEVICE_CODE as "deviceCode"
+            ,d.DEVICE_NAME as "deviceName"
+            ,d.DEVICE_TYPE_ID as "deviceTypeId"
+            ,d.COMPANY_ORG_ID as "companyOrgId"
+            ,d.DEPT_ORG_ID as "deptOrgId"
+            ,d.SCENE_ID as "sceneId"
+            ,d.POINT_X as "pointX"
+            ,d.POINT_Y as "pointY"
+            ,d.ENABLE_STATE as "enableState"
+            ,d.LAST_UPDATE_TIME as "lastUpdateTime"
+            ,d.ADDRESS as "address"
+            ,d.REMARK as "remark"
+            ,d.`STATUS` as "status"
+            ,d.DATE_CREATE as "dateCreate"
+            ,d.CREATE_BY as "createBy"
+            ,d.DATE_UPDATE as "dateUpdate"
+            ,d.UPDATE_BY as "updateBy"
             ,t.MANUFACTURER_NAME as "manufacturerName"
             ,t.MANUFACTURER_ID as "manufacturerId"
             ,t.DEVICE_TYPE as "deviceType"
@@ -32,7 +54,6 @@
     </sql>
 
     <sql id="deviceJoins">
-        left join sms_scene s on d.SCENE_ID =s.id
         left join sms_device_type t on d.DEVICE_TYPE_ID = t.id
     </sql>
     <select id="selectById" resultType="com.huaxu.dto.DeviceDto">
@@ -74,12 +95,6 @@
         <if test="deviceDto.deptOrgId != null and deviceDto.deptOrgId != 0 ">
             and d.DEPT_ORG_ID =#{deviceDto.deptOrgId}
         </if>
-        <if test="deviceDto.sceneIds != null and deviceDto.sceneIds.size() > 0">
-            and d.SCENE_ID  in
-            <foreach collection="deviceDto.sceneIds" item="item" open="(" close=")" separator=",">
-                #{item}
-            </foreach>
-        </if>
         <if test="deviceDto.enableState != null ">
             and d.ENABLE_STATE =#{deviceDto.enableState}
         </if>
@@ -113,7 +128,82 @@
         </if>
 
     </select>
+    <!--通过实体作为筛选条件查询-->
+    <select id="selectListByScene" resultType="com.huaxu.dto.DeviceDto">
+        select
+        d.id
+        ,d.TENANT_ID as "tenantId"
+        ,d.DEVICE_CODE as "deviceCode"
+        ,d.DEVICE_NAME as "deviceName"
+        ,d.DEVICE_TYPE_ID as "deviceTypeId"
+        ,d.COMPANY_ORG_ID as "companyOrgId"
+        ,d.DEPT_ORG_ID as "deptOrgId"
+        ,d.SCENE_ID as "sceneId"
+        ,d.POINT_X as "pointX"
+        ,d.POINT_Y as "pointY"
+        ,d.ENABLE_STATE as "enableState"
+        ,d.LAST_UPDATE_TIME as "lastUpdateTime"
+        ,d.ADDRESS as "address"
+        ,d.REMARK as "remark"
+        ,d.`STATUS` as "status"
+        ,d.DATE_CREATE as "dateCreate"
+        ,d.CREATE_BY as "createBy"
+        ,d.DATE_UPDATE as "dateUpdate"
+        ,d.UPDATE_BY as "updateBy"
+        ,t.MANUFACTURER_NAME as "manufacturerName"
+        ,t.MANUFACTURER_ID as "manufacturerId"
+        ,t.DEVICE_TYPE as "deviceType"
+        ,t.DEVICE_MODE as "deviceMode"
+        ,case when s.ID is null then 0 else 1 end as "isCheck"
+        from sms_device d
+        left join sms_device_type t on d.DEVICE_TYPE_ID = t.id
+        left join sms_device_scene s on s.DEVICE_ID=d.ID and d.SCENE_ID=#{deviceDto.sceneId}
+        where d.status = 1
+        <if test="deviceDto.tenantId != null and deviceDto.tenantId != '' ">
+            and d.tenant_id = #{deviceDto.tenantId}
+        </if>
+        <if test="deviceDto.condition != null and deviceDto.condition != ''">
+            and (device_code like concat('%', #{deviceDto.condition},'%') or device_name like concat('%', #{deviceDto.condition},'%'))
+        </if>
+        <if test="deviceDto.companyOrgId != null and deviceDto.companyOrgId != 0 ">
+            and d.COMPANY_ORG_ID=#{deviceDto.companyOrgId}
+        </if>
+        <if test="deviceDto.deptOrgId != null and deviceDto.deptOrgId != 0 ">
+            and d.DEPT_ORG_ID =#{deviceDto.deptOrgId}
+        </if>
+        <if test="deviceDto.enableState != null ">
+            and d.ENABLE_STATE =#{deviceDto.enableState}
+        </if>
+
+        <if test="deviceDto.userType!=null and deviceDto.userType!=-999 and deviceDto.userType!=-9999 and  deviceDto.programItems != null and deviceDto.programItems.size() > 0">
+            <if test="deviceDto.permissonType == 5 or deviceDto.permissonType == 2">
+                and ( d.DEPT_ORG_ID in
+                <foreach collection="deviceDto.programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                or
+                d.COMPANY_ORG_ID in
+                <foreach collection="deviceDto.programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                )
+            </if>
+            <if test="deviceDto.permissonType == 4 or deviceDto.permissonType == 3">
+                and d.DEPT_ORG_ID in
+                <foreach collection="deviceDto.programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+            </if>
+            <if test="deviceDto.permissonType == 1">
+                and d.COMPANY_ORG_ID in
+                <foreach collection="deviceDto.programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
+            </if>
+        </if>
 
+    </select>
     <!-- 新增所有列 -->
     <insert id="insert" keyProperty="id" useGeneratedKeys="true">
         INSERT INTO  sms_device ( TENANT_ID ,  DEVICE_CODE ,  DEVICE_NAME ,  DEVICE_TYPE_ID ,

+ 10 - 1
sms_water/src/main/resources/mapper/MonitorInfoMapper.xml

@@ -95,13 +95,22 @@
         </where>
     </select>
     <select id="findAttributeList" resultType="com.huaxu.dto.SceneDeviceAttributeDto">
-       SELECT IFNULL(a.REMARK,b.`NAME`) AS "attributeName",
+       SELECT IFNULL(a.REMARK,b.`NAME`) AS "attributeName",a.ATTRIBUTE_ID as "attributeId",
         c.min_value as "minValue" ,c.max_value as "maxValue" ,c.avg_value as "avgValue" ,
         c.sum_value as "sumValue" ,c.latest_value as "latestValue",
         b.ATTRIBUTE_TYPE as "attributeType"
         FROM sms_device_parm a
         INNER JOIN sms_device_attribute b on a.ATTRIBUTE_ID=b.ID
         INNER JOIN sms_day_report c on a.ATTRIBUTE_ID=c.ATTRIBUTE_ID and a.DEVICE_ID=c.DEVICE_ID
+        INNER JOIN (select b.ATTRIBUTE_TYPE,min(d.collect_date) collect_date
+        from sms_day_report d
+        INNER JOIN sms_device_attribute b on d.ATTRIBUTE_ID=b.ID
+        where d.DEVICE_ID = #{report.deviceId}
+        <if test="report.year != null ">and d.`YEAR`=#{report.year}</if>
+        <if test="report.month != null ">and d.`MONTH`=#{report.month}</if>
+        <if test="report.day != null ">and d.`DAY`=#{report.day}</if>
+        and (b.ATTRIBUTE_TYPE =3 or b.ATTRIBUTE_TYPE =4 or b.ATTRIBUTE_TYPE =5 or b.ATTRIBUTE_TYPE =6)
+        GROUP BY b.ATTRIBUTE_TYPE) as tab on b.ATTRIBUTE_TYPE=tab.ATTRIBUTE_TYPE and c.collect_date=tab.collect_date
         where
         a.DEVICE_ID = #{report.deviceId}
         <if test="report.year != null ">and c.`YEAR`=#{report.year}</if>

+ 1 - 1
sms_water/src/main/resources/mapper/OnlineMonitorMapper.xml

@@ -241,7 +241,7 @@
         left join (
             select b1.device_id,b1.attribute_id,max(latest_value) latest_value
             from sms_day_report b1
-            where b1.year = year(now() + interval-1 day) and b1.year = month(now() + interval-1 day) and b1.day = day(now() + interval-1 day)
+            where b1.year = year(now() + interval-1 day) and b1.month = month(now() + interval-1 day) and b1.day = day(now() + interval-1 day)
                 <if test="sceneIds != null and sceneIds.size() > 0">
                     and b1.parent_scene_id  in
                     <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">

+ 7 - 0
sms_water/src/main/resources/mapper/SceneMapper.xml

@@ -300,4 +300,11 @@
         </where>
         order by  a.date_create
     </select>
+    <!--根据场景id查询一级场景信息-->
+    <select id="findParentSceneById" resultType="com.huaxu.entity.SceneEntity">
+        select t1.*,t2.id parentsceneid,t2.scene_name parentscenename
+        from sms_scene t1
+        left join sms_scene t2 on substring_index(substring_index(t1.parent_scene_ids, ',', 2), ',', -1)=t2.id
+        where t1.id=#{id}
+    </select>
 </mapper>