|
@@ -1,5 +1,8 @@
|
|
|
package com.jiayue.ipp.idp.controller;
|
|
|
|
|
|
+import cn.hutool.core.io.IoUtil;
|
|
|
+import cn.hutool.poi.excel.ExcelUtil;
|
|
|
+import cn.hutool.poi.excel.ExcelWriter;
|
|
|
import com.baomidou.mybatisplus.core.metadata.OrderItem;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
@@ -10,9 +13,15 @@ import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import org.springframework.security.access.prepost.PreAuthorize;
|
|
|
+import org.springframework.security.core.parameters.P;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
-import java.util.Date;
|
|
|
+import javax.servlet.ServletOutputStream;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.net.URLEncoder;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.*;
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -109,4 +118,148 @@ public class NwpController {
|
|
|
return R.ok(nwpService.removeById(id));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 导出
|
|
|
+ */
|
|
|
+ @GetMapping("/exportDataEvent/{startTime}/{endTime}/{stationCode}")
|
|
|
+ public R exportDataEvent(
|
|
|
+ @PathVariable("startTime") Long startTime,
|
|
|
+ @PathVariable("endTime") Long endTime,
|
|
|
+ @PathVariable("stationCode") String stationCode,
|
|
|
+ HttpServletResponse response
|
|
|
+ ){
|
|
|
+ try {
|
|
|
+ Map<String, List> dataMap = nwpService.getCompositeData(stationCode, new Date(startTime), new Date(endTime));
|
|
|
+
|
|
|
+ List<String> headers = Arrays.asList(
|
|
|
+ "所属场站", "预测时间", "温度", "湿度", "气压", "短波辐射", "直辐射", "散辐射",
|
|
|
+ "10米风速", "30米风速", "50米风速", "70米风速", "80米风速", "90米风速", "100米风速", "110米风速", "120米风速", "130米风速", "140米风速", "150米风速", "170米风速",
|
|
|
+ "10米风向", "30米风向", "50米风向", "70米风向", "80米风向", "90米风向", "100米风向", "110米风向", "120米风向", "130米风向", "140米风向", "150米风向", "170米风向",
|
|
|
+ "降水总量"
|
|
|
+ );
|
|
|
+
|
|
|
+ List<List<?>> excelData = new ArrayList<>();
|
|
|
+ excelData.add(headers); // 添加表头
|
|
|
+
|
|
|
+ // 3. 从 dataMap 中获取各字段数据列表
|
|
|
+ List<?> stationNameList = dataMap.get("stationName"); // 所属场站名称列表
|
|
|
+ List<?> preTimeList = dataMap.get("preTime"); // 预测时间列表
|
|
|
+ List<?> tList = dataMap.get("t"); // 温度列表
|
|
|
+ List<?> rhList = dataMap.get("rh"); // 湿度列表
|
|
|
+ List<?> pressureList = dataMap.get("pressure"); // 气压列表
|
|
|
+ List<?> swrList = dataMap.get("swr"); // 短波辐射列表
|
|
|
+ List<?> directRadiationList = dataMap.get("directRadiation"); // 直辐射列表
|
|
|
+ List<?> diffuseRadiationList = dataMap.get("diffuseRadiation"); // 散辐射列表
|
|
|
+
|
|
|
+ List<?> ws10List = dataMap.get("ws10"); // 10米风速列表
|
|
|
+ List<?> ws30List = dataMap.get("ws30"); // 30米风速列表
|
|
|
+ List<?> ws50List = dataMap.get("ws50"); // 50米风速列表
|
|
|
+ List<?> ws70List = dataMap.get("ws70"); // 70米风速列表
|
|
|
+ List<?> ws80List = dataMap.get("ws80"); // 80米风速列表
|
|
|
+ List<?> ws90List = dataMap.get("ws90"); // 90米风速列表
|
|
|
+ List<?> ws100List = dataMap.get("ws100"); // 100米风速列表
|
|
|
+ List<?> ws110List = dataMap.get("ws110"); // 110米风速列表
|
|
|
+ List<?> ws120List = dataMap.get("ws120"); // 120米风速列表
|
|
|
+ List<?> ws130List = dataMap.get("ws130"); // 130米风速列表
|
|
|
+ List<?> ws140List = dataMap.get("ws140"); // 140米风速列表
|
|
|
+ List<?> ws150List = dataMap.get("ws150"); // 150米风速列表
|
|
|
+ List<?> ws170List = dataMap.get("ws170"); // 170米风速列表
|
|
|
+
|
|
|
+ List<?> wd10List = dataMap.get("wd10"); // 10米风向列表
|
|
|
+ List<?> wd30List = dataMap.get("wd30"); // 30米风向列表
|
|
|
+ List<?> wd50List = dataMap.get("wd50"); // 50米风向列表
|
|
|
+ List<?> wd70List = dataMap.get("wd70"); // 70米风向列表
|
|
|
+ List<?> wd80List = dataMap.get("wd80"); // 80米风向列表
|
|
|
+ List<?> wd90List = dataMap.get("wd90"); // 90米风向列表
|
|
|
+ List<?> wd100List = dataMap.get("wd100"); // 100米风向列表
|
|
|
+ List<?> wd110List = dataMap.get("wd110"); // 110米风向列表
|
|
|
+ List<?> wd120List = dataMap.get("wd120"); // 120米风向列表
|
|
|
+ List<?> wd130List = dataMap.get("wd130"); // 130米风向列表
|
|
|
+ List<?> wd140List = dataMap.get("wd140"); // 140米风向列表
|
|
|
+ List<?> wd150List = dataMap.get("wd150"); // 150米风向列表
|
|
|
+ List<?> wd170List = dataMap.get("wd170"); // 170米风向列表
|
|
|
+
|
|
|
+ List<?> tprList = dataMap.get("tpr"); // 降水总量列表
|
|
|
+
|
|
|
+ // 4. 确定数据总行数
|
|
|
+ int rowCount = stationNameList != null ? stationNameList.size() : 0;
|
|
|
+
|
|
|
+ // 5. 逐行填充数据
|
|
|
+ for (int i = 0; i < rowCount; i++) {
|
|
|
+ List<Object> row = new ArrayList<>();
|
|
|
+ row.add(getSafeValue(stationNameList, i)); // 所属场站
|
|
|
+ row.add(getSafeValue(preTimeList, i)); // 预测时间
|
|
|
+ row.add(getSafeValue(tList, i)); // 温度
|
|
|
+ row.add(getSafeValue(rhList, i)); // 湿度
|
|
|
+ row.add(getSafeValue(pressureList, i)); // 气压
|
|
|
+ row.add(getSafeValue(swrList, i)); // 短波辐射
|
|
|
+ row.add(getSafeValue(directRadiationList, i)); // 直辐射
|
|
|
+ row.add(getSafeValue(diffuseRadiationList, i)); // 散辐射
|
|
|
+
|
|
|
+ row.add(getSafeValue(ws10List, i)); // 10米风速
|
|
|
+ row.add(getSafeValue(ws30List, i)); // 30米风速
|
|
|
+ row.add(getSafeValue(ws50List, i)); // 50米风速
|
|
|
+ row.add(getSafeValue(ws70List, i)); // 70米风速
|
|
|
+ row.add(getSafeValue(ws80List, i)); // 80米风速
|
|
|
+ row.add(getSafeValue(ws90List, i)); // 90米风速
|
|
|
+ row.add(getSafeValue(ws100List, i)); // 100米风速
|
|
|
+ row.add(getSafeValue(ws110List, i)); // 110米风速
|
|
|
+ row.add(getSafeValue(ws120List, i)); // 120米风速
|
|
|
+ row.add(getSafeValue(ws130List, i)); // 130米风速
|
|
|
+ row.add(getSafeValue(ws140List, i)); // 140米风速
|
|
|
+ row.add(getSafeValue(ws150List, i)); // 150米风速
|
|
|
+ row.add(getSafeValue(ws170List, i)); // 170米风速
|
|
|
+
|
|
|
+ row.add(getSafeValue(wd10List, i)); // 10米风向
|
|
|
+ row.add(getSafeValue(wd30List, i)); // 30米风向
|
|
|
+ row.add(getSafeValue(wd50List, i)); // 50米风向
|
|
|
+ row.add(getSafeValue(wd70List, i)); // 70米风向
|
|
|
+ row.add(getSafeValue(wd80List, i)); // 80米风向
|
|
|
+ row.add(getSafeValue(wd90List, i)); // 90米风向
|
|
|
+ row.add(getSafeValue(wd100List, i)); // 100米风向
|
|
|
+ row.add(getSafeValue(wd110List, i)); // 110米风向
|
|
|
+ row.add(getSafeValue(wd120List, i)); // 120米风向
|
|
|
+ row.add(getSafeValue(wd130List, i)); // 130米风向
|
|
|
+ row.add(getSafeValue(wd140List, i)); // 140米风向
|
|
|
+ row.add(getSafeValue(wd150List, i)); // 150米风向
|
|
|
+ row.add(getSafeValue(wd170List, i)); // 170米风向
|
|
|
+
|
|
|
+ row.add(getSafeValue(tprList, i)); // 降水总量
|
|
|
+
|
|
|
+ excelData.add(row);
|
|
|
+ }
|
|
|
+
|
|
|
+ ExcelWriter writer = ExcelUtil.getWriter(true);
|
|
|
+ writer.renameSheet(0,"nwp数据");
|
|
|
+ writer.write(excelData,true);
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ String fileName = "NWP数据_" + sdf.format(startTime) + "至" + sdf.format(endTime) + ".xlsx";
|
|
|
+ response.setContentType("application/x-msdownload;charset=utf-8");
|
|
|
+ response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
|
|
|
+
|
|
|
+ ServletOutputStream outputStream = response.getOutputStream();
|
|
|
+ writer.flush(outputStream);
|
|
|
+ writer.close();
|
|
|
+ IoUtil.close(outputStream);
|
|
|
+
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+ private Object getSafeValue(List<?> list , int index){
|
|
|
+ if (list == null || index <0 || index >= list.size()){
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+ Object value = list.get(index);
|
|
|
+ if (value instanceof BigDecimal){
|
|
|
+ return ((BigDecimal) value).stripTrailingZeros();
|
|
|
+ }
|
|
|
+
|
|
|
+ return value == null ? "" : value;
|
|
|
+ }
|
|
|
+
|
|
|
}
|