Преглед изворни кода

Merge remote-tracking branch 'origin/master'

liuyaowen пре 1 година
родитељ
комит
b0427d3b4b
22 измењених фајлова са 1029 додато и 440 уклоњено
  1. 1 1
      src/main/java/com/yunfeiyun/agmp/iotm/device/common/domin/IotDeviceDataListReqVo.java
  2. 11 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/common/domin/IotDeviceExportReqVo.java
  3. 1 1
      src/main/java/com/yunfeiyun/agmp/iotm/device/common/service/impl/IotDeviceRefreshServiceImpl.java
  4. 9 10
      src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/controller/IotDeviceQxzController.java
  5. 0 41
      src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/domain/IotDeviceQxzDataListReqVo.java
  6. 7 7
      src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/service/IIotYfQxzCommService.java
  7. 2 2
      src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/service/impl/IotXphYfQxzMqttServiceImpl.java
  8. 2 2
      src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/service/impl/IotYfQxzServiceImpl.java
  9. 0 375
      src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/service/impl/IotYfQxzServiceImplbackup.java
  10. 234 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/scd/controller/IotDeviceScdController.java
  11. 9 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/scd/domain/IotScdClearPestDto.java
  12. 29 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/scd/domain/IotScdConfig.java
  13. 11 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/scd/domain/IotScdConfigEditReqVo.java
  14. 89 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/scd/domain/IotYfFxsScdDataExportVo.java
  15. 100 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/scd/domain/IotYfScdDataExportVo.java
  16. 16 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/scd/domain/IotYfScdPolylineResVo.java
  17. 39 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/scd/domain/IotYfScdStatusExportVo.java
  18. 12 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/scd/service/IIotScdCommService.java
  19. 444 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/scd/service/impl/IotYfScdServiceImpl.java
  20. 2 0
      src/main/java/com/yunfeiyun/agmp/iotm/web/service/IIotDeviceconfigService.java
  21. 1 0
      src/main/java/com/yunfeiyun/agmp/iotm/web/service/impl/IotCmdtaskServiceImpl.java
  22. 10 1
      src/main/java/com/yunfeiyun/agmp/iotm/web/service/impl/IotDeviceconfigServiceImpl.java

+ 1 - 1
src/main/java/com/yunfeiyun/agmp/iotm/device/common/domin/IotDeviceDataListReqVo.java

@@ -4,7 +4,7 @@ import lombok.Data;
 
 
 /**
 /**
  * 设备基础对象 IotDevice
  * 设备基础对象 IotDevice
- *
+ * 
  * @author 杨晓辉
  * @author 杨晓辉
  * @date 2024-01-04
  * @date 2024-01-04
  */
  */

+ 11 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/common/domin/IotDeviceExportReqVo.java

@@ -0,0 +1,11 @@
+package com.yunfeiyun.agmp.iotm.device.common.domin;
+
+import lombok.Data;
+
+import javax.servlet.http.HttpServletResponse;
+
+@Data
+public class IotDeviceExportReqVo {
+    private HttpServletResponse response;
+    private IotDeviceDataListReqVo reqVo;
+}

+ 1 - 1
src/main/java/com/yunfeiyun/agmp/iotm/device/common/service/impl/IotDeviceRefreshServiceImpl.java

@@ -42,7 +42,7 @@ public class IotDeviceRefreshServiceImpl implements IotDeviceRefreshService {
         Date nowDate = DateUtils.getNowDate();
         Date nowDate = DateUtils.getNowDate();
         long diffTime = nowDate.getTime() - createdDate.getTime();
         long diffTime = nowDate.getTime() - createdDate.getTime();
         if(diffTime > 10 * 1000){
         if(diffTime > 10 * 1000){
-            if (!Objects.equals(devStatus, IotDeviceStatusTypeEnum.ONLINE.getCode())) {
+            if (!Objects.equals(devStatus, IotDeviceStatusTypeEnum.ONLINE.getCode()) && !Objects.equals(devStatus, IotDeviceStatusTypeEnum.WAIT_ACTIVATE.getCode())) {
                 throw new IotBizException(IotErrorCode.FAILURE.getCode(), "设备离线无法操作");
                 throw new IotBizException(IotErrorCode.FAILURE.getCode(), "设备离线无法操作");
             }
             }
         }
         }

+ 9 - 10
src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/controller/IotDeviceQxzController.java

@@ -16,7 +16,6 @@ import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceBaseFunReqVo;
 import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceDataListReqVo;
 import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceDataListReqVo;
 import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceCommonService;
 import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceCommonService;
 import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceRefreshService;
 import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceRefreshService;
-import com.yunfeiyun.agmp.iotm.device.qxsqz.domain.IotDeviceQxzDataListReqVo;
 import com.yunfeiyun.agmp.iotm.device.qxsqz.domain.QxzExportDataDto;
 import com.yunfeiyun.agmp.iotm.device.qxsqz.domain.QxzExportDataDto;
 import com.yunfeiyun.agmp.iotm.web.domain.reqvo.IotDeviceListReqVo;
 import com.yunfeiyun.agmp.iotm.web.domain.reqvo.IotDeviceListReqVo;
 import com.yunfeiyun.agmp.iotm.web.domain.resvo.IotDeviceListResVo;
 import com.yunfeiyun.agmp.iotm.web.domain.resvo.IotDeviceListResVo;
@@ -92,7 +91,7 @@ public class IotDeviceQxzController extends BaseController {
      * @return
      * @return
      */
      */
     @GetMapping("/data/list")
     @GetMapping("/data/list")
-    public TableDataInfo dataList(IotDeviceQxzDataListReqVo reqVo) {
+    public TableDataInfo dataList(IotDeviceDataListReqVo reqVo) {
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
         iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
         iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
         iotDeviceBaseFunReqVo.setMethodName("dataList");
         iotDeviceBaseFunReqVo.setMethodName("dataList");
@@ -106,7 +105,7 @@ public class IotDeviceQxzController extends BaseController {
      * @return
      * @return
      */
      */
     @GetMapping("/chart/list")
     @GetMapping("/chart/list")
-    public AjaxResult chartList(IotDeviceQxzDataListReqVo reqVo) {
+    public AjaxResult chartList(IotDeviceDataListReqVo reqVo) {
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
         iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
         iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
         iotDeviceBaseFunReqVo.setMethodName("chartList");
         iotDeviceBaseFunReqVo.setMethodName("chartList");
@@ -122,7 +121,7 @@ public class IotDeviceQxzController extends BaseController {
      */
      */
     @GetMapping("/data/last24h/{devBid}")
     @GetMapping("/data/last24h/{devBid}")
     public AjaxResult dataList24h(@PathVariable("devBid") String devBid) {
     public AjaxResult dataList24h(@PathVariable("devBid") String devBid) {
-        IotDeviceQxzDataListReqVo reqVo = new IotDeviceQxzDataListReqVo();
+        IotDeviceDataListReqVo reqVo = new IotDeviceDataListReqVo();
         reqVo.setDevBid(devBid);
         reqVo.setDevBid(devBid);
 
 
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
@@ -139,7 +138,7 @@ public class IotDeviceQxzController extends BaseController {
      */
      */
     @GetMapping("/data/dataLatest/{devBid}")
     @GetMapping("/data/dataLatest/{devBid}")
     public AjaxResult dataLatest(@PathVariable("devBid") String devBid) {
     public AjaxResult dataLatest(@PathVariable("devBid") String devBid) {
-        IotDeviceQxzDataListReqVo reqVo = new IotDeviceQxzDataListReqVo();
+        IotDeviceDataListReqVo reqVo = new IotDeviceDataListReqVo();
         reqVo.setDevBid(devBid);
         reqVo.setDevBid(devBid);
 
 
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
@@ -172,15 +171,15 @@ public class IotDeviceQxzController extends BaseController {
             throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(), "设备不存在");
             throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(), "设备不存在");
         }
         }
 
 
-        IotDeviceQxzDataListReqVo iotDeviceQxzDataListReqVo = new IotDeviceQxzDataListReqVo();
-        iotDeviceQxzDataListReqVo.setDevBid(devBid);
-        iotDeviceQxzDataListReqVo.setStartTime(startTime);
-        iotDeviceQxzDataListReqVo.setEndTime(endTime);
+        IotDeviceDataListReqVo iotDeviceDataListReqVo = new IotDeviceDataListReqVo();
+        iotDeviceDataListReqVo.setDevBid(devBid);
+        iotDeviceDataListReqVo.setStartTime(startTime);
+        iotDeviceDataListReqVo.setEndTime(endTime);
 
 
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
         iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
         iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
         iotDeviceBaseFunReqVo.setMethodName("dataList");
         iotDeviceBaseFunReqVo.setMethodName("dataList");
-        iotDeviceBaseFunReqVo.setParam(iotDeviceQxzDataListReqVo);
+        iotDeviceBaseFunReqVo.setParam(iotDeviceDataListReqVo);
         TableDataInfo tableDataInfo = iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
         TableDataInfo tableDataInfo = iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
 
 
         List<List<IotQxzDataListRseVo>> dataList = (List<List<IotQxzDataListRseVo>>) tableDataInfo.getData();
         List<List<IotQxzDataListRseVo>> dataList = (List<List<IotQxzDataListRseVo>>) tableDataInfo.getData();

+ 0 - 41
src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/domain/IotDeviceQxzDataListReqVo.java

@@ -1,41 +0,0 @@
-package com.yunfeiyun.agmp.iotm.device.qxsqz.domain;
-
-import lombok.Data;
-
-/**
- * 设备基础对象 IotDevice
- * 
- * @author 杨晓辉
- * @date 2024-01-04
- */
-@Data
-public class IotDeviceQxzDataListReqVo
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 设备业务标识 */
-    private String devBid;
-
-    /** 客户id */
-    private String cId;
-
-    /** 开始时间 */
-    private String startTime;
-
-    /** 结束时间 */
-    private String endTime;
-
-    /**
-     * 数据形式  1 普通列表  2 图表用
-     */
-    private String dataType;
-
-    /**
-     * 导出类型
-     */
-    private String type;
-
-    private String isAsc;
-    private String orderByColumn;
-
-}

+ 7 - 7
src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/service/IIotYfQxzCommService.java

@@ -20,9 +20,9 @@ import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
 import com.yunfeiyun.agmp.iot.common.model.cmd.CmdGroupModel;
 import com.yunfeiyun.agmp.iot.common.model.cmd.CmdGroupModel;
 import com.yunfeiyun.agmp.iot.common.service.MongoService;
 import com.yunfeiyun.agmp.iot.common.service.MongoService;
 import com.yunfeiyun.agmp.iotm.device.common.domin.DeviceRefreshDto;
 import com.yunfeiyun.agmp.iotm.device.common.domin.DeviceRefreshDto;
+import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceDataListReqVo;
 import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceBaseService;
 import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceBaseService;
 import com.yunfeiyun.agmp.iotm.device.common.service.impl.IotDeviceBaseServiceImpl;
 import com.yunfeiyun.agmp.iotm.device.common.service.impl.IotDeviceBaseServiceImpl;
-import com.yunfeiyun.agmp.iotm.device.qxsqz.domain.IotDeviceQxzDataListReqVo;
 import com.yunfeiyun.agmp.iotm.device.qxsqz.domain.QxzDataLast24hDto;
 import com.yunfeiyun.agmp.iotm.device.qxsqz.domain.QxzDataLast24hDto;
 import com.yunfeiyun.agmp.iotm.util.MongoUtil;
 import com.yunfeiyun.agmp.iotm.util.MongoUtil;
 import com.yunfeiyun.agmp.iotm.web.service.IIotCmdtaskService;
 import com.yunfeiyun.agmp.iotm.web.service.IIotCmdtaskService;
@@ -41,7 +41,7 @@ import java.text.ParseException;
 import java.util.*;
 import java.util.*;
 
 
 @Slf4j
 @Slf4j
-public class IIotYfQxzCommService extends IotDeviceBaseServiceImpl implements IotDeviceBaseService {
+public class IIotQxzCommService extends IotDeviceBaseServiceImpl implements IotDeviceBaseService {
     @Autowired
     @Autowired
     private MongoService mongoService;
     private MongoService mongoService;
 
 
@@ -84,7 +84,7 @@ public class IIotYfQxzCommService extends IotDeviceBaseServiceImpl implements Io
      * @param isNow
      * @param isNow
      * @param isDisable
      * @param isDisable
      */
      */
-    public TableDataInfo dataList(IotDeviceQxzDataListReqVo reqVo, boolean isNow, boolean isDisable) throws ParseException {
+    public TableDataInfo dataList(IotDeviceDataListReqVo reqVo, boolean isNow, boolean isDisable) throws ParseException {
         TableDataInfo rspData = new TableDataInfo();
         TableDataInfo rspData = new TableDataInfo();
         rspData.setCode(ErrorCode.SUCCESS.getCode());
         rspData.setCode(ErrorCode.SUCCESS.getCode());
         rspData.setMsg(ErrorCode.SUCCESS.getMessage());
         rspData.setMsg(ErrorCode.SUCCESS.getMessage());
@@ -150,7 +150,7 @@ public class IIotYfQxzCommService extends IotDeviceBaseServiceImpl implements Io
         return rspData;
         return rspData;
     }
     }
 
 
-    public TableDataInfo dataList(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
+    public TableDataInfo dataList(IotDeviceDataListReqVo reqVo) throws ParseException {
         return dataList(reqVo, true, false);
         return dataList(reqVo, true, false);
     }
     }
 
 
@@ -158,7 +158,7 @@ public class IIotYfQxzCommService extends IotDeviceBaseServiceImpl implements Io
      * 获取折线图数据列表接口
      * 获取折线图数据列表接口
      * @param reqVo
      * @param reqVo
      */
      */
-    public List<IotQxzDataListRseVo> chartList(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
+    public List<IotQxzDataListRseVo> chartList(IotDeviceDataListReqVo reqVo) throws ParseException {
 
 
         //1、查出总条数 2、查出“符合条件的、当前页的”数据 3、json结构重组(如果需要的话) 4、附加 要素自定义 信息
         //1、查出总条数 2、查出“符合条件的、当前页的”数据 3、json结构重组(如果需要的话) 4、附加 要素自定义 信息
 
 
@@ -256,7 +256,7 @@ public class IIotYfQxzCommService extends IotDeviceBaseServiceImpl implements Io
      * @param reqVo
      * @param reqVo
      * @return
      * @return
      */
      */
-    public List<IotQxzDataListRseVo> dataList24h(IotDeviceQxzDataListReqVo reqVo){
+    public List<IotQxzDataListRseVo> dataList24h(IotDeviceDataListReqVo reqVo){
         String devBid = reqVo.getDevBid();
         String devBid = reqVo.getDevBid();
         long endTime = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.dateNow()).getTime();
         long endTime = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.dateNow()).getTime();
         long begintime = endTime-86400000;
         long begintime = endTime-86400000;
@@ -347,7 +347,7 @@ public class IIotYfQxzCommService extends IotDeviceBaseServiceImpl implements Io
      * @param reqVo
      * @param reqVo
      * @return
      * @return
      */
      */
-    public IotDevicelasteddata dataLatest(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
+    public IotDevicelasteddata dataLatest(IotDeviceDataListReqVo reqVo) throws ParseException {
         String devBid = reqVo.getDevBid();
         String devBid = reqVo.getDevBid();
 
 
         IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
         IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());

+ 2 - 2
src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/service/impl/IotXphYfQxzMqttServiceImpl.java

@@ -3,7 +3,7 @@ package com.yunfeiyun.agmp.iotm.device.qxsqz.service.impl;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
 import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
 import com.yunfeiyun.agmp.iotm.device.common.domin.DeviceRefreshDto;
 import com.yunfeiyun.agmp.iotm.device.common.domin.DeviceRefreshDto;
-import com.yunfeiyun.agmp.iotm.device.qxsqz.service.IIotYfQxzCommService;
+import com.yunfeiyun.agmp.iotm.device.qxsqz.service.IIotQxzCommService;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
@@ -14,7 +14,7 @@ import org.springframework.stereotype.Service;
 
 
 @Slf4j
 @Slf4j
 @Service(value = ServiceNameConst.SERVICE_XPH_YF_QXZ)
 @Service(value = ServiceNameConst.SERVICE_XPH_YF_QXZ)
-public class IotXphYfQxzMqttServiceImpl extends IIotYfQxzCommService {
+public class IotXphYfQxzMqttServiceImpl extends IIotQxzCommService {
     @Override
     @Override
     public void refresh(DeviceRefreshDto reqVo) {
     public void refresh(DeviceRefreshDto reqVo) {
         IotDevice findDevice = reqVo.getIotDevice();
         IotDevice findDevice = reqVo.getIotDevice();

+ 2 - 2
src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/service/impl/IotYfQxzServiceImpl.java

@@ -8,7 +8,7 @@ import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
 import com.yunfeiyun.agmp.iot.common.domain.IotDeviceconfig;
 import com.yunfeiyun.agmp.iot.common.domain.IotDeviceconfig;
 import com.yunfeiyun.agmp.iot.common.model.cmd.CmdGroupModel;
 import com.yunfeiyun.agmp.iot.common.model.cmd.CmdGroupModel;
 import com.yunfeiyun.agmp.iotm.device.common.domin.DeviceRefreshDto;
 import com.yunfeiyun.agmp.iotm.device.common.domin.DeviceRefreshDto;
-import com.yunfeiyun.agmp.iotm.device.qxsqz.service.IIotYfQxzCommService;
+import com.yunfeiyun.agmp.iotm.device.qxsqz.service.IIotQxzCommService;
 import com.yunfeiyun.agmp.iotm.web.service.IIotCmdtaskService;
 import com.yunfeiyun.agmp.iotm.web.service.IIotCmdtaskService;
 import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceconfigService;
 import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceconfigService;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -19,7 +19,7 @@ import javax.annotation.Resource;
 
 
 @Service(value = ServiceNameConst.SERVICE_YF_QXZ)
 @Service(value = ServiceNameConst.SERVICE_YF_QXZ)
 @Slf4j
 @Slf4j
-public class IotYfQxzServiceImpl extends IIotYfQxzCommService {
+public class IotYfQxzServiceImpl extends IIotQxzCommService {
 
 
     @Autowired
     @Autowired
     private IIotCmdtaskService iIotCmdtaskService;
     private IIotCmdtaskService iIotCmdtaskService;

+ 0 - 375
src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/service/impl/IotYfQxzServiceImplbackup.java

@@ -1,375 +0,0 @@
-//package com.yunfeiyun.agmp.iotm.device.qxsqz.service.impl;
-//
-//import com.alibaba.fastjson2.JSONArray;
-//import com.alibaba.fastjson2.JSONObject;
-//import com.baomidou.mybatisplus.core.metadata.IPage;
-//import com.yunfeiyun.agmp.common.constant.ErrorCode;
-//import com.yunfeiyun.agmp.common.core.page.PageDomain;
-//import com.yunfeiyun.agmp.common.core.page.TableDataInfo;
-//import com.yunfeiyun.agmp.common.core.page.TableSupport;
-//import com.yunfeiyun.agmp.common.framework.manager.RedisCacheManager;
-//import com.yunfeiyun.agmp.common.utils.DateUtils;
-//import com.yunfeiyun.agmp.common.utils.JSONUtils;
-//import com.yunfeiyun.agmp.common.utils.StringUtils;
-//import com.yunfeiyun.agmp.common.utils.uuid.IdUtils;
-//import com.yunfeiyun.agmp.iot.common.constant.IotErrorCode;
-//import com.yunfeiyun.agmp.iot.common.constant.device.ElementFactorUtil;
-//import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
-//import com.yunfeiyun.agmp.iot.common.domain.*;
-//import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
-//import com.yunfeiyun.agmp.iot.common.model.cmd.CmdGroupModel;
-//import com.yunfeiyun.agmp.iot.common.service.MongoService;
-//import com.yunfeiyun.agmp.iotm.device.common.domin.DeviceRefreshDto;
-//import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceBaseService;
-//import com.yunfeiyun.agmp.iotm.device.common.service.impl.IotDeviceBaseServiceImpl;
-//import com.yunfeiyun.agmp.iotm.device.qxsqz.domain.IotDeviceQxzDataListReqVo;
-//import com.yunfeiyun.agmp.iotm.device.qxsqz.domain.QxzDataLast24hDto;
-//import com.yunfeiyun.agmp.iotm.util.MongoUtil;
-//import com.yunfeiyun.agmp.iotm.web.service.IIotCmdtaskService;
-//import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceService;
-//import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceconfigService;
-//import com.yunfeiyun.agmp.iotm.web.service.IIotDevicefactorService;
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.beans.BeanUtils;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.data.domain.Sort;
-//import org.springframework.data.mongodb.core.aggregation.*;
-//import org.springframework.data.mongodb.core.query.Criteria;
-//import org.springframework.stereotype.Service;
-//
-//import javax.annotation.Resource;
-//import java.text.ParseException;
-//import java.util.*;
-//
-//@Service(value = ServiceNameConst.SERVICE_YF_QXZ)
-//@Slf4j
-//public class IotYfQxzServiceImplbackup extends IotDeviceBaseServiceImpl implements IotDeviceBaseService {
-//
-//    @Autowired
-//    private MongoService mongoService;
-//
-//    @Autowired
-//    private IIotDevicefactorService iotDevicefactorService;
-//
-//    @Autowired
-//    private IIotDeviceService iotDeviceService;
-//
-//    @Autowired
-//    private RedisCacheManager redisCacheManager;
-//
-//    @Autowired
-//    private IIotCmdtaskService iIotCmdtaskService;
-//
-//    @Resource
-//    private IIotDeviceconfigService iIotDeviceconfigService;
-//
-//    public TableDataInfo dataList(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
-//        return dataList(reqVo, true, false);
-//    }
-//
-//    /**
-//     * 获取数据列表接口
-//     * @param reqVo
-//     */
-//    public TableDataInfo dataList(IotDeviceQxzDataListReqVo reqVo, boolean isNow, boolean isDisable) throws ParseException {
-//        TableDataInfo rspData = new TableDataInfo();
-//        rspData.setCode(ErrorCode.SUCCESS.getCode());
-//        rspData.setMsg(ErrorCode.SUCCESS.getMessage());
-//        rspData.setData(new ArrayList<>());
-//        rspData.setTotal(0);
-//
-//        IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
-//
-//        String devBid = findDevice.getDevBid();
-//        Criteria criteria = new Criteria().and("devBid").is(devBid);
-//        if(isNow){
-//            Date startDate = null;
-//            Date endDate = null;
-//            try{
-//                startDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, reqVo.getStartTime());
-//                endDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, reqVo.getEndTime());
-//            }catch (Exception e){
-//                log.error("时间格式错误", e);
-//                throw new IotBizException(ErrorCode.INVALID_PARAMETER.getCode(), "请输入正确的起止时间");
-//            }
-//            criteria = criteria.andOperator(
-//                    Criteria.where("time").gte(startDate),
-//                    Criteria.where("time").lte(endDate)
-//            );
-//        }
-//
-//        MatchOperation matchOperation = Aggregation.match(criteria);
-//
-//        GroupOperation groupOperation = Aggregation.group("time")
-//                .push("$$ROOT").as("data");
-//
-//        ProjectionOperation projectionOperationResult = Aggregation.project("_id")
-//                .and("_id").as("time")
-//                .and("data").as("dataList");
-//
-//        SortOperation sortOperation = Aggregation.sort(Sort.Direction.DESC, "time");
-//
-//        Aggregation aggregation = Aggregation.newAggregation(
-//                matchOperation,
-//                groupOperation,
-//                projectionOperationResult,
-//                sortOperation
-//        );
-//
-//        PageDomain pageDomain = TableSupport.buildPageRequest();
-//        IPage<QxzDataListDto> qxzDataListDtoIPage = mongoService.aggregate(IotYfqxzdata.class, aggregation, QxzDataListDto.class, pageDomain);
-//        //查出该设备的“自定义要素信息列表”
-//        IotDevicefactor param = new IotDevicefactor();
-//        param.setDevBid(devBid);
-//        List<IotDevicefactor> factorList = iotDevicefactorService.selectIotDevicefactorList(param);
-//
-//        List<List<IotQxzDataListRseVo>> rest = new ArrayList<>();
-//        for(QxzDataListDto item: qxzDataListDtoIPage.getRecords()){
-//            List<QxzDataDto> dataList = item.getDataList();
-//            List<IotQxzDataListRseVo> iotQxzDataListRseVoList = ElementFactorUtil.qxzListProcessData(dataList, factorList, findDevice, isDisable);
-//            rest.add(iotQxzDataListRseVoList);
-//        }
-//        rspData.setData(rest);
-//        rspData.setTotal(qxzDataListDtoIPage.getTotal());
-//        return rspData;
-//    }
-//
-//    /**
-//     * 获取折线图数据列表接口
-//     * @param reqVo
-//     */
-//    public List<IotQxzDataListRseVo> chartList(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
-//
-//        //1、查出总条数 2、查出“符合条件的、当前页的”数据 3、json结构重组(如果需要的话) 4、附加 要素自定义 信息
-//
-//        String devBid = reqVo.getDevBid();
-//        if(StringUtils.isEmpty(devBid)){
-//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备标识不能为空");
-//        }
-//
-//        IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
-//
-//        String startDate = reqVo.getStartTime();
-//        String endDate = reqVo.getEndTime();
-//        String unit = "day";
-//
-//        Criteria criteria = new Criteria().and("devBid").is(devBid);
-//
-//        //必须设置起止时间
-//        if(StringUtils.isNotEmpty(startDate) && StringUtils.isNotEmpty(endDate)){
-//            //限制 起止时间
-//            criteria = criteria.andOperator(
-//                    Criteria.where("time").gte(DateUtils.parseDate(startDate)),
-//                    Criteria.where("time").lte(DateUtils.parseDate(endDate))
-//            );
-//            //选择 数据粒度
-//            unit = MongoUtil.getDateTruncUnit(startDate, endDate);
-//        }
-//
-//        MatchOperation matchOperation = Aggregation.match(criteria);
-//
-//        ProjectionOperation projectionOperation = Aggregation.project()
-//                .and("eName").as("eName")
-//                .and("eNum").as("eNum")
-//                .and("eKey").as("eKey")
-//                .andExpression("{$convert: {input: '$eValue', to: 'double', onError: -99, onNull: -99}}").as("eValue")
-//                .andExpression("{$dateTrunc: {date: {$toDate: '$time'}, unit:'" + unit + "'}}").as("time");
-//
-//        GroupOperation groupOperation = Aggregation.group("eName", "eNum", "eKey")
-//                .push("$$ROOT").as("data");
-//
-//        UnwindOperation unwindOperation = Aggregation.unwind("$data");
-//        GroupOperation groupOperation2 = Aggregation.group("data.eName", "data.eNum", "data.eKey", "data.time")
-//                .avg("data.eValue").as("eValue");
-//
-//        SortOperation sortOperation = Aggregation.sort(Sort.Direction.ASC, "_id.time");
-//        JSONArray roundArray = new JSONArray();
-//        roundArray.add("$eValue");
-//        roundArray.add(2);
-//        Map<String, Object> roundMap = new HashMap<>();
-//        roundMap.put("$round", roundArray);
-//        Map<String, Object> pushMapStr = new HashMap<>();
-//        pushMapStr.put("$toString", roundMap);
-//
-//        Map<String, Object> pushMap = new HashMap<>();
-//        pushMap.put("number", pushMapStr);
-//        pushMap.put("time", "$_id.time");
-//
-//        GroupOperation groupOperation3 = Aggregation.group("_id.eName", "_id.eNum", "_id.eKey")
-//                .push(pushMap).as("dataList");
-//
-//        ProjectionOperation projectionOperation2 = Aggregation.project()
-//                .and("eName").as("eName")
-//                .and("eNum").as("eNum")
-//                .and("eKey").as("eKey")
-//                .and("dataList").as("dataList");
-//        SortOperation sortOperation2 = Aggregation.sort(Sort.Direction.ASC, "eKey");
-//
-//        Aggregation aggregation = Aggregation.newAggregation(
-//                matchOperation,
-//                projectionOperation,
-//                groupOperation,
-//                unwindOperation,
-//                groupOperation2,
-//                sortOperation,
-//                groupOperation3,
-//                projectionOperation2,
-//                sortOperation2
-//        );
-//        List<QxzDataDto> dataList = mongoService.aggregate(IotYfqxzdata.class, aggregation, QxzDataDto.class);
-//
-//        //查出该设备的“自定义要素信息列表”
-//        IotDevicefactor param = new IotDevicefactor();
-//        param.setDevBid(devBid);
-//        List<IotDevicefactor> factorList = iotDevicefactorService.selectIotDevicefactorList(param);
-//        List<IotQxzDataListRseVo> iotQxzDataListRseVoList = ElementFactorUtil.qxzChartProcessData(dataList, factorList, findDevice, false);
-//        return iotQxzDataListRseVoList;
-//    }
-//
-//    /**
-//     * 获取24小时数据列表接口
-//     * @param reqVo
-//     * @return
-//     */
-//    public List<IotQxzDataListRseVo> dataList24h(IotDeviceQxzDataListReqVo reqVo){
-//        String devBid = reqVo.getDevBid();
-//        long endTime = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.dateNow()).getTime();
-//        long begintime = endTime-86400000;
-//
-//        IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
-//
-//        Criteria criteria = new Criteria().and("devBid").is(devBid);
-//        criteria = criteria.andOperator(
-//                Criteria.where("time").gte(new Date(begintime)),
-//                Criteria.where("time").lte(new Date(endTime))
-//        );
-//        MatchOperation matchOperation = Aggregation.match(criteria);
-//        AddFieldsOperation addFieldsOperation = Aggregation.addFields()
-//                .addField("eValueNum")
-//                .withValueOfExpression("{$convert: {input: '$eValue', to: 'double', onError: -99, onNull: -99}}")
-//                .build();
-//
-//        SortOperation sortOperation = Aggregation.sort(Sort.Direction.ASC, "eValueNum");
-//
-//        GroupOperation groupOperation = Aggregation.group("eNum", "eName", "eKey")
-//                .push("$$ROOT").as("data");
-//        SortOperation sortOperation2 = Aggregation.sort(Sort.Direction.ASC, "data.eValueNum")
-//                .and(Sort.Direction.ASC, "data.time");
-//
-//        ProjectionOperation projectionOperationResult = Aggregation.project("_id")
-//                .and("_id").as("elem")
-//                .andExpression("{$last: '$data'}").as("max_data")
-//                .andExpression("{$first: '$data'}").as("min_data");
-//
-//        ProjectionOperation projectionOperationResult2 = Aggregation.project("_id")
-//                .and("elem").as("elem")
-//                .and("elem.eNum").as("eNum")
-//                .and("elem.eName").as("eName")
-//                .and("elem.eKey").as("eKey")
-//                .and("max_data.eValue").as("maxVal")
-//                .and("max_data.time").as("maxValdate")
-//                .and("min_data.eValue").as("minVal")
-//                .and("min_data.time").as("minValdate");
-//
-//        SortOperation sortOperation3 = Aggregation.sort(Sort.Direction.ASC, "eNum")
-//                .and(Sort.Direction.ASC, "eName")
-//                .and(Sort.Direction.ASC, "eKey");
-//
-//        Aggregation aggregation = Aggregation.newAggregation(
-//                matchOperation,
-//                addFieldsOperation,
-//                sortOperation,
-//                groupOperation,
-//                sortOperation2,
-//                projectionOperationResult,
-//                projectionOperationResult2,
-//                sortOperation3
-//        );
-//
-//        List<QxzDataLast24hDto> qxzDataLast24hDtoList = mongoService.aggregate(IotYfqxzdata.class, aggregation, QxzDataLast24hDto.class);
-//        //查出该设备的“自定义要素信息列表”
-//        IotDevicefactor param = new IotDevicefactor();
-//        param.setDevBid(devBid);
-//        List<IotDevicefactor> factorList = iotDevicefactorService.selectIotDevicefactorList(param);
-//        Map<String, QxzDataLast24hDto> iotXphLast24hDtoMap = new HashMap<>();
-//        List<QxzDataDto> dataList = new ArrayList<>();
-//        for(QxzDataLast24hDto item: qxzDataLast24hDtoList){
-//            String key = ElementFactorUtil.getAddress(item.getEName(), item.getEKey());
-//            iotXphLast24hDtoMap.put(key, item);
-//            QxzDataDto dto = new QxzDataDto();
-//            BeanUtils.copyProperties(item, dto);
-//            dataList.add(dto);
-//        }
-//
-//        List<IotQxzDataListRseVo> iotQxzDataListRseVoList = ElementFactorUtil.qxzListProcessData(dataList, factorList, findDevice, false);
-//        for(IotQxzDataListRseVo item: iotQxzDataListRseVoList){
-//            QxzDataLast24hDto qxzDataLast24hDto = iotXphLast24hDtoMap.get(item.getAddress());
-//            item.setMinVal(qxzDataLast24hDto.getMinVal());
-//            item.setMinValdate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, qxzDataLast24hDto.getMinValdate()));
-//            item.setMaxVal(qxzDataLast24hDto.getMaxVal());
-//            item.setMaxValdate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, qxzDataLast24hDto.getMaxValdate()));
-//        }
-//        return iotQxzDataListRseVoList;
-//    }
-//
-//    /**
-//     * 获取最近数据列表接口
-//     * @param reqVo
-//     * @return
-//     */
-//    public IotDevicelasteddata dataLatest(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
-//        String devBid = reqVo.getDevBid();
-//
-//        IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
-//        TableDataInfo tableDataInfo = dataList(reqVo, false, true);
-//        List<List<IotQxzDataListRseVo>> rest = (List<List<IotQxzDataListRseVo>>) tableDataInfo.getData();
-//        if(rest == null || rest.isEmpty()){
-//            log.info("devBid:{},【最近数据】empty",devBid);
-//            return null;
-//        }
-//
-//        List<IotQxzDataListRseVo> iotQxzDataListRseVoList = rest.get(0);
-//        IotQxzDataListRseVo iotQxzDataListRseVo = iotQxzDataListRseVoList.get(0);
-//        IotDevicelasteddata latestData = new IotDevicelasteddata();
-//        BeanUtils.copyProperties(findDevice, latestData);
-//        latestData.setDevldCreateddate(iotQxzDataListRseVo.getTime());
-//        latestData.setDevldUpdateddate(iotQxzDataListRseVo.getTime());
-//        latestData.setDevldContent(JSONArray.toJSONString(iotQxzDataListRseVoList));
-//        return latestData;
-//    }
-//
-//    /**
-//     * 刷新指令集
-//     * @param reqVo
-//     */
-//    public void refresh(DeviceRefreshDto reqVo) {
-//
-//        IotDevice findDevice = reqVo.getIotDevice();
-//        String devBid = findDevice.getDevBid();
-//        log.info("创建【“刷新”指令集任务】,设备类型:{}", findDevice.getDevtypeName());
-//        JSONObject ext = new JSONObject();
-//        ext.put("type", "data");
-//        JSONObject payload = new JSONObject();
-//        payload.put("cmd", "read");
-//        payload.put("ext", ext);
-//        IotDeviceconfig iotDeviceconfig = new IotDeviceconfig();
-//        iotDeviceconfig.setTid(findDevice.getTid());
-//        iotDeviceconfig.setDevBid(devBid);
-//        iotDeviceconfig.setDevcfgContext(JSONUtils.toJSONString(payload));
-//
-//        CmdGroupModel cmdGroupModel = iIotDeviceconfigService.createRefreshCmd(iotDeviceconfig);
-//
-//        // 构建日志需要用的内容
-//        cmdGroupModel.setRequestId(IdUtils.fastUUID());
-//        cmdGroupModel.setDevCode(findDevice.getDevCode());
-//        cmdGroupModel.setCtBiztype("3");
-//        cmdGroupModel.setCtDevtype(findDevice.getDevtypeBid());
-//        cmdGroupModel.setCtBiztitle(findDevice.getDevtypeName() + ":" + findDevice.getDevCode());
-//        cmdGroupModel.setCtParam("设备id:"+devBid);
-//        iIotCmdtaskService.handInternalCmd(cmdGroupModel);
-//        String taskUuid = cmdGroupModel.getTaskUuid();
-//        log.info("【“刷新”指令集任务】创建成功,taskUuid:{}", taskUuid);
-//    }
-//
-//
-//}

+ 234 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/scd/controller/IotDeviceScdController.java

@@ -0,0 +1,234 @@
+package com.yunfeiyun.agmp.iotm.device.scd.controller;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.yunfeiyun.agmp.common.constant.ErrorCode;
+import com.yunfeiyun.agmp.common.core.domain.AjaxResult;
+import com.yunfeiyun.agmp.common.core.page.TableDataInfo;
+import com.yunfeiyun.agmp.common.log.LogCore;
+import com.yunfeiyun.agmp.common.utils.DateUtils;
+import com.yunfeiyun.agmp.common.utils.StringUtils;
+import com.yunfeiyun.agmp.iot.common.constant.IotErrorCode;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictConst;
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
+import com.yunfeiyun.agmp.iot.common.enums.IotDeviceStatusTypeEnum;
+import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
+import com.yunfeiyun.agmp.iotm.common.controller.BaseController;
+import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceBaseFunReqVo;
+import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceDataListReqVo;
+import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceExportReqVo;
+import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceCommonService;
+import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceRefreshService;
+import com.yunfeiyun.agmp.iotm.device.scd.domain.IotScdClearPestDto;
+import com.yunfeiyun.agmp.iotm.device.scd.domain.IotScdConfig;
+import com.yunfeiyun.agmp.iotm.device.scd.domain.IotScdConfigEditReqVo;
+import com.yunfeiyun.agmp.iotm.web.domain.reqvo.IotDeviceListReqVo;
+import com.yunfeiyun.agmp.iotm.web.domain.resvo.IotDeviceListResVo;
+import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 杀虫灯设备控制器
+ */
+
+@RestController
+@RequestMapping("/iot/device/scd")
+@Slf4j
+public class IotDeviceScdController extends BaseController {
+    @Autowired
+    private IIotDeviceService iIotDeviceService;
+
+    @Resource
+    private IotDeviceCommonService iotDeviceCommonService;
+
+    @Resource
+    private IotDeviceRefreshService iotDeviceRefreshService;
+
+    /**
+     * 杀虫灯列表
+     * /list  所有杀虫灯设备
+     * /pt/list 普通杀虫灯设备
+     * /fxs/list 风吸式杀虫灯设备
+     * /jgs/list 景观式杀虫灯设备
+     * @param reqVo
+     * @return
+     */
+    @GetMapping({"/list", "/pt/list", "/fxs/list", "/jgs/list"})
+    public TableDataInfo list(HttpServletRequest request, IotDeviceListReqVo reqVo) {
+        startPage();
+        String reqUri = request.getRequestURI();
+        String[] devTypeList = new String[]{
+                IotDeviceDictConst.TYPE_YF_SCD,
+                IotDeviceDictConst.TYPE_YF_FXSSCD,
+                IotDeviceDictConst.TYPE_YF_JGFXSSCD
+        };
+
+        if(reqUri.endsWith("/pt/list")){
+            devTypeList = new String[]{IotDeviceDictConst.TYPE_YF_SCD};
+        }else if(reqUri.endsWith("/fxs/list")){
+            devTypeList = new String[]{IotDeviceDictConst.TYPE_YF_FXSSCD};
+        } else if (reqUri.endsWith("/jgs/list")) {
+            devTypeList = new String[]{IotDeviceDictConst.TYPE_YF_JGFXSSCD};
+        }
+        reqVo.setDevtypeBidList(Arrays.asList(devTypeList));
+        List<IotDeviceListResVo> list = iIotDeviceService.selectIotDeviceListByType(reqVo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 数据列表
+     * @param reqVo
+     * @return
+     */
+    @GetMapping("/data/list")
+    public TableDataInfo dataList(IotDeviceDataListReqVo reqVo) {
+        IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
+        iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
+        iotDeviceBaseFunReqVo.setMethodName("dataList");
+        iotDeviceBaseFunReqVo.setParam(reqVo);
+        return iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
+    }
+
+    /**
+     * 折线图列表
+     * @param reqVo
+     * @return
+     */
+    @GetMapping("/chart/list")
+    public AjaxResult chartList(IotDeviceDataListReqVo reqVo) {
+        IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
+        iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
+        iotDeviceBaseFunReqVo.setMethodName("chartList");
+        iotDeviceBaseFunReqVo.setParam(reqVo);
+        List<IotDeviceListResVo> list = iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
+        return AjaxResult.success(list);
+    }
+
+    @GetMapping("/refresh/{devBid}")
+    public AjaxResult refresh(@PathVariable("devBid") String devBid) {
+        String result = iotDeviceRefreshService.refresh(devBid);
+        return new AjaxResult(ErrorCode.SUCCESS.getCode(), result, null);
+    }
+
+    @PostMapping("/data/export")
+    public void dataExport(HttpServletResponse response, @RequestBody IotDeviceDataListReqVo reqVo){
+        IotDeviceExportReqVo iotDeviceExportReqVo = new IotDeviceExportReqVo();
+        iotDeviceExportReqVo.setResponse(response);
+        iotDeviceExportReqVo.setReqVo(reqVo);
+
+        IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
+        iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
+        iotDeviceBaseFunReqVo.setMethodName("dataExport");
+        iotDeviceBaseFunReqVo.setParam(iotDeviceExportReqVo);
+        iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
+    }
+
+    @PostMapping("/status/export")
+    public void statusExport(HttpServletResponse response, @RequestBody IotDeviceDataListReqVo reqVo){
+        IotDeviceExportReqVo iotDeviceExportReqVo = new IotDeviceExportReqVo();
+        iotDeviceExportReqVo.setResponse(response);
+        iotDeviceExportReqVo.setReqVo(reqVo);
+
+        IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
+        iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
+        iotDeviceBaseFunReqVo.setMethodName("statusExport");
+        iotDeviceBaseFunReqVo.setParam(iotDeviceExportReqVo);
+        iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
+    }
+
+    @GetMapping("/config/info/{devBid}")
+    public AjaxResult configInfo(@PathVariable("devBid") String devBid){
+        IotDeviceDataListReqVo reqVo = new IotDeviceDataListReqVo();
+        reqVo.setDevBid(devBid);
+
+        IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
+        iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
+        iotDeviceBaseFunReqVo.setMethodName("configInfo");
+        iotDeviceBaseFunReqVo.setParam(reqVo);
+        JSONObject jsonObject = iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
+        return AjaxResult.success(jsonObject);
+    }
+
+    /**
+     * 下发杀虫灯配置指令
+     *
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/config/edit")
+    public AjaxResult sendConfigCmd(@RequestBody IotScdConfigEditReqVo reqVo) {
+        log.info("【{}】【杀虫灯】【下发指令配置】客户id {}", LogCore.getSeq(), getCustomerId());
+        String devBid = reqVo.getDevBid();
+        IotScdConfig iotScdConfig = reqVo.getIotScdConfig();
+        if(StringUtils.isEmpty(devBid) || iotScdConfig == null){
+            throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"参数不能为空");
+        }
+        IotDevice iotDevice = iIotDeviceService.selectIotDeviceByDevBid(devBid);
+        if(iotDevice == null){
+            throw new IotBizException(ErrorCode.INVALID_PARAMETER.getCode(),"设备不存在");
+        }
+        String devStatus = iotDevice.getDevStatus();
+        String devCreateddate = iotDevice.getDevCreateddate();
+        Date createdDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, devCreateddate);
+        Date nowDate = DateUtils.getNowDate();
+        long diffTime = nowDate.getTime() - createdDate.getTime();
+        if(diffTime > 10 * 1000){
+            if (!Objects.equals(devStatus, IotDeviceStatusTypeEnum.ONLINE.getCode()) && !Objects.equals(devStatus, IotDeviceStatusTypeEnum.WAIT_ACTIVATE.getCode())) {
+                throw new IotBizException(IotErrorCode.FAILURE.getCode(), "设备离线无法操作");
+            }
+        }
+
+        reqVo.setIotDevice(iotDevice);
+
+        IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
+        iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
+        iotDeviceBaseFunReqVo.setMethodName("sendConfigCmd");
+        iotDeviceBaseFunReqVo.setParam(reqVo);
+        String taskId = iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
+
+        return new AjaxResult(ErrorCode.SUCCESS.getCode(), "下发成功,等待设备响应结果", taskId);
+    }
+
+    /**
+     * 一键清虫
+     * @param devBid
+     * @return
+     */
+    @GetMapping("/clear/{devBid}")
+    public AjaxResult clearPest(@PathVariable("devBid") String devBid) {
+        IotDevice iotDevice = iIotDeviceService.selectIotDeviceByDevBid(devBid);
+        if(iotDevice == null){
+            throw new IotBizException(ErrorCode.INVALID_PARAMETER.getCode(),"设备不存在");
+        }
+        String devStatus = iotDevice.getDevStatus();
+        String devCreateddate = iotDevice.getDevCreateddate();
+        Date createdDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, devCreateddate);
+        Date nowDate = DateUtils.getNowDate();
+        long diffTime = nowDate.getTime() - createdDate.getTime();
+        if(diffTime > 10 * 1000){
+            if (!Objects.equals(devStatus, IotDeviceStatusTypeEnum.ONLINE.getCode()) && !Objects.equals(devStatus, IotDeviceStatusTypeEnum.WAIT_ACTIVATE.getCode())) {
+                throw new IotBizException(IotErrorCode.FAILURE.getCode(), "设备离线无法操作");
+            }
+        }
+        IotScdClearPestDto iotScdClearPestDto = new IotScdClearPestDto();
+        iotScdClearPestDto.setIotDevice(iotDevice);
+
+        IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
+        iotDeviceBaseFunReqVo.setDevBid(devBid);
+        iotDeviceBaseFunReqVo.setMethodName("clearPest");
+
+        iotDeviceBaseFunReqVo.setParam(iotScdClearPestDto);
+        String taskId = iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
+
+        return new AjaxResult(ErrorCode.SUCCESS.getCode(), "下发成功,等待设备响应结果", taskId);
+    }
+}

+ 9 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/scd/domain/IotScdClearPestDto.java

@@ -0,0 +1,9 @@
+package com.yunfeiyun.agmp.iotm.device.scd.domain;
+
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
+import lombok.Data;
+
+@Data
+public class IotScdClearPestDto {
+    private IotDevice iotDevice;
+}

+ 29 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/scd/domain/IotScdConfig.java

@@ -0,0 +1,29 @@
+package com.yunfeiyun.agmp.iotm.device.scd.domain;
+
+import lombok.Data;
+
+@Data
+public class IotScdConfig {
+    /**
+     * 清虫间隔
+     */
+    private String clt_t;
+
+    /**数据上传时间间隔*/
+    private String dat_f;
+
+    /**设备开关状态 0 关机 1 开机*/
+    private String ds;
+
+    /**时控开始时间:0-23*/
+    private String st;
+
+    /**时控结束时间:0-23*/
+    private String et;
+
+    /**定时模式:0光控 1 时控*/
+    private String ts;
+
+    /**光控定时时间1~10*/
+    private String tt;
+}

+ 11 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/scd/domain/IotScdConfigEditReqVo.java

@@ -0,0 +1,11 @@
+package com.yunfeiyun.agmp.iotm.device.scd.domain;
+
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
+import lombok.Data;
+
+@Data
+public class IotScdConfigEditReqVo {
+    private String devBid;
+    private IotScdConfig iotScdConfig;
+    private IotDevice iotDevice;
+}

+ 89 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/scd/domain/IotYfFxsScdDataExportVo.java

@@ -0,0 +1,89 @@
+package com.yunfeiyun.agmp.iotm.device.scd.domain;
+
+import com.yunfeiyun.agmp.common.annotation.Excel;
+import lombok.Data;
+
+import java.util.Objects;
+
+@Data
+public class IotYfFxsScdDataExportVo {
+    private static final long serialVersionUID = 1L;
+
+    @Excel(name = "设备编号")
+    private String devCode;
+
+    @Excel(name = "设备类型")
+    private String devTypeName;
+
+    @Excel(name = "工作状态")
+    private String workStatus;
+
+    @Excel(name = "雨控状态")
+    private String rainStatus;
+
+    @Excel(name = "温控状态")
+    private String tempStatus;
+
+    @Excel(name = "倾倒状态")
+    private String tippingStatus;
+
+    @Excel(name = "光控状态")
+    private String sunStatus;
+
+    @Excel(name = "记录时间")
+    private String scddataCreatedDate;
+
+    public String getWorkStatus() {
+        return workStatus;
+    }
+
+    public void setWorkStatus(String workStatus) {
+        this.workStatus = "待机";
+        if(workStatus.equals("1")){
+            this.workStatus = "工作";
+        }else if(workStatus.equals("2")){
+            this.workStatus = "充电";
+        }
+    }
+
+    public String getRainStatus() {
+        return rainStatus;
+    }
+
+    public void setRainStatus(String rainStatus) {
+        this.rainStatus = Objects.equals(rainStatus, "0") ? "正常": "保护";
+    }
+
+    public String getTempStatus() {
+        return tempStatus;
+    }
+
+    public void setTempStatus(String tempStatus) {
+        this.tempStatus = Objects.equals(tempStatus, "0") ? "正常": "保护";
+    }
+
+    public String getTippingStatus() {
+        return tippingStatus;
+    }
+
+    public void setTippingStatus(String tippingStatus) {
+        this.tippingStatus = Objects.equals(tippingStatus, "0") ? "正常": "保护";
+    }
+
+    public String getSunStatus() {
+        return sunStatus;
+    }
+
+    public void setSunStatus(String sunStatus) {
+        this.sunStatus = Objects.equals(sunStatus, "0") ? "正常": "保护";
+    }
+
+    public String getScddataCreatedDate() {
+        return scddataCreatedDate;
+    }
+
+    public void setScddataCreatedDate(String scddataCreatedDate) {
+        this.scddataCreatedDate = scddataCreatedDate;
+    }
+
+}

+ 100 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/scd/domain/IotYfScdDataExportVo.java

@@ -0,0 +1,100 @@
+package com.yunfeiyun.agmp.iotm.device.scd.domain;
+
+import com.yunfeiyun.agmp.common.annotation.Excel;
+import lombok.Data;
+
+import java.util.Objects;
+
+@Data
+public class IotYfScdDataExportVo {
+    private static final long serialVersionUID = 1L;
+
+    @Excel(name = "设备编号")
+    private String devCode;
+
+    @Excel(name = "设备类型")
+    private String devTypeName;
+
+    @Excel(name = "工作状态")
+    private String workStatus;
+
+    @Excel(name = "雨控状态")
+    private String rainStatus;
+
+    @Excel(name = "温控状态")
+    private String tempStatus;
+
+    @Excel(name = "倾倒状态")
+    private String tippingStatus;
+
+    @Excel(name = "光控状态")
+    private String sunStatus;
+
+    @Excel(name = "电击次数")
+    private String electricCount;
+
+    @Excel(name = "记录时间")
+    private String scddataCreatedDate;
+
+    public String getWorkStatus() {
+        return workStatus;
+    }
+
+    public void setWorkStatus(String workStatus) {
+        this.workStatus = "待机";
+        if(workStatus.equals("1")){
+            this.workStatus = "工作";
+        }else if(workStatus.equals("2")){
+            this.workStatus = "充电";
+        }
+    }
+
+    public String getRainStatus() {
+        return rainStatus;
+    }
+
+    public void setRainStatus(String rainStatus) {
+        this.rainStatus = Objects.equals(rainStatus, "0") ? "正常": "保护";
+    }
+
+    public String getTempStatus() {
+        return tempStatus;
+    }
+
+    public void setTempStatus(String tempStatus) {
+        this.tempStatus = Objects.equals(tempStatus, "0") ? "正常": "保护";
+    }
+
+    public String getTippingStatus() {
+        return tippingStatus;
+    }
+
+    public void setTippingStatus(String tippingStatus) {
+        this.tippingStatus = Objects.equals(tippingStatus, "0") ? "正常": "保护";
+    }
+
+    public String getSunStatus() {
+        return sunStatus;
+    }
+
+    public void setSunStatus(String sunStatus) {
+        this.sunStatus = Objects.equals(sunStatus, "0") ? "正常": "保护";
+    }
+
+    public String getElectricCount() {
+        return electricCount;
+    }
+
+    public void setElectricCount(String electricCount) {
+        this.electricCount = electricCount;
+    }
+
+    public String getScddataCreatedDate() {
+        return scddataCreatedDate;
+    }
+
+    public void setScddataCreatedDate(String scddataCreatedDate) {
+        this.scddataCreatedDate = scddataCreatedDate;
+    }
+
+}

+ 16 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/scd/domain/IotYfScdPolylineResVo.java

@@ -0,0 +1,16 @@
+package com.yunfeiyun.agmp.iotm.device.scd.domain;
+
+import lombok.Data;
+
+/**
+ * 杀虫灯折线图数据
+ */
+@Data
+public class IotYfScdPolylineResVo {
+    private String ah;
+    private String at;
+    private String bv;
+    private String cv;
+    private String ct;
+    private String createDate;
+}

+ 39 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/scd/domain/IotYfScdStatusExportVo.java

@@ -0,0 +1,39 @@
+package com.yunfeiyun.agmp.iotm.device.scd.domain;
+
+import com.yunfeiyun.agmp.common.annotation.Excel;
+import lombok.Data;
+
+@Data
+public class IotYfScdStatusExportVo {
+    private static final long serialVersionUID = 1L;
+
+    @Excel(name = "设备编号")
+    private String devCode;
+
+    @Excel(name = "设备类型")
+    private String devTypeName;
+
+    @Excel(name = "温度")
+    private String at;
+
+    @Excel(name = "湿度")
+    private String ah;
+
+    @Excel(name = "电池电压")
+    private String bv;
+
+    @Excel(name = "充电电压")
+    private String cv;
+
+    @Excel(name = "记录时间")
+    private String scddataCreatedDate;
+
+    public String getScddataCreatedDate() {
+        return scddataCreatedDate;
+    }
+
+    public void setScddataCreatedDate(String scddataCreatedDate) {
+        this.scddataCreatedDate = scddataCreatedDate;
+    }
+
+}

+ 12 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/scd/service/IIotScdCommService.java

@@ -0,0 +1,12 @@
+package com.yunfeiyun.agmp.iotm.device.scd.service;
+
+import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceBaseService;
+import com.yunfeiyun.agmp.iotm.device.common.service.impl.IotDeviceBaseServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Service
+@Slf4j
+public class IIotScdCommService extends IotDeviceBaseServiceImpl implements IotDeviceBaseService {
+
+}

+ 444 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/scd/service/impl/IotYfScdServiceImpl.java

@@ -0,0 +1,444 @@
+package com.yunfeiyun.agmp.iotm.device.scd.service.impl;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yunfeiyun.agmp.common.constant.ErrorCode;
+import com.yunfeiyun.agmp.common.core.page.PageDomain;
+import com.yunfeiyun.agmp.common.core.page.TableDataInfo;
+import com.yunfeiyun.agmp.common.core.page.TableSupport;
+import com.yunfeiyun.agmp.common.log.LogCore;
+import com.yunfeiyun.agmp.common.utils.JSONUtils;
+import com.yunfeiyun.agmp.common.utils.StringUtils;
+import com.yunfeiyun.agmp.common.utils.poi.ExcelUtil;
+import com.yunfeiyun.agmp.common.utils.uuid.IdUtils;
+import com.yunfeiyun.agmp.iot.common.constant.IotErrorCode;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictConst;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
+import com.yunfeiyun.agmp.iot.common.domain.IotDeviceconfig;
+import com.yunfeiyun.agmp.iot.common.domain.IotYfScddata;
+import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
+import com.yunfeiyun.agmp.iot.common.model.cmd.CmdGroupModel;
+import com.yunfeiyun.agmp.iot.common.service.MongoService;
+import com.yunfeiyun.agmp.iotm.device.common.domin.DeviceRefreshDto;
+import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceDataListReqVo;
+import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceExportReqVo;
+import com.yunfeiyun.agmp.iotm.device.scd.domain.*;
+import com.yunfeiyun.agmp.iotm.device.scd.service.IIotScdCommService;
+import com.yunfeiyun.agmp.iotm.util.MongoUtil;
+import com.yunfeiyun.agmp.iotm.web.service.IIotCmdtaskService;
+import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceService;
+import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceconfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.aggregation.*;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+@Service(value = ServiceNameConst.SERVICE_YF_SCD)
+@Slf4j
+public class IotYfScdServiceImpl extends IIotScdCommService {
+    @Autowired
+    private IIotDeviceService iotDeviceService;
+
+    @Autowired
+    private MongoService mongoService;
+
+    @Autowired
+    private IIotCmdtaskService iIotCmdtaskService;
+
+    @Resource
+    private IIotDeviceconfigService iIotDeviceconfigService;
+
+    public TableDataInfo dataList(IotDeviceDataListReqVo reqVo) {
+        TableDataInfo rspData = new TableDataInfo();
+        rspData.setCode(ErrorCode.SUCCESS.getCode());
+        rspData.setMsg(ErrorCode.SUCCESS.getMessage());
+        rspData.setData(new ArrayList<>());
+        rspData.setTotal(0);
+
+        IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
+        if (findDevice == null) {
+            throw new IotBizException(ErrorCode.INVALID_PARAMETER.getCode(), "设备不存在");
+        }
+
+        String startTime = reqVo.getStartTime();
+        String endTime = reqVo.getEndTime();
+        if (startTime == null || endTime == null) {
+            throw new IotBizException(ErrorCode.INVALID_PARAMETER.getCode(), "请输入正确的起止时间");
+        }
+
+        Map<String, Object> cases = new HashMap<>();
+        cases.put("devBid", reqVo.getDevBid());
+        cases.put("time_scddataCreatedDate", startTime + "," + endTime);
+
+        PageDomain pageDomain = TableSupport.buildPageRequest();
+        pageDomain.setIsAsc("desc");
+        pageDomain.setOrderByColumn("scddataCreatedDate");
+        IPage<IotYfScddata> iotYfScddataIPage = mongoService.findListPage(IotYfScddata.class, cases, pageDomain);
+        rspData.setData(iotYfScddataIPage.getRecords());
+        rspData.setTotal(iotYfScddataIPage.getTotal());
+        return rspData;
+    }
+
+    /**
+     * 获取折线图数据列表接口
+     *
+     * @param reqVo
+     */
+    public List<IotYfScdPolylineResVo> chartList(IotDeviceDataListReqVo reqVo) {
+        String devBid = reqVo.getDevBid();
+        if (StringUtils.isEmpty(devBid)) {
+            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备标识不能为空");
+        }
+        String startDate = reqVo.getStartTime();
+        String endDate = reqVo.getEndTime();
+        if (StringUtils.isEmpty(startDate) && StringUtils.isEmpty(endDate)) {
+            throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(), "请输入正确的起止时间");
+        }
+
+        String unit = MongoUtil.getDateTruncUnit(startDate, endDate);
+        Criteria criteria = new Criteria().and("devBid").is(devBid);
+        criteria = criteria.andOperator(
+                Criteria.where("scddataCreatedDate").gte(startDate),
+                Criteria.where("scddataCreatedDate").lte(endDate)
+        );
+
+        /**
+         * $mtch {"devBid": devBid, "$add": [{"scddataCreatedDate": {"$gte": startDate}}, {"scddataCreatedDate": {"$lte": endDate}}]}
+         */
+        MatchOperation matchOperation = Aggregation.match(criteria);
+
+        /**
+         * $project
+         *      {
+         *          "ah": "$scddataContent.ah",
+         *          "createDate": "$scddataCreatedDate"
+         *      }
+         */
+        ProjectionOperation projectionOperation = Aggregation.project()
+                .and("scddataContent.ah").as("ah")
+                .and("scddataContent.at").as("at")
+                .and("scddataContent.bv").as("bv")
+                .and("scddataContent.cv").as("cv")
+                .and("scddataContent.ct").as("ct")
+                .and("scddataCreatedDate").as("createDate");
+        /**
+         * $project
+         *      {
+         *          "at": {$convert: {input: '$at', to: 'double', onError: -99, onNull: -99}},
+         *          "createDate": {$dateTrunc: {date: {$toDate: '$createDate'}, unit: 'minute'}}
+         *      }
+         */
+
+        ProjectionOperation projectionOperation2 = Aggregation.project()
+                .andExpression("{$convert: {input: '$ct', to: 'int', onError: -99, onNull: -99}}").as("ct")
+                .andExpression("{$convert: {input: '$at', to: 'double', onError: -99, onNull: -99}}").as("at")
+                .andExpression("{$convert: {input: '$ah', to: 'double', onError: -99, onNull: -99}}").as("ah")
+                .andExpression("{$convert: {input: '$bv', to: 'double', onError: -99, onNull: -99}}").as("bv")
+                .andExpression("{$convert: {input: '$cv', to: 'double', onError: -99, onNull: -99}}").as("cv")
+                .andExpression("{$dateTrunc: {date: {$toDate: '$createDate'}, unit:'" + unit + "'}}").as("createDate");
+
+        Criteria criteria2 = new Criteria()
+                .and("at").gt(-99)
+                .and("ah").gt(-99)
+                .and("bv").gt(-99)
+                .and("cv").gt(-99)
+                .and("ct").gt(-99);
+        MatchOperation matchOperation2 = Aggregation.match(criteria2);
+
+        /**
+         * {
+         *    "$group" : {
+         *       "_id" : "$createDate", "ah" : { "$avg" : "$ah"}, "at" : { "$avg" : "$at"}, "bv" : { "$avg" : "$bv"}, "cv" : { "$avg" : "$cv"}, "ct" : { "$sum" : "$ct"}
+         *    }
+         * }
+         */
+        GroupOperation groupOperation = Aggregation.group("createDate")
+                .avg("ah").as("ah")
+                .avg("at").as("at")
+                .avg("bv").as("bv")
+                .avg("cv").as("cv")
+                .sum("ct").as("ct");
+
+        /**
+         * { "$project" : { "ct" : 1, "bv" : { "$trunc" : ["$bv", 3]}, "createDate" : { "$dateToString" : { "format" : "%Y-%m-%d %H:%M:%S", "date" : "$_id"}}}}
+         */
+        ProjectionOperation projectionOperation3 = Aggregation.project("ct")
+                .andExpression("{$trunc: {'$bv', 3}}").as("bv")
+                .andExpression("{$trunc: {'$cv', 3}}").as("cv")
+                .andExpression("{$trunc: {'$ah', 1}}").as("ah")
+                .andExpression("{$trunc: {'$at', 1}}").as("at")
+                .andExpression("{$dateToString: {format: '%Y-%m-%d %H:%M:%S', date: '$_id'}}").as("createDate");
+
+        /**
+         * { "$sort" : { "createDate" : 1}}
+         */
+        SortOperation sortOperation = Aggregation.sort(Sort.Direction.ASC, "createDate");
+
+        Aggregation aggregation = Aggregation.newAggregation(
+                matchOperation,
+                projectionOperation,
+                projectionOperation2,
+                matchOperation2,
+                groupOperation,
+                projectionOperation3,
+                sortOperation
+        );
+        List<IotYfScdPolylineResVo> iotYfScdPolylineResVoList = mongoService.aggregate(
+                IotYfScddata.class, aggregation, IotYfScdPolylineResVo.class
+        );
+        return iotYfScdPolylineResVoList;
+    }
+
+    /**
+     * 刷新指令集
+     *
+     * @param reqVo
+     */
+    public void refresh(DeviceRefreshDto reqVo) {
+
+        IotDevice findDevice = reqVo.getIotDevice();
+        String devBid = findDevice.getDevBid();
+        log.info("创建【“刷新”指令集任务】,设备类型:{}", findDevice.getDevtypeName());
+        JSONObject payload = new JSONObject();
+        payload.put("cmd", "read");
+        payload.put("ext", "data");
+        IotDeviceconfig iotDeviceconfig = new IotDeviceconfig();
+        iotDeviceconfig.setTid(findDevice.getTid());
+        iotDeviceconfig.setDevBid(devBid);
+        iotDeviceconfig.setDevcfgContext(JSONUtils.toJSONString(payload));
+
+        CmdGroupModel cmdGroupModel = iIotDeviceconfigService.createRefreshCmd(iotDeviceconfig);
+
+        // 构建日志需要用的内容
+        cmdGroupModel.setRequestId(IdUtils.fastUUID());
+        cmdGroupModel.setDevCode(findDevice.getDevCode());
+        cmdGroupModel.setCtBiztype("3");
+        cmdGroupModel.setCtDevtype(findDevice.getDevtypeBid());
+        cmdGroupModel.setCtBiztitle(findDevice.getDevtypeName() + ":" + findDevice.getDevCode());
+        cmdGroupModel.setCtParam("设备id:" + devBid);
+        iIotCmdtaskService.handInternalCmd(cmdGroupModel);
+        String taskUuid = cmdGroupModel.getTaskUuid();
+        log.info("【“刷新”指令集任务】创建成功,taskUuid:{}", taskUuid);
+    }
+
+    /**
+     * 数据导出列表
+     */
+    public List<IotYfScddata> getExportDataList(IotDeviceDataListReqVo reqVo) {
+        String startTime = reqVo.getStartTime();
+        String endTime = reqVo.getEndTime();
+
+        Map<String, Object> mapParam = new HashMap<>();
+        mapParam.put("devBid", reqVo.getDevBid());
+        mapParam.put("time_scddataCreatedDate", startTime + "," + endTime);
+        List<IotYfScddata> iotYfScddataList = mongoService.findAll(IotYfScddata.class, mapParam, "scddataCreatedDate desc");
+        return iotYfScddataList;
+    }
+
+    /**
+     * 数据导出
+     *
+     * @param iotDeviceExportReqVo
+     */
+    public void dataExport(IotDeviceExportReqVo iotDeviceExportReqVo) {
+        HttpServletResponse response = iotDeviceExportReqVo.getResponse();
+        IotDeviceDataListReqVo reqVo = iotDeviceExportReqVo.getReqVo();
+
+        String devBid = reqVo.getDevBid();
+        String startTime = reqVo.getStartTime();
+        String endTime = reqVo.getEndTime();
+        String[] params = {devBid, startTime, endTime};
+        for (String k : params) {
+            if (StringUtils.isEmpty(k)) {
+                throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(), "参数不能为空");
+            }
+        }
+
+        IotDeviceDataListReqVo iotDeviceDataListReqVo = new IotDeviceDataListReqVo();
+        iotDeviceDataListReqVo.setDevBid(devBid);
+        iotDeviceDataListReqVo.setStartTime(startTime);
+        iotDeviceDataListReqVo.setEndTime(endTime);
+
+        IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
+        if (findDevice == null) {
+            throw new IotBizException(ErrorCode.INVALID_PARAMETER.getCode(), "设备不存在");
+        }
+
+        List<IotYfScddata> iotYfScddataList = getExportDataList(iotDeviceDataListReqVo);
+        if (Objects.equals(findDevice.getDevtypeBid(), IotDeviceDictConst.TYPE_YF_SCD)) {
+            List<IotYfScdDataExportVo> exportVoList = new ArrayList<>();
+            for (IotYfScddata iotYfScddata : iotYfScddataList) {
+                JSONObject jsonObject = iotYfScddata.getScddataContent();
+                IotYfScdDataExportVo exportVo = new IotYfScdDataExportVo();
+                exportVo.setDevCode(findDevice.getDevCode());
+                exportVo.setDevTypeName(findDevice.getDevtypeName());
+                exportVo.setElectricCount(jsonObject.getString("ct"));
+                exportVo.setRainStatus(jsonObject.getString("rps"));
+                exportVo.setSunStatus(jsonObject.getString("lps"));
+                exportVo.setTempStatus(jsonObject.getString("tps"));
+                exportVo.setTippingStatus(jsonObject.getString("dps"));
+                exportVo.setWorkStatus(jsonObject.getString("ws"));
+                exportVo.setScddataCreatedDate(iotYfScddata.getScddataCreatedDate());
+                exportVoList.add(exportVo);
+            }
+            //初始化 表头,需要附加 最近数据 中的要素名称
+
+            ExcelUtil<IotYfScdDataExportVo> util = new ExcelUtil<>(IotYfScdDataExportVo.class);
+            util.exportExcel(response, exportVoList, "设备数据");
+        } else {
+            List<IotYfFxsScdDataExportVo> exportVoList = new ArrayList<>();
+            for (IotYfScddata iotYfScddata : iotYfScddataList) {
+                JSONObject jsonObject = iotYfScddata.getScddataContent();
+                IotYfFxsScdDataExportVo exportVo = new IotYfFxsScdDataExportVo();
+                exportVo.setDevCode(findDevice.getDevCode());
+                exportVo.setDevTypeName(findDevice.getDevtypeName());
+                exportVo.setRainStatus(jsonObject.getString("rps"));
+                exportVo.setSunStatus(jsonObject.getString("lps"));
+                exportVo.setTempStatus(jsonObject.getString("tps"));
+                exportVo.setTippingStatus(jsonObject.getString("dps"));
+                exportVo.setWorkStatus(jsonObject.getString("ws"));
+                exportVo.setScddataCreatedDate(iotYfScddata.getScddataCreatedDate());
+                exportVoList.add(exportVo);
+            }
+
+            //初始化 表头,需要附加 最近数据 中的要素名称
+            ExcelUtil<IotYfFxsScdDataExportVo> util = new ExcelUtil<>(IotYfFxsScdDataExportVo.class);
+            util.exportExcel(response, exportVoList, "设备数据");
+        }
+    }
+
+    /**
+     * 状态导出
+     *
+     * @param iotDeviceExportReqVo
+     */
+    public void statusExport(IotDeviceExportReqVo iotDeviceExportReqVo) {
+        HttpServletResponse response = iotDeviceExportReqVo.getResponse();
+        IotDeviceDataListReqVo reqVo = iotDeviceExportReqVo.getReqVo();
+
+        String devBid = reqVo.getDevBid();
+        String startTime = reqVo.getStartTime();
+        String endTime = reqVo.getEndTime();
+        String[] params = {devBid, startTime, endTime};
+        for (String k : params) {
+            if (StringUtils.isEmpty(k)) {
+                throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(), "参数不能为空");
+            }
+        }
+
+        IotDeviceDataListReqVo iotDeviceDataListReqVo = new IotDeviceDataListReqVo();
+        iotDeviceDataListReqVo.setDevBid(devBid);
+        iotDeviceDataListReqVo.setStartTime(startTime);
+        iotDeviceDataListReqVo.setEndTime(endTime);
+
+        IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
+        if (findDevice == null) {
+            throw new IotBizException(ErrorCode.INVALID_PARAMETER.getCode(), "设备不存在");
+        }
+
+        List<IotYfScddata> iotYfScddataList = getExportDataList(iotDeviceDataListReqVo);
+        List<IotYfScdStatusExportVo> exportVoList = new ArrayList<>();
+        for (IotYfScddata iotYfScddata : iotYfScddataList) {
+            JSONObject jsonObject = iotYfScddata.getScddataContent();
+            IotYfScdStatusExportVo exportVo = new IotYfScdStatusExportVo();
+            exportVo.setDevCode(findDevice.getDevCode());
+            exportVo.setDevTypeName(findDevice.getDevtypeName());
+            exportVo.setAh(jsonObject.getString("ah"));
+            exportVo.setAt(jsonObject.getString("at"));
+            exportVo.setCv(jsonObject.getString("cv"));
+            exportVo.setBv(jsonObject.getString("bv"));
+            exportVo.setScddataCreatedDate(iotYfScddata.getScddataCreatedDate());
+            exportVoList.add(exportVo);
+        }
+        //初始化 表头,需要附加 最近数据 中的要素名称
+
+        ExcelUtil<IotYfScdStatusExportVo> util = new ExcelUtil<>(IotYfScdStatusExportVo.class);
+        util.exportExcel(response, exportVoList, "状态数据");
+    }
+
+    public JSONObject configInfo(IotDeviceDataListReqVo reqVo){
+        String devBid = reqVo.getDevBid();
+        if(StringUtils.isEmpty(devBid)){
+            throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"参数不能为空");
+        }
+        IotDevice iotDevice = iotDeviceService.selectIotDeviceByDevBid(devBid);
+        if(iotDevice == null){
+            throw new IotBizException(ErrorCode.INVALID_PARAMETER.getCode(),"设备不存在");
+        }
+        IotDeviceconfig iotDeviceconfig = iIotDeviceconfigService.selectIotDeviceConfigByDevBid(devBid);
+        JSONObject jsonObject = new JSONObject();
+        if(iotDeviceconfig != null){
+            jsonObject = JSONObject.parseObject(iotDeviceconfig.getDevcfgContext());
+        }
+        return jsonObject;
+    }
+
+    public String sendConfigCmd(IotScdConfigEditReqVo reqVo){
+        IotDevice iotDevice = reqVo.getIotDevice();
+        String devBid = iotDevice.getDevBid();
+        IotScdConfig iotScdConfig = reqVo.getIotScdConfig();
+        if(iotScdConfig == null){
+            throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"参数不能为空");
+        }
+
+        IotDeviceconfig iotDeviceconfig = iIotDeviceconfigService.selectIotDeviceConfigByDevBid(devBid);
+        if (null == iotDeviceconfig) {
+            // 如果测报灯配置为空,则新增测报灯配置
+            iotDeviceconfig = new IotDeviceconfig();
+            iotDeviceconfig.setDevcfgBid(iotDeviceconfig.getUUId());
+            iotDeviceconfig.setTid(iotDevice.getTid());
+            iotDeviceconfig.setDevBid(devBid);
+            iotDeviceconfig.setDevcfgContext(JSONUtils.toJSONString(iotScdConfig));
+            iotDeviceconfig.setDevcfgDelstatus("0");
+            iIotDeviceconfigService.insertIotDeviceconfig(iotDeviceconfig);
+        } else {
+            // 如果测报灯配置不为空,则更新测报灯配置
+            iotDeviceconfig.setDevcfgContext(JSONUtils.toJSONString(iotScdConfig));
+            iIotDeviceconfigService.updateIotDeviceconfig(iotDeviceconfig);
+        }
+
+        CmdGroupModel cmdGroupModel = iIotDeviceconfigService.createConfigCmd(iotDeviceconfig);
+        log.info("【{}】【杀虫灯 [下发配置]】【构建 cmdGroupModel】{}", LogCore.getSeq(), JSONUtils.toJSONString(cmdGroupModel));
+        cmdGroupModel.setRequestId(IdUtils.fastUUID());
+
+        // 适配增加详细日志使用
+        cmdGroupModel.setDevCode(iotDevice.getDevCode());
+        cmdGroupModel.setCtBiztitle(iotDevice.getDevtypeName() + ":" + iotDevice.getDevCode());
+        cmdGroupModel.setCtBiztype("3");
+        cmdGroupModel.setCtDevtype(iotDevice.getDevtypeBid());
+        cmdGroupModel.setCtParam(JSONUtils.toJSONString(reqVo));
+        iIotCmdtaskService.handInternalCmd(cmdGroupModel);
+        return cmdGroupModel.getTaskUuid();
+    }
+
+    public String clearPest(IotScdClearPestDto iotScdClearPestDto){
+        IotDevice iotDevice = iotScdClearPestDto.getIotDevice();
+
+        JSONObject payload = new JSONObject();
+        payload.put("cmd", "ctr_clear");
+
+        IotDeviceconfig iotDeviceconfig = new IotDeviceconfig();
+        iotDeviceconfig.setDevBid(iotDevice.getDevBid());
+        iotDeviceconfig.setDevcfgContext(JSONUtils.toJSONString(payload));
+
+        CmdGroupModel cmdGroupModel = iIotDeviceconfigService.createCommonCmd(iotDeviceconfig);
+        log.info("【{}】【杀虫灯 [一键清虫]】【构建 cmdGroupModel】{}", LogCore.getSeq(), JSONUtils.toJSONString(cmdGroupModel));
+        cmdGroupModel.setRequestId(IdUtils.fastUUID());
+
+        // 适配增加详细日志使用
+        cmdGroupModel.setDevCode(iotDevice.getDevCode());
+        cmdGroupModel.setCtBiztitle(iotDevice.getDevtypeName() + ":" + iotDevice.getDevCode());
+        cmdGroupModel.setCtBiztype("3");
+        cmdGroupModel.setCtDevtype(iotDevice.getDevtypeBid());
+//        cmdGroupModel.setCtParam(JSONUtils.toJSONString(iotDeviceconfig));
+        iIotCmdtaskService.handInternalCmd(cmdGroupModel);
+        return cmdGroupModel.getTaskUuid();
+    }
+}

+ 2 - 0
src/main/java/com/yunfeiyun/agmp/iotm/web/service/IIotDeviceconfigService.java

@@ -79,6 +79,8 @@ public interface IIotDeviceconfigService {
 
 
     public CmdGroupModel createRefreshCmd(IotDeviceconfig iotDeviceconfig);
     public CmdGroupModel createRefreshCmd(IotDeviceconfig iotDeviceconfig);
 
 
+    public CmdGroupModel createCommonCmd(IotDeviceconfig iotDeviceconfig);
+
     /**
     /**
      * 构造一个 “通用配置指令集”执行任务,提交IOTS执行
      * 构造一个 “通用配置指令集”执行任务,提交IOTS执行
      *
      *

+ 1 - 0
src/main/java/com/yunfeiyun/agmp/iotm/web/service/impl/IotCmdtaskServiceImpl.java

@@ -130,6 +130,7 @@ public class IotCmdtaskServiceImpl implements IIotCmdtaskService {
         iotCmdtask.setCtBiztype(cmdGroupModel.getCtBiztype());
         iotCmdtask.setCtBiztype(cmdGroupModel.getCtBiztype());
         iotCmdtask.setCtDevtype(cmdGroupModel.getCtDevtype());
         iotCmdtask.setCtDevtype(cmdGroupModel.getCtDevtype());
         iotCmdtask.setCtParam(cmdGroupModel.getCtParam());
         iotCmdtask.setCtParam(cmdGroupModel.getCtParam());
+        iotCmdtask.setCtCreateddate(DateUtils.dateTimeNow());
         // 只有是指令日志的才标记,有些地方混用了这张表
         // 只有是指令日志的才标记,有些地方混用了这张表
         if (!StringUtils.isEmpty(cmdGroupModel.getCtBiztype())) {
         if (!StringUtils.isEmpty(cmdGroupModel.getCtBiztype())) {
             iotCmdtask.setCtLogtype(1);
             iotCmdtask.setCtLogtype(1);

+ 10 - 1
src/main/java/com/yunfeiyun/agmp/iotm/web/service/impl/IotDeviceconfigServiceImpl.java

@@ -6,7 +6,6 @@ import com.yunfeiyun.agmp.common.log.LogCore;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
 import com.yunfeiyun.agmp.common.utils.uuid.IdUtils;
 import com.yunfeiyun.agmp.common.utils.uuid.IdUtils;
-import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceTypeLv1Enum;
 import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
 import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
 import com.yunfeiyun.agmp.iot.common.domain.IotDeviceconfig;
 import com.yunfeiyun.agmp.iot.common.domain.IotDeviceconfig;
 import com.yunfeiyun.agmp.iot.common.model.cmd.CmdGroupModel;
 import com.yunfeiyun.agmp.iot.common.model.cmd.CmdGroupModel;
@@ -192,6 +191,16 @@ public class IotDeviceconfigServiceImpl implements IIotDeviceconfigService {
         return createCmd(iotDeviceconfig, "refresh");
         return createCmd(iotDeviceconfig, "refresh");
     }
     }
 
 
+    /**
+     * 通用配置
+     * @param iotDeviceconfig
+     * @return
+     */
+    @Override
+    public CmdGroupModel createCommonCmd(IotDeviceconfig iotDeviceconfig) {
+        return createCmd(iotDeviceconfig, "common");
+    }
+
     public CmdGroupModel createCmd(IotDeviceconfig iotDeviceconfig, String func) {
     public CmdGroupModel createCmd(IotDeviceconfig iotDeviceconfig, String func) {
         CmdGroupModel cmdGroupModel = new CmdGroupModel();
         CmdGroupModel cmdGroupModel = new CmdGroupModel();
         cmdGroupModel.setTid(iotDeviceconfig.getTid());
         cmdGroupModel.setTid(iotDeviceconfig.getTid());