Browse Source

设备添加及查询去掉场景,增加按场景查询绑定设备

wangyangyang 4 years ago
parent
commit
4959db3826

+ 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);
 }

+ 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

+ 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);
 }

+ 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);
+    }
 }

+ 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>