Quellcode durchsuchen

新增 杀虫灯状态数据导出接口

zhaiyifei vor 1 Jahr
Ursprung
Commit
4ae3a1e534

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

@@ -4,7 +4,7 @@ import lombok.Data;
 
 /**
  * 设备基础对象 IotDevice
- *
+ * 
  * @author 杨晓辉
  * @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();
         long diffTime = nowDate.getTime() - createdDate.getTime();
         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(), "设备离线无法操作");
             }
         }

+ 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.service.IotDeviceCommonService;
 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.web.domain.reqvo.IotDeviceListReqVo;
 import com.yunfeiyun.agmp.iotm.web.domain.resvo.IotDeviceListResVo;
@@ -92,7 +91,7 @@ public class IotDeviceQxzController extends BaseController {
      * @return
      */
     @GetMapping("/data/list")
-    public TableDataInfo dataList(IotDeviceQxzDataListReqVo reqVo) {
+    public TableDataInfo dataList(IotDeviceDataListReqVo reqVo) {
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
         iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
         iotDeviceBaseFunReqVo.setMethodName("dataList");
@@ -106,7 +105,7 @@ public class IotDeviceQxzController extends BaseController {
      * @return
      */
     @GetMapping("/chart/list")
-    public AjaxResult chartList(IotDeviceQxzDataListReqVo reqVo) {
+    public AjaxResult chartList(IotDeviceDataListReqVo reqVo) {
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
         iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
         iotDeviceBaseFunReqVo.setMethodName("chartList");
@@ -122,7 +121,7 @@ public class IotDeviceQxzController extends BaseController {
      */
     @GetMapping("/data/last24h/{devBid}")
     public AjaxResult dataList24h(@PathVariable("devBid") String devBid) {
-        IotDeviceQxzDataListReqVo reqVo = new IotDeviceQxzDataListReqVo();
+        IotDeviceDataListReqVo reqVo = new IotDeviceDataListReqVo();
         reqVo.setDevBid(devBid);
 
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
@@ -139,7 +138,7 @@ public class IotDeviceQxzController extends BaseController {
      */
     @GetMapping("/data/dataLatest/{devBid}")
     public AjaxResult dataLatest(@PathVariable("devBid") String devBid) {
-        IotDeviceQxzDataListReqVo reqVo = new IotDeviceQxzDataListReqVo();
+        IotDeviceDataListReqVo reqVo = new IotDeviceDataListReqVo();
         reqVo.setDevBid(devBid);
 
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
@@ -172,15 +171,15 @@ public class IotDeviceQxzController extends BaseController {
             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.setDevBid(reqVo.getDevBid());
         iotDeviceBaseFunReqVo.setMethodName("dataList");
-        iotDeviceBaseFunReqVo.setParam(iotDeviceQxzDataListReqVo);
+        iotDeviceBaseFunReqVo.setParam(iotDeviceDataListReqVo);
         TableDataInfo tableDataInfo = iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
 
         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;
-
-}

+ 6 - 6
src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/service/IIotQxzCommService.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.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.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;
@@ -84,7 +84,7 @@ public class IIotQxzCommService extends IotDeviceBaseServiceImpl implements IotD
      * @param isNow
      * @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();
         rspData.setCode(ErrorCode.SUCCESS.getCode());
         rspData.setMsg(ErrorCode.SUCCESS.getMessage());
@@ -150,7 +150,7 @@ public class IIotQxzCommService extends IotDeviceBaseServiceImpl implements IotD
         return rspData;
     }
 
-    public TableDataInfo dataList(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
+    public TableDataInfo dataList(IotDeviceDataListReqVo reqVo) throws ParseException {
         return dataList(reqVo, true, false);
     }
 
@@ -158,7 +158,7 @@ public class IIotQxzCommService extends IotDeviceBaseServiceImpl implements IotD
      * 获取折线图数据列表接口
      * @param reqVo
      */
-    public List<IotQxzDataListRseVo> chartList(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
+    public List<IotQxzDataListRseVo> chartList(IotDeviceDataListReqVo reqVo) throws ParseException {
 
         //1、查出总条数 2、查出“符合条件的、当前页的”数据 3、json结构重组(如果需要的话) 4、附加 要素自定义 信息
 
@@ -256,7 +256,7 @@ public class IIotQxzCommService extends IotDeviceBaseServiceImpl implements IotD
      * @param reqVo
      * @return
      */
-    public List<IotQxzDataListRseVo> dataList24h(IotDeviceQxzDataListReqVo reqVo){
+    public List<IotQxzDataListRseVo> dataList24h(IotDeviceDataListReqVo reqVo){
         String devBid = reqVo.getDevBid();
         long endTime = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.dateNow()).getTime();
         long begintime = endTime-86400000;
@@ -347,7 +347,7 @@ public class IIotQxzCommService extends IotDeviceBaseServiceImpl implements IotD
      * @param reqVo
      * @return
      */
-    public IotDevicelasteddata dataLatest(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
+    public IotDevicelasteddata dataLatest(IotDeviceDataListReqVo reqVo) throws ParseException {
         String devBid = reqVo.getDevBid();
 
         IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());

+ 32 - 7
src/main/java/com/yunfeiyun/agmp/iotm/device/scd/controller/IotDeviceScdController.java

@@ -6,21 +6,20 @@ import com.yunfeiyun.agmp.common.core.page.TableDataInfo;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictConst;
 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.qxsqz.domain.IotDeviceQxzDataListReqVo;
 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.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+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.List;
 
@@ -78,7 +77,7 @@ public class IotDeviceScdController extends BaseController {
      * @return
      */
     @GetMapping("/data/list")
-    public TableDataInfo dataList(IotDeviceQxzDataListReqVo reqVo) {
+    public TableDataInfo dataList(IotDeviceDataListReqVo reqVo) {
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
         iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
         iotDeviceBaseFunReqVo.setMethodName("dataList");
@@ -92,7 +91,7 @@ public class IotDeviceScdController extends BaseController {
      * @return
      */
     @GetMapping("/chart/list")
-    public AjaxResult chartList(IotDeviceQxzDataListReqVo reqVo) {
+    public AjaxResult chartList(IotDeviceDataListReqVo reqVo) {
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
         iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
         iotDeviceBaseFunReqVo.setMethodName("chartList");
@@ -107,4 +106,30 @@ public class IotDeviceScdController extends BaseController {
         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);
+    }
+
 }

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

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

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

@@ -8,8 +8,10 @@ import com.yunfeiyun.agmp.common.core.page.TableDataInfo;
 import com.yunfeiyun.agmp.common.core.page.TableSupport;
 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;
@@ -18,8 +20,12 @@ 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.qxsqz.domain.IotDeviceQxzDataListReqVo;
+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.IotYfFxsScdDataExportVo;
+import com.yunfeiyun.agmp.iotm.device.scd.domain.IotYfScdDataExportVo;
 import com.yunfeiyun.agmp.iotm.device.scd.domain.IotYfScdPolylineResVo;
+import com.yunfeiyun.agmp.iotm.device.scd.domain.IotYfScdStatusExportVo;
 import com.yunfeiyun.agmp.iotm.device.scd.service.IIotScdCommService;
 import com.yunfeiyun.agmp.iotm.util.MongoUtil;
 import com.yunfeiyun.agmp.iotm.web.service.IIotCmdtaskService;
@@ -33,11 +39,8 @@ import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
 
 @Service(value = ServiceNameConst.SERVICE_YF_SCD)
 @Slf4j
@@ -54,24 +57,23 @@ public class IotYfScdServiceImpl extends IIotScdCommService {
     @Resource
     private IIotDeviceconfigService iIotDeviceconfigService;
 
-    /**
-     * 获取数据列表接口
-     *
-     */
-    public TableDataInfo dataList(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
+    public TableDataInfo dataList(IotDeviceDataListReqVo reqVo, boolean isCheckDevice) {
         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(), "设备不存在");
+        if (isCheckDevice) {
+            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){
+        if (startTime == null || endTime == null) {
             throw new IotBizException(ErrorCode.INVALID_PARAMETER.getCode(), "请输入正确的起止时间");
         }
 
@@ -87,10 +89,18 @@ public class IotYfScdServiceImpl extends IIotScdCommService {
     }
 
     /**
+     * 获取数据列表接口
+     */
+    public TableDataInfo dataList(IotDeviceDataListReqVo reqVo) {
+        return dataList(reqVo, true);
+    }
+
+    /**
      * 获取折线图数据列表接口
+     *
      * @param reqVo
      */
-    public List<IotYfScdPolylineResVo> chartList(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
+    public List<IotYfScdPolylineResVo> chartList(IotDeviceDataListReqVo reqVo) {
         String devBid = reqVo.getDevBid();
         if (StringUtils.isEmpty(devBid)) {
             throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备标识不能为空");
@@ -197,6 +207,7 @@ public class IotYfScdServiceImpl extends IIotScdCommService {
 
     /**
      * 刷新指令集
+     *
      * @param reqVo
      */
     public void refresh(DeviceRefreshDto reqVo) {
@@ -220,9 +231,132 @@ public class IotYfScdServiceImpl extends IIotScdCommService {
         cmdGroupModel.setCtBiztype("3");
         cmdGroupModel.setCtDevtype(findDevice.getDevtypeBid());
         cmdGroupModel.setCtBiztitle(findDevice.getDevtypeName() + ":" + findDevice.getDevCode());
-        cmdGroupModel.setCtParam("设备id:"+devBid);
+        cmdGroupModel.setCtParam("设备id:" + devBid);
         iIotCmdtaskService.handInternalCmd(cmdGroupModel);
         String taskUuid = cmdGroupModel.getTaskUuid();
         log.info("【“刷新”指令集任务】创建成功,taskUuid:{}", taskUuid);
     }
+
+    /**
+     * 数据导出
+     *
+     * @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(), "设备不存在");
+        }
+
+        TableDataInfo tableDataInfo = dataList(iotDeviceDataListReqVo, false);
+        List<IotYfScddata> iotYfScddataList = (List<IotYfScddata>) tableDataInfo.getData();
+        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(), "设备不存在");
+        }
+
+        TableDataInfo tableDataInfo = dataList(iotDeviceDataListReqVo, false);
+        List<IotYfScddata> iotYfScddataList = (List<IotYfScddata>) tableDataInfo.getData();
+        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, "状态数据");
+    }
 }