Explorar o código

新增 气象站,墒情站数据列表导出功能

zhaiyifei hai 1 ano
pai
achega
bab6ce9c9c

+ 66 - 4
src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/controller/IotDeviceQxzController.java

@@ -1,26 +1,34 @@
 package com.yunfeiyun.agmp.iotm.device.qxsqz.controller;
 
+import com.yunfeiyun.agmp.common.annotation.Excel;
 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.utils.StringUtils;
+import com.yunfeiyun.agmp.common.utils.poi.SensdataExcelUtil;
+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.domain.IotQxzDataListRseVo;
+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.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;
 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.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -138,4 +146,58 @@ public class IotDeviceQxzController extends BaseController {
         String result = iotDeviceRefreshService.refresh(devBid);
         return new AjaxResult(ErrorCode.SUCCESS.getCode(), result, null);
     }
+
+    @PostMapping("/data/export")
+    public void dataExport(HttpServletResponse response, @RequestBody IotDeviceDataListReqVo reqVo){
+        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(), "参数不能为空");
+            }
+        }
+
+        IotDevice iotDevice = iIotDeviceService.selectIotDeviceByDevBid(devBid);
+        if(iotDevice == null){
+            throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(), "设备不存在");
+        }
+
+        IotDeviceQxzDataListReqVo iotDeviceQxzDataListReqVo = new IotDeviceQxzDataListReqVo();
+        iotDeviceQxzDataListReqVo.setDevBid(devBid);
+        iotDeviceQxzDataListReqVo.setStartTime(startTime);
+        iotDeviceQxzDataListReqVo.setEndTime(endTime);
+
+        IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
+        iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
+        iotDeviceBaseFunReqVo.setMethodName("dataList");
+        iotDeviceBaseFunReqVo.setParam(iotDeviceQxzDataListReqVo);
+        TableDataInfo tableDataInfo = iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
+
+        List<List<IotQxzDataListRseVo>> dataList = (List<List<IotQxzDataListRseVo>>) tableDataInfo.getData();
+        List<IotQxzDataListRseVo> iotQxzDataListRseVoList = dataList.get(0);
+
+        //使用数据初始化excel
+        //动态加入列
+        //导出(处理动态加入列的数据)
+        List<QxzExportDataDto> exportDataDtoList = new ArrayList<>();
+        for(List<IotQxzDataListRseVo> item: dataList){
+            QxzExportDataDto qxzExportDataDto = new QxzExportDataDto();
+            IotQxzDataListRseVo dataItem = item.get(0);
+            qxzExportDataDto.setTimeStr(dataItem.getTime());
+            qxzExportDataDto.setDataList(item);
+            qxzExportDataDto.setDevCode(iotDevice.getDevCode());
+            qxzExportDataDto.setDevtypeName(iotDevice.getDevtypeName());
+            exportDataDtoList.add(qxzExportDataDto);
+        }
+
+        //初始化 表头,需要附加 最近数据 中的要素名称
+        SensdataExcelUtil<QxzExportDataDto> util = new SensdataExcelUtil<>(QxzExportDataDto.class, iotQxzDataListRseVoList);
+        util.init(exportDataDtoList, "设备数据",StringUtils.EMPTY, Excel.Type.EXPORT);
+
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        util.exportExcel(response);
+    }
 }

+ 30 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/domain/QxzExportDataDto.java

@@ -0,0 +1,30 @@
+package com.yunfeiyun.agmp.iotm.device.qxsqz.domain;
+
+import com.yunfeiyun.agmp.common.annotation.Excel;
+import com.yunfeiyun.agmp.iot.common.domain.IotQxzDataListRseVo;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class QxzExportDataDto {
+    private String id;
+
+    //@Excel(name = "设备ID")
+    private String devBid;
+
+    @Excel(name = "设备编号")
+    private String devCode;
+
+    @Excel(name = "设备类型")
+    private String devtypeName;
+
+    @Excel(name = "采集时间")
+    private String timeStr;
+
+    /**
+     * (本分钟)每个上报数据要素详情
+     */
+    @Excel(name = "采集数据")
+    private List<IotQxzDataListRseVo> dataList;
+}

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

@@ -370,4 +370,6 @@ public class IotYfQxzServiceImpl extends IotDeviceBaseServiceImpl implements Iot
         String taskUuid = cmdGroupModel.getTaskUuid();
         log.info("【“刷新”指令集任务】创建成功,taskUuid:{}", taskUuid);
     }
+
+
 }