Selaa lähdekoodia

'1、设备基础实时数据表和每个设备类型历史数据表增加product_code产品编码字段,以及设备状态表中新增product_code产品编码字段,保证每个产品编码下面设备Id是唯一确定的;2、开发数据中心-设备最新一条心跳数据查询接口;'

james 1 vuosi sitten
vanhempi
commit
1d871331f6
37 muutettua tiedostoa jossa 434 lisäystä ja 124 poistoa
  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. 3 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DeviceHttpController.java
  24. 19 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDeviceInfoController.java
  25. 3 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/TaskController.java
  26. 4 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpDeviceStatus.java
  27. 8 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseAlarmMapper.java
  28. 2 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceStatusMapper.java
  29. 2 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseAlarmService.java
  30. 2 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDeviceInfoService.java
  31. 0 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDeviceStatusService.java
  32. 97 4
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmServiceImpl.java
  33. 72 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceInfoServiceImpl.java
  34. 5 26
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceStatusServiceImpl.java
  35. 5 3
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/listener/MqttListener.java
  36. 45 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/BaseAlarmMapper.xml
  37. 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" />

+ 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分执行

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

+ 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 - 4
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmServiceImpl.java

@@ -2,19 +2,19 @@ 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;
 import com.usky.iot.domain.*;
 import com.usky.iot.mapper.BaseAlarmMapper;
-import com.usky.iot.service.BaseAlarmService;
+import com.usky.iot.service.*;
 import com.usky.common.mybatis.core.AbstractCrudService;
-import com.usky.iot.service.BaseFacilityDeviceService;
-import com.usky.iot.service.DmpDeviceInfoService;
-import com.usky.iot.service.DmpProductInfoService;
 import com.usky.iot.service.config.websocket.WebSocket;
 import com.usky.iot.service.vo.BaseAlarmListVO;
 import com.usky.iot.service.vo.BaseAlarmRequestVO;
@@ -23,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -49,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){
 
@@ -322,6 +329,92 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
             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);
+                }
+            }
+
+        }
+    }
 }
 
 

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

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

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