Prechádzať zdrojové kódy

Merge branch 'server-165' of uskycloud/usky-modules into master

gez 1 rok pred
rodič
commit
96a6694363
51 zmenil súbory, kde vykonal 656 pridanie a 209 odobranie
  1. 10 3
      service-backend/service-backend-api/src/main/java/com/usky/backend/client/DeviceDataClient.java
  2. 2 0
      service-backend/service-backend-api/src/main/java/com/usky/backend/domain/StatusVO.java
  3. 22 0
      service-backend/service-backend-api/src/main/java/com/usky/backend/domain/request/DataRealTimeRequestVO.java
  4. 48 0
      service-backend/service-backend-api/src/main/java/com/usky/backend/domain/response/DataRealTimeResponseVO.java
  5. 16 8
      service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/api/DeviceDataApi.java
  6. 2 2
      service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/DataEgHistory.java
  7. 2 2
      service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/DataEvHistory.java
  8. 2 2
      service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/DataGrHistory.java
  9. 2 2
      service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/DataLcHistory.java
  10. 2 2
      service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/DataLgHistory.java
  11. 2 2
      service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/DataRealTime.java
  12. 2 2
      service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/DataVdHistory.java
  13. 6 3
      service-backend/service-backend-biz/src/main/java/com/usky/backend/service/DataRealTimeService.java
  14. 3 2
      service-backend/service-backend-biz/src/main/java/com/usky/backend/service/impl/DataQueryServiceImpl.java
  15. 34 41
      service-backend/service-backend-biz/src/main/java/com/usky/backend/service/impl/DataRealTimeServiceImpl.java
  16. 1 1
      service-backend/service-backend-biz/src/main/resources/mapper/backend/DataEgHistoryMapper.xml
  17. 1 1
      service-backend/service-backend-biz/src/main/resources/mapper/backend/DataEvHistoryMapper.xml
  18. 1 1
      service-backend/service-backend-biz/src/main/resources/mapper/backend/DataGrHistoryMapper.xml
  19. 1 1
      service-backend/service-backend-biz/src/main/resources/mapper/backend/DataLcHistoryMapper.xml
  20. 1 1
      service-backend/service-backend-biz/src/main/resources/mapper/backend/DataLgHistoryMapper.xml
  21. 1 1
      service-backend/service-backend-biz/src/main/resources/mapper/backend/DataRealTimeMapper.xml
  22. 1 1
      service-backend/service-backend-biz/src/main/resources/mapper/backend/DataVdHistoryMapper.xml
  23. 4 8
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseBuildController.java
  24. 32 3
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseBuildPlaneController.java
  25. 3 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DeviceHttpController.java
  26. 19 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDeviceInfoController.java
  27. 3 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/TaskController.java
  28. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseBuildFacility.java
  29. 5 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseBuildFacilityType.java
  30. 3 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseBuildPlane.java
  31. 4 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpDeviceStatus.java
  32. 8 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseAlarmMapper.java
  33. 2 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceStatusMapper.java
  34. 2 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseAlarmService.java
  35. 5 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseBuildPlaneService.java
  36. 2 4
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseBuildService.java
  37. 2 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDeviceInfoService.java
  38. 0 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDeviceStatusService.java
  39. 97 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmServiceImpl.java
  40. 30 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseBuildPlaneServiceImpl.java
  41. 40 9
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseBuildServiceImpl.java
  42. 76 64
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseGgpFacilityServiceImpl.java
  43. 72 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceInfoServiceImpl.java
  44. 5 26
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceStatusServiceImpl.java
  45. 5 3
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/listener/MqttListener.java
  46. 1 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/BaseBuildFacilityVO.java
  47. 5 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/BuildFacilityRelateRequestVO.java
  48. 45 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/BaseAlarmMapper.xml
  49. 2 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/BaseBuildFacilityMapper.xml
  50. 1 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/BaseBuildFacilityTypeMapper.xml
  51. 5 4
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDeviceStatusMapper.xml

+ 10 - 3
service-backend/service-backend-api/src/main/java/com/usky/backend/client/DeviceDataClient.java

@@ -1,10 +1,17 @@
 package com.usky.backend.client;
 
+import com.usky.backend.domain.request.DataRealTimeRequestVO;
+import com.usky.backend.domain.response.DataRealTimeResponseVO;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
 
 @FeignClient(contextId = "deviceDataClient", value = "usky-backend")
 public interface DeviceDataClient {
-//
-//    @RequestMapping(value = "data")
-//    void data(@RequestBody List<DeviceDataInfoVO> list);
+
+    @RequestMapping(value = "data")
+    List<DataRealTimeResponseVO> data(@RequestParam("productCode") String productCode, @RequestParam(value = "deviceIds") List<String> deviceIds);
 }

+ 2 - 0
service-backend/service-backend-api/src/main/java/com/usky/backend/domain/StatusVO.java

@@ -19,4 +19,6 @@ public class StatusVO implements Serializable {
 
     private LocalDateTime time;
 
+    private String productCode;
+
 }

+ 22 - 0
service-backend/service-backend-api/src/main/java/com/usky/backend/domain/request/DataRealTimeRequestVO.java

@@ -0,0 +1,22 @@
+package com.usky.backend.domain.request;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DataRealTimeRequestVO {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 产品编码
+     */
+    private String  productCode;
+
+    /**
+     * 设备id集合
+     */
+    private List<String> deviceIds;
+}

+ 48 - 0
service-backend/service-backend-api/src/main/java/com/usky/backend/domain/response/DataRealTimeResponseVO.java

@@ -0,0 +1,48 @@
+package com.usky.backend.domain.response;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DataRealTimeResponseVO {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 设备ID
+     */
+    private String deviceId;
+
+    /**
+     * 产品编码
+     */
+    private String productCode;
+
+    /**
+     * 设备类型
+     */
+    private Integer deviceType;
+
+    /**
+     * 属性名称
+     */
+    private String attributeName;
+
+    /**
+     * 属性值
+     */
+    private String attributeData;
+
+    /**
+     * 数据时间
+     */
+    private LocalDateTime dataTime;
+
+    /**
+     * 插入时间
+     */
+    private LocalDateTime insertTime;
+}

+ 16 - 8
service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/api/DeviceDataApi.java

@@ -1,10 +1,16 @@
 package com.usky.backend.controller.api;
 
 import com.usky.backend.client.DeviceDataClient;
-//import com.usky.backend.domain.request.DeviceDataInfoVO;
+import com.usky.backend.domain.request.DataRealTimeRequestVO;
+import com.usky.backend.domain.response.DataRealTimeResponseVO;
+import com.usky.backend.service.DataRealTimeService;
 import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * <p>
  *  数据统一存储 前端控制器
@@ -15,12 +21,14 @@ import org.springframework.web.bind.annotation.RestController;
 @Api(tags = "数据统一存储RPC")
 public class DeviceDataApi implements DeviceDataClient {
 
-//    @Autowired
-//    private DataRealTimeService dataRealTimeService;
-//
-//    @Override
-//    public void data(@RequestBody List<DeviceDataInfoVO> list){
-//        dataRealTimeService.data(list);
-//    }
+    @Autowired
+    private DataRealTimeService dataRealTimeService;
+
+    @Override
+    public List<DataRealTimeResponseVO> data(String productCode, List<String> deviceIds){
+
+        List<DataRealTimeResponseVO> list =  dataRealTimeService.data(productCode, deviceIds);
+        return list;
+    }
 
 }

+ 2 - 2
service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/DataEgHistory.java

@@ -33,9 +33,9 @@ public class DataEgHistory implements Serializable {
     private String deviceId;
 
     /**
-     * 设备编号
+     * 产品编码
      */
-    private String deviceCode;
+    private String productCode;
 
     /**
      * 设备类型

+ 2 - 2
service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/DataEvHistory.java

@@ -33,9 +33,9 @@ public class DataEvHistory implements Serializable {
     private String deviceId;
 
     /**
-     * 设备编号
+     * 产品编码
      */
-    private String deviceCode;
+    private String productCode;
 
     /**
      * 设备类型

+ 2 - 2
service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/DataGrHistory.java

@@ -33,9 +33,9 @@ public class DataGrHistory implements Serializable {
     private String deviceId;
 
     /**
-     * 设备编号
+     * 产品编码
      */
-    private String deviceCode;
+    private String productCode;
 
     /**
      * 设备类型

+ 2 - 2
service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/DataLcHistory.java

@@ -33,9 +33,9 @@ public class DataLcHistory implements Serializable {
     private String deviceId;
 
     /**
-     * 设备编号
+     * 产品编码
      */
-    private String deviceCode;
+    private String productCode;
 
     /**
      * 设备类型

+ 2 - 2
service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/DataLgHistory.java

@@ -33,9 +33,9 @@ public class DataLgHistory implements Serializable {
     private String deviceId;
 
     /**
-     * 设备编号
+     * 产品编码
      */
-    private String deviceCode;
+    private String productCode;
 
     /**
      * 设备类型

+ 2 - 2
service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/DataRealTime.java

@@ -33,9 +33,9 @@ public class DataRealTime implements Serializable {
     private String deviceId;
 
     /**
-     * 设备编号
+     * 产品编码
      */
-    private String deviceCode;
+    private String productCode;
 
     /**
      * 设备类型

+ 2 - 2
service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/DataVdHistory.java

@@ -33,9 +33,9 @@ public class DataVdHistory implements Serializable {
     private String deviceId;
 
     /**
-     * 设备编号
+     * 产品编码
      */
-    private String deviceCode;
+    private String productCode;
 
     /**
      * 设备类型

+ 6 - 3
service-backend/service-backend-biz/src/main/java/com/usky/backend/service/DataRealTimeService.java

@@ -1,9 +1,12 @@
 package com.usky.backend.service;
 
 import com.usky.backend.domain.DataRealTime;
-//import com.usky.backend.domain.request.DeviceDataInfoVO;
+import com.usky.backend.domain.request.DataRealTimeRequestVO;
+import com.usky.backend.domain.response.DataRealTimeResponseVO;
 import com.usky.common.mybatis.core.CrudService;
 
+import java.util.List;
+
 /**
  * <p>
  * 实时数据表 服务类
@@ -13,6 +16,6 @@ import com.usky.common.mybatis.core.CrudService;
  * @since 2023-06-07
  */
 public interface DataRealTimeService extends CrudService<DataRealTime> {
-//
-//    void data(List<DeviceDataInfoVO> list);
+
+    List<DataRealTimeResponseVO> data(String productCode, List<String> deviceIds);
 }

+ 3 - 2
service-backend/service-backend-biz/src/main/java/com/usky/backend/service/impl/DataQueryServiceImpl.java

@@ -270,14 +270,15 @@ public class DataQueryServiceImpl implements DataQueryService {
     public List<StatusVO> status(){
         List<StatusVO> list = new ArrayList<>();
         QueryWrapper<DataRealTime> query = Wrappers.query();
-        query.select("device_id as deviceId","Max(data_time) as maxTime")
-                .groupBy("device_id");
+        query.select("product_code as productCode","device_id as deviceId","Max(data_time) as maxTime")
+                .groupBy("device_id","product_code");
         List<Map<String,Object>> maps = dataRealTimeService.listMaps(query);
         if(maps.size()>0) {
             for (int i = 0; i < maps.size(); i++) {
                 StatusVO statusVO = new StatusVO();
                 statusVO.setDeviceId(maps.get(i).get("deviceId").toString());
                 statusVO.setTime(LocalDateTime.parse(maps.get(i).get("maxTime").toString(),DateTimeFormatter.ISO_DATE_TIME));
+                statusVO.setProductCode(maps.get(i).get("productCode").toString());
                 list.add(statusVO);
             }
         }

+ 34 - 41
service-backend/service-backend-biz/src/main/java/com/usky/backend/service/impl/DataRealTimeServiceImpl.java

@@ -1,12 +1,20 @@
 package com.usky.backend.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.usky.backend.domain.DataRealTime;
-//import com.usky.backend.domain.request.DeviceDataInfoVO;
+import com.usky.backend.domain.request.DataRealTimeRequestVO;
+import com.usky.backend.domain.response.DataRealTimeResponseVO;
 import com.usky.backend.mapper.DataRealTimeMapper;
 import com.usky.backend.service.DataRealTimeService;
 import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * <p>
  * 实时数据表 服务实现类
@@ -17,46 +25,31 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class DataRealTimeServiceImpl extends AbstractCrudService<DataRealTimeMapper, DataRealTime> implements DataRealTimeService {
-//    @Autowired
-//    private DataRealTimeMapper dataRealTimeMapper;
-//
-//    @Override
-//    public void data(List<DeviceDataInfoVO> list){
-//
-//        if(CollectionUtils.isNotEmpty(list)){
-//            for(int i=0;i<list.size();i++){
-//
-//                //操作实时数据表,当表中有这个设备的数据时,更新这条属性记录,否则插入
-//                LambdaQueryWrapper<DataRealTime> queryWrapper = Wrappers.lambdaQuery();
-//                queryWrapper.eq(DataRealTime::getDeviceId,list.get(i).getDeviceId())
-//                        .eq(DataRealTime::getAttributeName,list.get(i).getName());
-//                DataRealTime one = this.getOne(queryWrapper);
-//                if(one != null){
-//                    one.setAttributeData(String.valueOf(list.get(i).getValue()));
-//                    one.setDataTime(list.get(i).getTimestamp());
-//                    one.setInsertTime(LocalDateTime.now());
-//                    this.updateById(one);
-//                }else{
-//                    DataRealTime data = new DataRealTime();
-//                    data.setDeviceId(list.get(i).getDeviceId());
-//                    data.setDeviceType(list.get(i).getDeviceType());
-//                    data.setAttributeName(list.get(i).getName());
-//                    data.setAttributeData(String.valueOf(list.get(i).getValue()));
-//                    data.setDataTime(list.get(i).getTimestamp());
-//                    data.setInsertTime(LocalDateTime.now());
-//                    this.save(data);
-//                }
-//
-//                String tableName = "data_"+list.get(i).getTypeAbbrevia()+"_history";
-//                //操作各个设备历史数据表(通用方法)
-//                int res = dataRealTimeMapper.insertHistoryTable(list.get(i),tableName,LocalDateTime.now());
-//                if(res > 0){
-//
-//                }
-//            }
-//        }
-//
-//    }
+
+    @Override
+    public List<DataRealTimeResponseVO> data(String productCode, List<String> deviceIds){
+        List<DataRealTimeResponseVO> responseVOList = new ArrayList<>();
+
+        LambdaQueryWrapper<DataRealTime> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(DataRealTime::getProductCode, productCode)
+                .in(DataRealTime::getDeviceId, deviceIds);
+        List<DataRealTime> list = this.list(queryWrapper);
+        if(CollectionUtils.isNotEmpty(list)){
+            for(int i=0;i<list.size();i++){
+                DataRealTimeResponseVO responseVO = new DataRealTimeResponseVO();
+                responseVO.setDeviceId(list.get(i).getDeviceId());
+                responseVO.setProductCode(list.get(i).getProductCode());
+                responseVO.setDeviceType(list.get(i).getDeviceType());
+                responseVO.setAttributeName(list.get(i).getAttributeName());
+                responseVO.setAttributeData(list.get(i).getAttributeData());
+                responseVO.setDataTime(list.get(i).getDataTime());
+                responseVO.setInsertTime(list.get(i).getInsertTime());
+
+                responseVOList.add(responseVO);
+            }
+        }
+        return responseVOList;
+    }
 
 
 }

+ 1 - 1
service-backend/service-backend-biz/src/main/resources/mapper/backend/DataEgHistoryMapper.xml

@@ -6,7 +6,7 @@
     <resultMap id="BaseResultMap" type="com.usky.backend.domain.DataEgHistory">
         <id column="id" property="id" />
         <result column="device_id" property="deviceId" />
-        <result column="device_code" property="deviceCode" />
+        <result column="product_code" property="productCode" />
         <result column="device_type" property="deviceType" />
         <result column="attribute_name" property="attributeName" />
         <result column="attribute_data" property="attributeData" />

+ 1 - 1
service-backend/service-backend-biz/src/main/resources/mapper/backend/DataEvHistoryMapper.xml

@@ -6,7 +6,7 @@
     <resultMap id="BaseResultMap" type="com.usky.backend.domain.DataEvHistory">
         <id column="id" property="id" />
         <result column="device_id" property="deviceId" />
-        <result column="device_code" property="deviceCode" />
+        <result column="product_code" property="productCode" />
         <result column="device_type" property="deviceType" />
         <result column="attribute_name" property="attributeName" />
         <result column="attribute_data" property="attributeData" />

+ 1 - 1
service-backend/service-backend-biz/src/main/resources/mapper/backend/DataGrHistoryMapper.xml

@@ -6,7 +6,7 @@
     <resultMap id="BaseResultMap" type="com.usky.backend.domain.DataGrHistory">
         <id column="id" property="id" />
         <result column="device_id" property="deviceId" />
-        <result column="device_code" property="deviceCode" />
+        <result column="product_code" property="productCode" />
         <result column="device_type" property="deviceType" />
         <result column="attribute_name" property="attributeName" />
         <result column="attribute_data" property="attributeData" />

+ 1 - 1
service-backend/service-backend-biz/src/main/resources/mapper/backend/DataLcHistoryMapper.xml

@@ -6,7 +6,7 @@
     <resultMap id="BaseResultMap" type="com.usky.backend.domain.DataLcHistory">
         <id column="id" property="id" />
         <result column="device_id" property="deviceId" />
-        <result column="device_code" property="deviceCode" />
+        <result column="product_code" property="productCode" />
         <result column="device_type" property="deviceType" />
         <result column="attribute_name" property="attributeName" />
         <result column="attribute_data" property="attributeData" />

+ 1 - 1
service-backend/service-backend-biz/src/main/resources/mapper/backend/DataLgHistoryMapper.xml

@@ -6,7 +6,7 @@
     <resultMap id="BaseResultMap" type="com.usky.backend.domain.DataLgHistory">
         <id column="id" property="id" />
         <result column="device_id" property="deviceId" />
-        <result column="device_code" property="deviceCode" />
+        <result column="product_code" property="productCode" />
         <result column="device_type" property="deviceType" />
         <result column="attribute_name" property="attributeName" />
         <result column="attribute_data" property="attributeData" />

+ 1 - 1
service-backend/service-backend-biz/src/main/resources/mapper/backend/DataRealTimeMapper.xml

@@ -6,7 +6,7 @@
     <resultMap id="BaseResultMap" type="com.usky.backend.domain.DataRealTime">
         <id column="id" property="id" />
         <result column="device_id" property="deviceId" />
-        <result column="device_code" property="deviceCode" />
+        <result column="product_code" property="productCode" />
         <result column="device_type" property="deviceType" />
         <result column="attribute_name" property="attributeName" />
         <result column="attribute_data" property="attributeData" />

+ 1 - 1
service-backend/service-backend-biz/src/main/resources/mapper/backend/DataVdHistoryMapper.xml

@@ -6,7 +6,7 @@
     <resultMap id="BaseResultMap" type="com.usky.backend.domain.DataVdHistory">
         <id column="id" property="id" />
         <result column="device_id" property="deviceId" />
-        <result column="device_code" property="deviceCode" />
+        <result column="product_code" property="productCode" />
         <result column="device_type" property="deviceType" />
         <result column="attribute_name" property="attributeName" />
         <result column="attribute_data" property="attributeData" />

+ 4 - 8
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseBuildController.java

@@ -106,16 +106,12 @@ public class BaseBuildController {
     /**
      * 类型设施关联查询
      *
-     * @param id  主键ID
-     * @param floor  所属楼层
-     * @param typeCode  类型编码
+     * @param baseBuildFacilityVO
      * @return
      */
-    @GetMapping("typeFacilityInfo")
-    public ApiResult<List<BaseBuildFacility>> typeFacilityInfo(@RequestParam(value = "id") Integer id,
-                                                               @RequestParam(value = "floor") String floor,
-                                                               @RequestParam(value = "typeCode") String typeCode) {
-        return ApiResult.success(baseBuildService.typeFacilityInfo(id,floor,typeCode));
+    @PostMapping("typeFacilityInfo")
+    public ApiResult<List<BaseBuildFacility>> typeFacilityInfo(@RequestBody BaseBuildFacilityVO baseBuildFacilityVO) {
+        return ApiResult.success(baseBuildService.typeFacilityInfo(baseBuildFacilityVO));
     }
 
     /**

+ 32 - 3
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseBuildPlaneController.java

@@ -1,9 +1,14 @@
 package com.usky.iot.controller.web;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.usky.common.core.bean.ApiResult;
+import com.usky.iot.domain.BaseBuild;
+import com.usky.iot.domain.BaseBuildPlane;
+import com.usky.iot.service.BaseBuildPlaneService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.stereotype.Controller;
+import java.util.List;
 
 /**
  * <p>
@@ -13,9 +18,33 @@ import org.springframework.stereotype.Controller;
  * @author han
  * @since 2023-08-17
  */
-@Controller
+@RestController
 @RequestMapping("/baseBuildPlane")
 public class BaseBuildPlaneController {
+    @Autowired
+    private BaseBuildPlaneService baseBuildPlaneService;
 
+    /**
+     * 新增
+     * @param baseBuildPlane
+     * @return
+     */
+    @PostMapping
+    ApiResult<Void> add(@RequestBody BaseBuildPlane baseBuildPlane){
+        baseBuildPlaneService.add(baseBuildPlane);
+        return ApiResult.success();
+    }
+
+    /**
+     * 列表
+     * @param buildId
+     * @param floor
+     * @return
+     */
+    @GetMapping("dataList")
+    ApiResult<List<BaseBuildPlane>> dataList(@RequestParam(value = "buildId") Integer buildId,
+                                             @RequestParam(value = "floor",required = false) String floor){
+        return ApiResult.success(baseBuildPlaneService.dataList(buildId,floor));
+    }
 }
 

+ 3 - 2
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DeviceHttpController.java

@@ -1,6 +1,7 @@
 package com.usky.iot.controller.web;
 
 import com.usky.common.core.bean.ApiResult;
+import com.usky.iot.service.BaseAlarmService;
 import com.usky.iot.service.DmpDataInfoService;
 import com.usky.iot.service.DmpDeviceStatusService;
 import com.usky.backend.domain.request.DmpDeviceDataRequestVO;
@@ -16,14 +17,14 @@ import org.springframework.web.bind.annotation.*;
 public class DeviceHttpController {
 
     @Autowired
-    private DmpDeviceStatusService dmpDeviceStatusService;
+    private BaseAlarmService baseAlarmService;
 
     @Autowired
     private DmpDataInfoService dmpDataInfoService;
 
     @GetMapping("/status")
     public ApiResult<Void> status(){
-        dmpDeviceStatusService.status();
+        baseAlarmService.status();
         return ApiResult.success();
     }
 

+ 19 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDeviceInfoController.java

@@ -110,5 +110,24 @@ public class DmpDeviceInfoController {
     public void export(@RequestBody DmpDeviceInfoRequest dmpDeviceInfoRequest, HttpServletResponse response){
         dmpDeviceInfoService.export(dmpDeviceInfoRequest,response);
     }
+
+    /**
+     * 数据中心-设备实时心跳数据接口
+     *
+     * @param deviceName 设备名称
+     * @param installAddress 设备安装位置
+     * @param productCode   产品编码
+     * @param pageNum  当前页
+     * @param pageSize  每页条数
+     * @return
+     */
+    @GetMapping("deviceCurrentDataList")
+    public ApiResult<CommonPage<Object>> deviceCurrentDataList(@RequestParam(value = "deviceName",required = false) String deviceName,
+                                                               @RequestParam(value = "installAddress",required = false) String installAddress,
+                                                               @RequestParam(value = "productCode",required = false) String productCode,
+                                                               @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
+                                                               @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize){
+        return ApiResult.success(dmpDeviceInfoService.deviceCurrentDataList(deviceName,installAddress,productCode,pageNum,pageSize));
+    }
 }
 

+ 3 - 2
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/TaskController.java

@@ -1,5 +1,6 @@
 package com.usky.iot.controller.web;
 
+import com.usky.iot.service.BaseAlarmService;
 import com.usky.iot.service.CrmCustomInfoService;
 import com.usky.iot.service.DmpDeviceStatusService;
 import com.usky.iot.service.job.DmpDataOverviewJob;
@@ -19,7 +20,7 @@ public class TaskController {
     private DmpDataOverviewJob dmpDataOverviewJob;
 
     @Autowired
-    private DmpDeviceStatusService dmpDeviceStatusService;
+    private BaseAlarmService baseAlarmService;
 
     @Autowired
     private CrmCustomInfoService crmCustomInfoService;
@@ -32,7 +33,7 @@ public class TaskController {
 //    @Scheduled(cron = "0 0/1 * * * ? ") //每天凌晨1点执行
 //    public void task1() {
 //        System.out.println(Thread.currentThread().getName() + "定时任务执行中");
-//        dmpDeviceStatusService.status();
+//        baseAlarmService.status();
 //    }
 
     @Scheduled(cron = "0 30 * * * ? ") //每天凌晨0点30分执行

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseBuildFacility.java

@@ -95,6 +95,16 @@ public class BaseBuildFacility implements Serializable {
      */
     private String contactPhone;
 
+    /**
+     * 平面X轴坐标
+     */
+    private String planeX;
+
+    /**
+     * 平面Y轴坐标
+     */
+    private String planeY;
+
     /**
      * X轴坐标
      */
@@ -151,4 +161,10 @@ public class BaseBuildFacility implements Serializable {
      * 建筑设施备注
      */
     private String facilityDesc;
+
+    /**
+     * 模型链接
+     */
+    @TableField(exist = false)
+    private String modelLink;
 }

+ 5 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseBuildFacilityType.java

@@ -57,6 +57,11 @@ public class BaseBuildFacilityType implements Serializable {
      */
     private String dataField;
 
+    /**
+     * 模型链接
+     */
+    private String modelLink;
+
     /**
      * 创建人
      */

+ 3 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseBuildPlane.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.time.LocalDateTime;
 import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -50,6 +52,7 @@ public class BaseBuildPlane implements Serializable {
     /**
      * 创建时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime createTime;
 
 

+ 4 - 1
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpDeviceStatus.java

@@ -52,5 +52,8 @@ public class DmpDeviceStatus implements Serializable {
      */
     private LocalDateTime lastOfflineTime;
 
-
+    /**
+     * 产品编码
+     */
+    private String productCode;
 }

+ 8 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseAlarmMapper.java

@@ -3,6 +3,8 @@ package com.usky.iot.mapper;
 import com.usky.iot.domain.BaseAlarm;
 import com.usky.common.mybatis.core.CrudMapper;
 import com.usky.iot.domain.BaseAlarmType;
+import com.usky.iot.domain.DmpDeviceInfo;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -16,4 +18,10 @@ import java.util.List;
  */
 public interface BaseAlarmMapper extends CrudMapper<BaseAlarm> {
     BaseAlarmType getAlarmTypeOne(String alarmType);
+
+    List<DmpDeviceInfo> getDeviceInfoList(@Param("devList") List<String> devList);
+
+    List<BaseAlarm> getUnDeviceAlarmList(@Param("devList") List<String> devList);
+
+    List<BaseAlarm> getDeviceAlarmList(@Param("devList") List<String> devList);
 }

+ 2 - 2
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceStatusMapper.java

@@ -1,6 +1,8 @@
 package com.usky.iot.mapper;
 
 import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.iot.domain.DmpDeviceInfo;
 import com.usky.iot.domain.DmpDeviceStatus;
 import com.usky.iot.service.vo.DmpDataOverviewVO;
 import org.apache.ibatis.annotations.Param;
@@ -45,6 +47,4 @@ public interface DmpDeviceStatusMapper extends CrudMapper<DmpDeviceStatus> {
                                            @Param("tenantId") Integer tenantId);
 
 
-
-
 }

+ 2 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseAlarmService.java

@@ -30,4 +30,6 @@ public interface BaseAlarmService extends CrudService<BaseAlarm> {
     void update(BaseAlarm baseAlarm);
 
     boolean add(BaseAlarm baseAlarm);
+
+    void status();
 }

+ 5 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseBuildPlaneService.java

@@ -1,8 +1,11 @@
 package com.usky.iot.service;
 
+import com.usky.iot.domain.BaseBuild;
 import com.usky.iot.domain.BaseBuildPlane;
 import com.usky.common.mybatis.core.CrudService;
 
+import java.util.List;
+
 /**
  * <p>
  * 建筑楼层平面图 服务类
@@ -12,5 +15,7 @@ import com.usky.common.mybatis.core.CrudService;
  * @since 2023-08-17
  */
 public interface BaseBuildPlaneService extends CrudService<BaseBuildPlane> {
+    void add(BaseBuildPlane baseBuildPlane);
 
+    List<BaseBuildPlane> dataList(Integer buildId,String floor);
 }

+ 2 - 4
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseBuildService.java

@@ -45,11 +45,9 @@ public interface BaseBuildService extends CrudService<BaseBuild> {
     /**
      * 类型设施关联查询
      *
-     * @param id  主键ID
-     * @param floor  所属楼层
-     * @param typeCode  类型编码
+     * @param baseBuildFacilityVO  主键ID
      */
-    List<BaseBuildFacility> typeFacilityInfo(Integer id, String floor, String typeCode);
+    List<BaseBuildFacility> typeFacilityInfo(BaseBuildFacilityVO baseBuildFacilityVO);
 
     /**
      * 建筑关联类型查询

+ 2 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDeviceInfoService.java

@@ -56,4 +56,6 @@ public interface DmpDeviceInfoService extends CrudService<DmpDeviceInfo> {
      * @param dmpDeviceInfoRequest
      */
     void export(DmpDeviceInfoRequest dmpDeviceInfoRequest, HttpServletResponse response);
+
+    CommonPage<Object> deviceCurrentDataList(String deviceName,String installAddress,String productCode,Integer pageNum,Integer pageSize);
 }

+ 0 - 2
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDeviceStatusService.java

@@ -20,6 +20,4 @@ public interface DmpDeviceStatusService extends CrudService<DmpDeviceStatus> {
 
     List<Map<String,Object>> getCollectByProduct(List<Integer> productIds);
 
-    void status();
-
 }

+ 97 - 1
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmServiceImpl.java

@@ -2,9 +2,12 @@ package com.usky.iot.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.backend.client.DataQueryClient;
+import com.usky.backend.domain.StatusVO;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.core.exception.BusinessException;
 import com.usky.common.security.utils.SecurityUtils;
@@ -47,6 +50,12 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
     @Autowired
     private WebSocket webSocket;
 
+    @Autowired
+    private DataQueryClient dataQueryClient;
+
+    @Autowired
+    private DmpDeviceStatusService dmpDeviceStatusService;
+
     @Override
     public CommonPage<BaseAlarmResponeVO> statistic(BaseAlarmRequestVO baseAlarmRequestVO){
 
@@ -297,6 +306,7 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
             LambdaQueryWrapper<DmpDeviceInfo> lambdaQuery2 = Wrappers.lambdaQuery();
             lambdaQuery2.eq(DmpDeviceInfo::getDeviceId,baseAlarm.getDeviceId())
                     .eq(DmpDeviceInfo::getProductCode,baseAlarm.getProductCode())
+                    .eq(DmpDeviceInfo::getServiceStatus,2)
                     .eq(DmpDeviceInfo::getDeleteFlag,0);
             List<DmpDeviceInfo> records2 = dmpDeviceInfoService.list(lambdaQuery2);
             BaseAlarmType baseAlarmType = baseMapper.getAlarmTypeOne(baseAlarm.getAlarmType());
@@ -324,12 +334,98 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
                     return saveResult;
                 }
             }else {
-                throw new BusinessException("告警数据投递失败,请检查产品编码、设备编号、告警类型,是否有误");
+                throw new BusinessException("告警数据投递失败,请检查产品编码、设备编号、告警类型,是否有误;设备是否激活");
             }
         }else {
             throw new BusinessException("告警数据投递失败,请检查产品编码、设备编号、告警类型,不能为空");
         }
     }
+
+    @Override
+    public void status(){
+        List<StatusVO> list = dataQueryClient.status();
+        if(CollectionUtils.isNotEmpty(list)){
+            List<String> devList = new ArrayList<>();
+            for(int i=0;i<list.size();i++){
+                devList.add(list.get(i).getDeviceId());
+            }
+
+            List<DmpDeviceInfo> devInfoList = new ArrayList<>();
+            List<BaseAlarm> baseUnAlarmList = new ArrayList<>();
+//            List<BaseAlarm> baseAlarmList = new ArrayList<>();
+            if(devList.size() > 0) {
+                devInfoList = baseMapper.getDeviceInfoList(devList);
+                baseUnAlarmList = baseMapper.getUnDeviceAlarmList(devList);
+//                baseAlarmList = baseMapper.getDeviceAlarmList(devList);
+            }
+
+            if(CollectionUtils.isNotEmpty(devInfoList)){
+                for(int i=0;i<list.size();i++){
+                    String date =  list.get(i).getTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                    String currentDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                    LambdaUpdateWrapper<DmpDeviceStatus> updateWrapper = Wrappers.lambdaUpdate();
+                    if(date.equals(currentDate)){
+                        updateWrapper.set(DmpDeviceStatus::getDeviceStatus,1)  //设备在线
+                                .set(DmpDeviceStatus::getLastOnlineTime,list.get(i).getTime())
+                                .eq(DmpDeviceStatus::getDeviceId,list.get(i).getDeviceId())
+                                .eq(DmpDeviceStatus::getProductCode,list.get(i).getProductCode());
+                        //设备离线告警恢复在线自动默认处理
+                        if(CollectionUtils.isNotEmpty(baseUnAlarmList)){
+                            for(int j=0;j<baseUnAlarmList.size();j++){
+                                if(list.get(i).getDeviceId().equals(baseUnAlarmList.get(j).getDeviceId()) && list.get(i).getProductCode().equals(baseUnAlarmList.get(j).getProductCode())){
+                                    LambdaUpdateWrapper<BaseAlarm> updateWrapper1 = Wrappers.lambdaUpdate();
+                                    updateWrapper1.set(BaseAlarm::getHandleStatus,1)
+                                            .set(BaseAlarm::getHandleBy,"YT_admin")
+                                            .set(BaseAlarm::getHandleTime,LocalDateTime.now())
+                                            .eq(BaseAlarm::getDeviceId,list.get(i).getDeviceId())
+                                            .eq(BaseAlarm::getHandleStatus,0)
+                                            .eq(BaseAlarm::getProductCode,list.get(i).getProductCode());
+                                    this.update(updateWrapper1);
+                                    break;
+                                }
+                            }
+                        }
+
+                    }else{
+                        updateWrapper.set(DmpDeviceStatus::getDeviceStatus,2)  //设备离线
+                                .set(DmpDeviceStatus::getLastOfflineTime,list.get(i).getTime())
+                                .eq(DmpDeviceStatus::getDeviceId,list.get(i).getDeviceId())
+                                .eq(DmpDeviceStatus::getProductCode,list.get(i).getProductCode());
+
+                        for(int j=0;j<devInfoList.size();j++){
+                            if(list.get(i).getDeviceId().equals(devInfoList.get(j).getDeviceId()) && list.get(i).getProductCode().equals(devInfoList.get(j).getProductCode())){
+                                int count = 0;
+                                for(int k=0;k<baseUnAlarmList.size();k++){
+                                    if(list.get(i).getDeviceId().equals(baseUnAlarmList.get(k).getDeviceId()) && list.get(i).getProductCode().equals(baseUnAlarmList.get(k).getProductCode())){
+                                        count++;
+                                    }
+                                }
+                                if(count == 0){
+                                    BaseAlarm baseAlarm = new BaseAlarm();
+                                    baseAlarm.setDeviceId(list.get(i).getDeviceId());
+                                    baseAlarm.setAlarmTime(LocalDateTime.parse(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH"))+":00:00",DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                                    baseAlarm.setAlarmType("001");
+                                    baseAlarm.setAlarmObject(devInfoList.get(j).getDeviceName());
+                                    baseAlarm.setAlarmData("");
+                                    baseAlarm.setAlarmAttribute("离线告警");
+                                    baseAlarm.setAlarmContent("设备离线告警");
+                                    baseAlarm.setAlarmGrade(1);
+
+                                    baseAlarm.setAlarmAddress(devInfoList.get(j).getInstallAddress());
+                                    baseAlarm.setProductCode(devInfoList.get(j).getProductCode());
+                                    this.add(baseAlarm);
+                                }
+                                break;
+                            }
+                        }
+
+                    }
+                    dmpDeviceStatusService.update(updateWrapper);
+                }
+            }
+
+        }
+    }
 }
 
 

+ 30 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseBuildPlaneServiceImpl.java

@@ -1,11 +1,24 @@
 package com.usky.iot.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.iot.domain.BaseBuild;
+import com.usky.iot.domain.BaseBuildFacilityRelate;
 import com.usky.iot.domain.BaseBuildPlane;
 import com.usky.iot.mapper.BaseBuildPlaneMapper;
 import com.usky.iot.service.BaseBuildPlaneService;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.Calendar;
+import java.util.List;
+
 /**
  * <p>
  * 建筑楼层平面图 服务实现类
@@ -17,4 +30,21 @@ import org.springframework.stereotype.Service;
 @Service
 public class BaseBuildPlaneServiceImpl extends AbstractCrudService<BaseBuildPlaneMapper, BaseBuildPlane> implements BaseBuildPlaneService {
 
+    @Override
+    public void add(BaseBuildPlane baseBuildPlane){
+        baseBuildPlane.setCreateBy(SecurityUtils.getUsername());
+        baseBuildPlane.setCreateTime(LocalDateTime.now());
+        this.save(baseBuildPlane);
+
+    }
+
+    @Override
+    public List<BaseBuildPlane> dataList(Integer buildId,String floor){
+        LambdaQueryWrapper<BaseBuildPlane> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper
+                .eq(!ObjectUtils.isEmpty(buildId),BaseBuildPlane::getBuildId,buildId)
+                .eq(StringUtils.isNotBlank(floor),BaseBuildPlane::getFloor,floor);
+        List<BaseBuildPlane> list = this.list(queryWrapper);
+        return list;
+    }
 }

+ 40 - 9
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseBuildServiceImpl.java

@@ -130,6 +130,8 @@ public class BaseBuildServiceImpl extends AbstractCrudService<BaseBuildMapper, B
         LambdaQueryWrapper<BaseGgpFacility> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.like(StringUtils.isNotBlank(requestVO.getFacilityNum()),BaseGgpFacility::getFacilityNum,requestVO.getFacilityNum())
                 .eq(StringUtils.isNotBlank(requestVO.getFacilityType()),BaseGgpFacility::getFacilityType,requestVO.getFacilityType())
+                .like(StringUtils.isNotBlank(requestVO.getFacilityName()),BaseGgpFacility::getFacilityType,
+                        requestVO.getFacilityName())
                 .eq(BaseGgpFacility::getTenantId,SecurityUtils.getTenantId());
         page = baseGgpFacilityService.page(page,queryWrapper);
         if(CollectionUtils.isNotEmpty(page.getRecords())){
@@ -151,10 +153,11 @@ public class BaseBuildServiceImpl extends AbstractCrudService<BaseBuildMapper, B
 
                 if(page.getRecords().get(i).getId().equals(buildFacilityId)){
                     responeVO.setStatus(1);
+                    list.add(0, responeVO);
                 }else{
                     responeVO.setStatus(0);
+                    list.add(responeVO);
                 }
-                list.add(responeVO);
             }
         }
         return new CommonPage<>(list,page.getTotal(),page.getSize(),page.getCurrent());
@@ -215,6 +218,8 @@ public class BaseBuildServiceImpl extends AbstractCrudService<BaseBuildMapper, B
                     .in(CollectionUtils.isNotEmpty(baseBuildFacilityVO.getFacilityType()),"facility_type",
                             baseBuildFacilityVO.getFacilityType())
                     .eq("delete_flag",0)
+                    .eq(StringUtils.isNotBlank(baseBuildFacilityVO.getFloor()),"floor",
+                            baseBuildFacilityVO.getFloor())
                     .groupBy("floor","facility_type");
             List<Map<String, Object>> baseBuildFacilityList1 = baseBuildFacilityService.listMaps(query2);
             QueryWrapper<BaseBuildFacility> query3 = Wrappers.query();
@@ -223,6 +228,8 @@ public class BaseBuildServiceImpl extends AbstractCrudService<BaseBuildMapper, B
                     .in(CollectionUtils.isNotEmpty(baseBuildFacilityVO.getFacilityType()),"facility_type",
                             baseBuildFacilityVO.getFacilityType())
                     .eq("delete_flag",0)
+                    .eq(StringUtils.isNotBlank(baseBuildFacilityVO.getFloor()),"floor",
+                            baseBuildFacilityVO.getFloor())
                     .groupBy("floor");
             List<Map<String, Object>> baseBuildFacilityList2 = baseBuildFacilityService.listMaps(query3);
             QueryWrapper<BaseBuildFacility> query4 = Wrappers.query();
@@ -231,6 +238,8 @@ public class BaseBuildServiceImpl extends AbstractCrudService<BaseBuildMapper, B
                     .in(CollectionUtils.isNotEmpty(baseBuildFacilityVO.getFacilityType()),"facility_type",
                             baseBuildFacilityVO.getFacilityType())
                     .eq("delete_flag",0)
+                    .eq(StringUtils.isNotBlank(baseBuildFacilityVO.getFloor()),"floor",
+                            baseBuildFacilityVO.getFloor())
                     .groupBy("facility_type");
             List<Map<String, Object>> baseBuildFacilityList3 = baseBuildFacilityService.listMaps(query4);
             List<String> facilityTypeList = new ArrayList<>();
@@ -258,6 +267,7 @@ public class BaseBuildServiceImpl extends AbstractCrudService<BaseBuildMapper, B
                                     for (int m = 0; m < baseBuildFacilityType.size(); m++) {
                                         if (baseBuildFacilityList1.get(k).get("facilityType").equals(baseBuildFacilityType.get(m).getTypeCode())){
                                             map2.put("typeImg", baseBuildFacilityType.get(m).getTypeImg());
+                                            map2.put("typeName", baseBuildFacilityType.get(m).getTypeName());
                                         }
                                     }
                                 }
@@ -276,22 +286,43 @@ public class BaseBuildServiceImpl extends AbstractCrudService<BaseBuildMapper, B
     }
 
     @Override
-    public List<BaseBuildFacility> typeFacilityInfo(Integer id, String floor, String typeCode) {
+    public List<BaseBuildFacility> typeFacilityInfo(BaseBuildFacilityVO baseBuildFacilityVO) {
         LambdaQueryWrapper<BaseBuildFacilityRelate> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.eq(BaseBuildFacilityRelate::getBuildId,id);
+        queryWrapper.eq(BaseBuildFacilityRelate::getBuildId,baseBuildFacilityVO.getId());
         List<BaseBuildFacilityRelate> baseBuildFacilityList = baseBuildFacilityRelateService.list(queryWrapper);
         List<Integer> facilityIdList = new ArrayList<>();
+        List<String> facilityCodeList = new ArrayList<>();
+        List<BaseBuildFacility> list = new ArrayList<>();
         if (CollectionUtils.isNotEmpty(baseBuildFacilityList)) {
             for (int i = 0; i < baseBuildFacilityList.size(); i++) {
                 facilityIdList.add(baseBuildFacilityList.get(i).getFacilityId());
             }
+            LambdaQueryWrapper<BaseBuildFacility> queryWrapper1 = Wrappers.lambdaQuery();
+            queryWrapper1.in(BaseBuildFacility::getId,facilityIdList)
+                    .in(CollectionUtils.isNotEmpty(baseBuildFacilityVO.getFacilityType()),BaseBuildFacility::getFacilityType,baseBuildFacilityVO.getFacilityType())
+                    .eq(StringUtils.isNotBlank(baseBuildFacilityVO.getFloor()),BaseBuildFacility::getFloor,baseBuildFacilityVO.getFloor())
+                    .eq(BaseBuildFacility::getDeleteFlag,0);
+            list = baseBuildFacilityService.list(queryWrapper1);
+            if (CollectionUtils.isNotEmpty(list)){
+                for (int j = 0; j < list.size(); j++) {
+                    if (!facilityCodeList.contains(list.get(j).getFacilityType())) {
+                        facilityCodeList.add(list.get(j).getFacilityType());
+                    }
+                }
+                LambdaQueryWrapper<BaseBuildFacilityType> queryWrapper2 = Wrappers.lambdaQuery();
+                queryWrapper2.in(BaseBuildFacilityType::getTypeCode,facilityCodeList);
+                List<BaseBuildFacilityType> typeList = baseBuildFacilityTypeService.list(queryWrapper2);
+                if (CollectionUtils.isNotEmpty(typeList)){
+                    for (int k = 0; k < list.size(); k++) {
+                        for (int l = 0; l < typeList.size(); l++) {
+                            if (list.get(k).getFacilityType().equals(typeList.get(l).getTypeCode())){
+                                list.get(k).setModelLink(typeList.get(l).getModelLink());
+                            }
+                        }
+                    }
+                }
+            }
         }
-        LambdaQueryWrapper<BaseBuildFacility> queryWrapper1 = Wrappers.lambdaQuery();
-        queryWrapper1.in(BaseBuildFacility::getId,facilityIdList)
-                .eq(BaseBuildFacility::getFacilityType,typeCode)
-                .eq(BaseBuildFacility::getFloor,floor)
-                .eq(BaseBuildFacility::getDeleteFlag,0);
-        List<BaseBuildFacility> list = baseBuildFacilityService.list(queryWrapper1);
         return list;
     }
 

+ 76 - 64
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseGgpFacilityServiceImpl.java

@@ -321,7 +321,8 @@ public class BaseGgpFacilityServiceImpl extends AbstractCrudService<BaseGgpFacil
             map.put("buildId", baseFacilityBuildList.get(0).getId());
         }
         LambdaQueryWrapper<DmpProductInfo> queryWrapper2 = Wrappers.lambdaQuery();
-        queryWrapper2.eq(DmpProductInfo::getTenantId,SecurityUtils.getTenantId());
+        queryWrapper2.eq(DmpProductInfo::getTenantId,SecurityUtils.getTenantId())
+                .eq(DmpProductInfo::getDeleteFlag,0);
         List<DmpProductInfo> dmpProductInfoList = dmpProductInfoService.list(queryWrapper2);
         if (CollectionUtils.isNotEmpty(baseFacilityDeviceList)) {
             List<String> deviceIdList = new ArrayList<>();
@@ -419,80 +420,91 @@ public class BaseGgpFacilityServiceImpl extends AbstractCrudService<BaseGgpFacil
         return list;
     }
 
-//    @Override
-//    public void facilityImport(MultipartFile multipartFile) {
-//        ImportParams params = new ImportParams();
-//        params.setHeadRows(1);
-//        params.setTitleRows(1);
-//        String err="文件导入失败";
-//        try {
-//            List<FacilityImportVo> facilityImportVos = ExcelImportUtil.importExcel(multipartFile.getInputStream(),
-//                    FacilityImportVo.class, params);
-//            if (CollectionUtils.isNotEmpty(facilityImportVos)){
-//                int rot=0;
-//                for (FacilityImportVo facilityImportVo:facilityImportVos) {
-//                    BaseGgpFacility baseGgpFacility = BeanMapperUtils.map(facilityImportVo, BaseGgpFacility.class);
-//                    if (StringUtils.isBlank(baseGgpFacility.getFacilityType())||StringUtils.isBlank(baseGgpFacility.getFacilityName())||StringUtils.isBlank(baseGgpFacility.getAddress())||StringUtils.isBlank(baseGgpFacility.getLatitude())||StringUtils.isBlank(baseGgpFacility.getLongitude())){
-//                        int h=rot+3;
-//                        err="文件导入失败,第"+h+"行数据导入失败,必填字段不能为空";
-//                        throw  new BusinessException(err);
-//                    }
-//                    try{
-//                        this.add(baseGgpFacility);
-//                    }catch (Exception e){
-//                        int h=rot+3;
-//                        err="文件导入失败,第"+h+"行数据导入失败";
-//                        throw  new BusinessException(err);
-//                    }
-//                    rot++;
-//                }
-//            }else {
-//                err="文件不能为空";
-//                throw new BusinessException(err);
-//            }
-//        }catch (Exception e){
-//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-//            throw  new BusinessException(err);
-//        }
-//    }
-
     @Override
     public void facilityImport(MultipartFile multipartFile) {
-        String FILE_IMPORT_FAILED = "文件导入失败";
-        String FILE_EMPTY = "文件不能为空";
-        String ROW_IMPORT_FAILED = "第%d行数据导入失败";
-
         ImportParams params = new ImportParams();
         params.setHeadRows(1);
         params.setTitleRows(1);
-
-        try (InputStream inputStream = multipartFile.getInputStream()) {
-            List<BaseGgpFacility> facilityList = new ArrayList<>();
-            List<FacilityImportVo> facilityImportVos = ExcelImportUtil.importExcel(inputStream, FacilityImportVo.class, params);
-            if (CollectionUtils.isEmpty(facilityImportVos)) {
-                throw new BusinessException(FILE_EMPTY);
-            }
-
-            for (int i = 0; i < facilityImportVos.size(); i++) {
-                FacilityImportVo facilityImportVo = facilityImportVos.get(i);
-                BaseGgpFacility baseGgpFacility = BeanMapperUtils.map(facilityImportVo, BaseGgpFacility.class);
-                if (isBlank(baseGgpFacility.getFacilityType()) || isBlank(baseGgpFacility.getFacilityName()) || isBlank(baseGgpFacility.getAddress()) || isBlank(baseGgpFacility.getLatitude()) || isBlank(baseGgpFacility.getLongitude())) {
-                    throw new BusinessException(String.format(ROW_IMPORT_FAILED, i + 1));
+        String err="文件导入失败";
+        try {
+            List<FacilityImportVo> facilityImportVos = ExcelImportUtil.importExcel(multipartFile.getInputStream(),
+                    FacilityImportVo.class, params);
+            if (CollectionUtils.isNotEmpty(facilityImportVos)){
+                int rot=0;
+                for (FacilityImportVo facilityImportVo:facilityImportVos) {
+                    BaseGgpFacility baseGgpFacility = BeanMapperUtils.map(facilityImportVo, BaseGgpFacility.class);
+                    if (StringUtils.isBlank(baseGgpFacility.getFacilityType())||StringUtils.isBlank(baseGgpFacility.getFacilityName())||StringUtils.isBlank(baseGgpFacility.getAddress())||StringUtils.isBlank(baseGgpFacility.getLatitude())||StringUtils.isBlank(baseGgpFacility.getLongitude())){
+                        int h=rot+3;
+                        err="文件导入失败,第"+h+"行数据导入失败,必填字段不能为空";
+                        throw  new BusinessException(err);
+                    }
+                    try{
+                        this.add(baseGgpFacility);
+                    }catch (Exception e){
+                        int h=rot+3;
+                        err="文件导入失败,第"+h+"行数据导入失败";
+                        throw  new BusinessException(err);
+                    }
+                    rot++;
                 }
-                facilityList.add(baseGgpFacility);
-            }
-            try {
-                this.saveBatch(facilityList);
-            } catch (Exception e) {
-                throw new BusinessException(FILE_IMPORT_FAILED);
+            }else {
+                err="文件不能为空";
+                throw new BusinessException(err);
             }
-        } catch (Exception e) {
-            log.error("文件导入失败", e);
+        }catch (Exception e){
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-            throw new BusinessException(FILE_IMPORT_FAILED);
+            throw  new BusinessException(err);
         }
     }
 
+//    @Override
+//    public void facilityImport(MultipartFile multipartFile) {
+//        String FILE_IMPORT_FAILED = "文件导入失败";
+//        String FILE_EMPTY = "文件不能为空";
+//        String ROW_IMPORT_FAILED = "第%d行数据导入失败";
+//
+//        ImportParams params = new ImportParams();
+//        params.setHeadRows(1);
+//        params.setTitleRows(1);
+//
+//        try (InputStream inputStream = multipartFile.getInputStream()) {
+//            List<BaseGgpFacility> facilityList = new ArrayList<>();
+//            List<FacilityImportVo> facilityImportVos = ExcelImportUtil.importExcel(inputStream, FacilityImportVo.class, params);
+//            if (CollectionUtils.isEmpty(facilityImportVos)) {
+//                throw new BusinessException(FILE_EMPTY);
+//            }
+//
+//            for (int i = 0; i < facilityImportVos.size(); i++) {
+//                FacilityImportVo facilityImportVo = facilityImportVos.get(i);
+//                BaseGgpFacility baseGgpFacility = BeanMapperUtils.map(facilityImportVo, BaseGgpFacility.class);
+//                if (isBlank(baseGgpFacility.getFacilityType()) || isBlank(baseGgpFacility.getFacilityName()) || isBlank(baseGgpFacility.getAddress()) || isBlank(baseGgpFacility.getLatitude()) || isBlank(baseGgpFacility.getLongitude())) {
+//                    throw new BusinessException(String.format(ROW_IMPORT_FAILED, i + 1));
+//                }
+//                Calendar cal1 = Calendar.getInstance();
+//                Date date = cal1.getTime();
+//                List<BaseFacilityType> typeList = baseFacilityTypeMapper.typeList(baseGgpFacility.getFacilityType());
+//                if (CollectionUtils.isEmpty(typeList)) {
+//                    String FILE_TYPE_ERROR = "设施类型有误";
+//                    throw new BusinessException(FILE_TYPE_ERROR);
+//                }
+//                baseGgpFacility.setFacilityNum(typeList.get(0).getTypeAbbrevia()+'-'+new SimpleDateFormat("yyyyMMddHHmmssSSS").format(date));
+//                baseGgpFacility.setCreator(SecurityUtils.getUsername());
+//                baseGgpFacility.setCreateTime(LocalDateTime.now());
+//                baseGgpFacility.setTenantId(SecurityUtils.getTenantId());
+//                facilityList.add(baseGgpFacility);
+//            }
+//            try {
+//                this.saveBatch(facilityList);
+//            } catch (Exception e) {
+//                throw new BusinessException(FILE_IMPORT_FAILED);
+//            }
+//        } catch (Exception e) {
+//            log.error("文件导入失败", e);
+//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//            throw new BusinessException(FILE_IMPORT_FAILED);
+//        }
+//    }
+
     private boolean isBlank(String str) {
         return StringUtils.isBlank(str) || StringUtils.isBlank(str.trim());
     }

+ 72 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceInfoServiceImpl.java

@@ -15,6 +15,8 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.usky.backend.client.DeviceDataClient;
+import com.usky.backend.domain.response.DataRealTimeResponseVO;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.core.exception.BusinessException;
 import com.usky.common.core.util.BeanMapperUtils;
@@ -37,6 +39,7 @@ import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -56,6 +59,9 @@ public class DmpDeviceInfoServiceImpl extends AbstractCrudService<DmpDeviceInfoM
     @Autowired
     private BaseFacilityDeviceService baseFacilityDeviceService;
 
+    @Autowired
+    private DeviceDataClient deviceDataClient;
+
     @Override
     public void add(DmpDeviceInfo dmpDeviceInfo) {
         if (checkNameUnique(dmpDeviceInfo)){
@@ -76,6 +82,7 @@ public class DmpDeviceInfoServiceImpl extends AbstractCrudService<DmpDeviceInfoM
             dmpDeviceStatus.setProductId(dmpDeviceInfo.getProductId());
             dmpDeviceStatus.setDeviceStatus(2);
             dmpDeviceStatus.setLastOfflineTime(LocalDateTime.now());
+            dmpDeviceStatus.setProductCode(dmpDeviceInfo.getProductCode());
             dmpDeviceStatusService.save(dmpDeviceStatus);
         }else{
             throw new BusinessException("新增设备信息'" + dmpDeviceInfo.getDeviceId() + "'失败,无对应产品信息");
@@ -280,6 +287,7 @@ public class DmpDeviceInfoServiceImpl extends AbstractCrudService<DmpDeviceInfoM
                 dmpDeviceStatus.setProductId(devList.get(i).getProductId());
                 dmpDeviceStatus.setDeviceStatus(2);
                 dmpDeviceStatus.setLastOfflineTime(LocalDateTime.now());
+                dmpDeviceStatus.setProductCode(devList.get(i).getProductCode());
                 dmpDeviceStatusList.add(dmpDeviceStatus);
             }else{
                 throw new BusinessException("新增设备信息'" + devList.get(i).getDeviceId() + "'失败,无对应产品信息");
@@ -388,4 +396,68 @@ public class DmpDeviceInfoServiceImpl extends AbstractCrudService<DmpDeviceInfoM
             throw new BusinessException("解析表格异常,检查表格格式"+e.getMessage());
         }
     }
+
+    @Override
+    public CommonPage<Object> deviceCurrentDataList(String deviceName,String installAddress,String productCode,Integer pageNum,Integer pageSize){
+        List<Object> list = new ArrayList<>();
+
+        List<DmpDeviceInfo> devList = new ArrayList<>();
+        LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(DmpDeviceInfo::getDeleteFlag,0)
+                .eq(DmpDeviceInfo::getTenantId, SecurityUtils.getTenantId())
+                .like(StringUtils.isNotBlank(deviceName),DmpDeviceInfo::getDeviceName,deviceName)
+                .like(StringUtils.isNotBlank(installAddress),DmpDeviceInfo::getInstallAddress,installAddress)
+                .eq(DmpDeviceInfo::getProductCode,productCode)
+                .orderByAsc(DmpDeviceInfo::getId);
+        devList = this.list(queryWrapper);
+        if(devList.size() <=0){
+            return new CommonPage<>(list,0,pageNum,pageSize);
+        }
+
+        if(devList.size()>0){
+            List<String> deviceList = new ArrayList<>();
+            for(int k=0;k<devList.size();k++){
+                deviceList.add(devList.get(k).getDeviceId());
+            }
+
+            if(deviceList.size() > 0){
+                List<DataRealTimeResponseVO> dataRealList = deviceDataClient.data(productCode,deviceList);
+                if(dataRealList.size() > 0){
+                    for(int i=0;i<devList.size();i++){
+                        Map<String,Object> map = new HashMap<>();
+                        map.put("deviceId",devList.get(i).getDeviceId());
+                        map.put("deviceName",devList.get(i).getDeviceName());
+                        map.put("installAddress",devList.get(i).getInstallAddress());
+                        map.put("latestTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+
+                        for(int j=0;j<dataRealList.size();j++){
+                            if(devList.get(i).getProductCode().equals(dataRealList.get(j).getProductCode()) && devList.get(i).getDeviceId().equals(dataRealList.get(j).getDeviceId())){
+                                map.put(dataRealList.get(j).getAttributeName(),dataRealList.get(j).getAttributeData());
+                                map.put(dataRealList.get(j).getAttributeName()+"Time",dataRealList.get(j).getDataTime());
+                            }
+
+                        }
+                        list.add(map);
+
+                    }
+                }
+
+            }
+        }
+
+        List<Object> objectList = new ArrayList<>();
+        int total = 0;
+        if(list.size() > 0){
+            total = list.size();
+        }
+        int current = 0;
+        if(pageNum != 0 && pageSize > 0){
+            current = (pageNum - 1)*pageSize;
+        }
+
+        objectList = list.stream().skip(current).limit(pageSize).collect(Collectors.toList());
+
+
+        return new CommonPage<>(objectList,total,pageNum,pageSize);
+    }
 }

+ 5 - 26
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceStatusServiceImpl.java

@@ -8,8 +8,12 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.usky.backend.client.DataQueryClient;
 import com.usky.backend.domain.StatusVO;
 import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.iot.domain.BaseAlarm;
+import com.usky.iot.domain.DmpDeviceInfo;
 import com.usky.iot.domain.DmpDeviceStatus;
 import com.usky.iot.mapper.DmpDeviceStatusMapper;
+import com.usky.iot.service.BaseAlarmService;
 import com.usky.iot.service.DmpDeviceStatusService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -17,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -31,10 +36,6 @@ import java.util.Map;
 @Service
 public class DmpDeviceStatusServiceImpl extends AbstractCrudService<DmpDeviceStatusMapper, DmpDeviceStatus> implements DmpDeviceStatusService {
 
-
-    @Autowired
-    private DataQueryClient dataQueryClient;
-
     @Override
     public List<Map<String, Object>> getCollectByProduct(List<Integer> productIds) {
         QueryWrapper<DmpDeviceStatus> query = Wrappers.query();
@@ -43,26 +44,4 @@ public class DmpDeviceStatusServiceImpl extends AbstractCrudService<DmpDeviceSta
                 .groupBy("product_id");
         return this.listMaps(query);
     }
-
-    @Override
-    public void status(){
-        List<StatusVO> list = dataQueryClient.status();
-        if(CollectionUtils.isNotEmpty(list)){
-            for(int i=0;i<list.size();i++){
-                String date =  list.get(i).getTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-                String currentDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-                LambdaUpdateWrapper<DmpDeviceStatus> updateWrapper = Wrappers.lambdaUpdate();
-                if(date.equals(currentDate)){
-                    updateWrapper.set(DmpDeviceStatus::getDeviceStatus,1)
-                            .set(DmpDeviceStatus::getLastOnlineTime,list.get(i).getTime())
-                            .eq(DmpDeviceStatus::getDeviceId,list.get(i).getDeviceId());
-                }else{
-                    updateWrapper.set(DmpDeviceStatus::getDeviceStatus,2)
-                            .set(DmpDeviceStatus::getLastOfflineTime,list.get(i).getTime())
-                            .eq(DmpDeviceStatus::getDeviceId,list.get(i).getDeviceId());
-                }
-                this.update(updateWrapper);
-            }
-        }
-    }
 }

+ 5 - 3
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/listener/MqttListener.java

@@ -5,7 +5,8 @@ import com.usky.iot.service.config.mqtt.MqttInConfig;
 import com.usky.iot.service.enums.TopListener;
 import com.usky.iot.service.mqtt.SimpleContext;
 import com.usky.iot.service.vo.MqttBaseVO;
-import lombok.extern.slf4j.Slf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Bean;
@@ -18,11 +19,11 @@ import org.springframework.stereotype.Component;
  * @date 2021/11/3 8:13
  */
 @ConditionalOnProperty(prefix = "mqtt", value = {"enabled"}, havingValue = "true")
-@Slf4j
 @Component
 public class MqttListener {
 
     public static final String MESSAGE_NAME = "messageInput";
+    private static final Logger logger = LoggerFactory.getLogger(MqttListener.class);
 
     @Autowired
     private SimpleContext simpleContext;
@@ -44,12 +45,13 @@ public class MqttListener {
                 String topic = mqttReceivedTopic.toString();
                 MqttBaseVO mqttBaseVO = new MqttBaseVO();
                 mqttBaseVO.setTopic(topic);
-                if((topic.indexOf(infoCode1[2]) != -1 && topic.indexOf(infoCode1[5]) != -1)) {
+                if((topic.indexOf(infoCode1[1]) != -1 && topic.indexOf(infoCode1[4]) != -1)) {
                     mqttBaseVO.setDescribe("control");
                     mqttBaseVO.setData(payload);
                 }
                 //统一处理数据
                 simpleContext.getResource(mqttBaseVO);
+                logger.info("接收到 mqtt消息,主题:{} 消息:{}", topic, payload);
             }
         };
     }

+ 1 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/BaseBuildFacilityVO.java

@@ -19,4 +19,5 @@ public class BaseBuildFacilityVO {
 
         private List<String> facilityType;
 
+        private String floor;
 }

+ 5 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/BuildFacilityRelateRequestVO.java

@@ -23,6 +23,11 @@ public class BuildFacilityRelateRequestVO {
      */
     private String facilityNum;
 
+    /**
+     * 设施名称
+     */
+    private String facilityName;
+
     /**
      * 设施类型编码
      */

+ 45 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/BaseAlarmMapper.xml

@@ -37,4 +37,49 @@
             </if>
         </where>
     </select>
+    <select id="getDeviceInfoList" resultType="com.usky.iot.domain.DmpDeviceInfo">
+        select ddi.*
+        from dmp_device ddi
+        <where>
+            <if test="1 == 1">
+                and delete_flag = 0
+            </if>
+            <if test="1 == 1">
+                and device_id in
+                <foreach item="item" collection="devList" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
+    <select id="getUnDeviceAlarmList" resultType="com.usky.iot.domain.BaseAlarm">
+        select distinct device_id as deviceId,product_code as productCode
+        from base_alarm ddi
+        <where>
+            <if test="1 == 1">
+                and handle_status = 0
+            </if>
+            <if test="1 == 1">
+                and device_id in
+                <foreach item="item" collection="devList" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
+    <select id="getDeviceAlarmList" resultType="com.usky.iot.domain.BaseAlarm">
+        select distinct device_id as deviceId,product_code as productCode
+        from base_alarm ddi
+        <where>
+            <if test="1 == 1">
+                and handle_status = 1
+            </if>
+            <if test="1 == 1">
+                and device_id in
+                <foreach item="item" collection="devList" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
 </mapper>

+ 2 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/BaseBuildFacilityMapper.xml

@@ -14,6 +14,8 @@
         <result column="device_id" property="deviceId" />
         <result column="contact" property="contact" />
         <result column="contact_phone" property="contactPhone" />
+        <result column="plane_x" property="planeX" />
+        <result column="plane_y" property="planeY" />
         <result column="coordinate_x" property="coordinateX" />
         <result column="coordinate_y" property="coordinateY" />
         <result column="coordinate_z" property="coordinateZ" />

+ 1 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/BaseBuildFacilityTypeMapper.xml

@@ -11,6 +11,7 @@
         <result column="type_img" property="typeImg" />
         <result column="type_desc" property="typeDesc" />
         <result column="data_field" property="dataField" />
+        <result column="model_link" property="modelLink" />
         <result column="create_by" property="createBy" />
         <result column="create_time" property="createTime" />
         <result column="update_by" property="updateBy" />

+ 5 - 4
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDeviceStatusMapper.xml

@@ -10,6 +10,7 @@
         <result column="device_status" property="deviceStatus" />
         <result column="last_online_time" property="lastOnlineTime" />
         <result column="last_offline_time" property="lastOfflineTime" />
+        <result column="product_code" property="productCode" />
     </resultMap>
 
     <select id="getAllCollect" resultType="com.usky.iot.service.vo.DmpDataOverviewVO">
@@ -22,7 +23,7 @@
         count(device_status = 2 or null) as dlxCount
         from dmp_device ddi
         left join dmp_device_status dds
-        on ddi.device_id  = dds.device_id
+        on ddi.device_id  = dds.device_id and ddi.product_code = dds.product_code
         <where>
             <if test="startTime != null and endTime != null">
                 and  ddi.created_time between #{startTime}
@@ -41,7 +42,7 @@
         count(*) hyCount
         from dmp_device ddi
         left join dmp_device_status dds
-        on ddi.device_id  = dds.device_id
+        on ddi.device_id  = dds.device_id and ddi.product_code = dds.product_code
         <where>
             <if test="startTime != null and endTime != null">
                 and  dds.last_online_time between #{startTime}
@@ -61,7 +62,7 @@
         count(*) hyCount
         from dmp_device ddi
         left join dmp_device_status dds
-        on ddi.device_id  = dds.device_id
+        on ddi.device_id  = dds.device_id and ddi.product_code = dds.product_code
         <where>
             <if test="startTime != null and endTime != null">
                 and  dds.last_online_time between #{startTime}
@@ -85,7 +86,7 @@
         count(device_status = 2 or null) as dlxCount
         from dmp_device ddi
         left join dmp_device_status dds
-        on ddi.device_id  = dds.device_id
+        on ddi.device_id  = dds.device_id and ddi.product_code = dds.product_code
         <where>
             <if test="startTime != null and endTime != null">
                 and  ddi.created_time between #{startTime}