diff --git a/pom.xml b/pom.xml index 0a31a24..15940a1 100644 --- a/pom.xml +++ b/pom.xml @@ -79,6 +79,16 @@ validation-api 2.0.1.Final + + com.alibaba + easyexcel + 3.3.3 + + + com.alibaba + easyexcel-core + 3.3.3 + diff --git a/src/main/java/com/xydl/cac/controller/NiecSensorController.java b/src/main/java/com/xydl/cac/controller/NiecSensorController.java index e610709..c25069f 100644 --- a/src/main/java/com/xydl/cac/controller/NiecSensorController.java +++ b/src/main/java/com/xydl/cac/controller/NiecSensorController.java @@ -5,6 +5,7 @@ import com.xydl.cac.model.ConditionModel; import com.xydl.cac.model.Response; import com.xydl.cac.model.SensorDetail; import com.xydl.cac.service.NiecSensorService; +import com.xydl.cac.service.ReportService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -17,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; import java.util.List; @RestController @@ -27,6 +30,8 @@ public class NiecSensorController extends BasicController { @Resource NiecSensorService service; + @Resource + ReportService reportService; @GetMapping("list") @ApiOperation("查询列表") @@ -81,4 +86,23 @@ public class NiecSensorController extends BasicController { } } + @GetMapping("export") + @ApiOperation("导出单个装置采集到的数据") + public void export(@Validated ConditionModel model, HttpServletResponse response) { + try { + if (model.getPageNum() != null || model.getPageSize() != null) { + model.setPageNum(this.initPageNum(model.getPageNum())); + model.setPageSize(this.initPageSize(model.getPageSize())); + } + SensorDetail detail = service.getDetail(model); + response.setHeader("Content-Disposition", "attachment; filename=" + + URLEncoder.encode(detail.getSensor().getName() + ".xlsx", "UTF-8")); + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + reportService.exportSensor(detail, response.getOutputStream()); + } catch (Exception ex) { + log.error("exportDetail Exception.", ex); + } + } + } diff --git a/src/main/java/com/xydl/cac/model/SensorDetail.java b/src/main/java/com/xydl/cac/model/SensorDetail.java index 430c07f..6bce12d 100644 --- a/src/main/java/com/xydl/cac/model/SensorDetail.java +++ b/src/main/java/com/xydl/cac/model/SensorDetail.java @@ -1,6 +1,7 @@ package com.xydl.cac.model; import com.xydl.cac.entity.NiecPoint; +import com.xydl.cac.entity.NiecSensor; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -9,6 +10,8 @@ import java.util.Map; @Data public class SensorDetail { + @ApiModelProperty("装置信息") + private NiecSensor sensor; @ApiModelProperty("点表配置") private List points; @ApiModelProperty("数据") diff --git a/src/main/java/com/xydl/cac/service/ReportService.java b/src/main/java/com/xydl/cac/service/ReportService.java new file mode 100644 index 0000000..6cfe75d --- /dev/null +++ b/src/main/java/com/xydl/cac/service/ReportService.java @@ -0,0 +1,10 @@ +package com.xydl.cac.service; + +import com.xydl.cac.model.SensorDetail; + +import java.io.OutputStream; + +public interface ReportService { + + void exportSensor(SensorDetail detail, OutputStream output) throws Exception; +} diff --git a/src/main/java/com/xydl/cac/service/impl/NiecSensorServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/NiecSensorServiceImpl.java index d8695d9..9a835b4 100644 --- a/src/main/java/com/xydl/cac/service/impl/NiecSensorServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/NiecSensorServiceImpl.java @@ -99,6 +99,7 @@ public class NiecSensorServiceImpl implements NiecSensorService { public SensorDetail getData(NiecSensor sensor, List points, ConditionModel model) { SensorDetail result = new SensorDetail(); + result.setSensor(sensor); List pointList = new ArrayList<>(); String sqlFrom = " FROM " + sensor.getTableName(); diff --git a/src/main/java/com/xydl/cac/service/impl/ReportServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/ReportServiceImpl.java new file mode 100644 index 0000000..3daba55 --- /dev/null +++ b/src/main/java/com/xydl/cac/service/impl/ReportServiceImpl.java @@ -0,0 +1,62 @@ +package com.xydl.cac.service.impl; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; +import com.xydl.cac.entity.NiecPoint; +import com.xydl.cac.model.SensorDetail; +import com.xydl.cac.service.ReportService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Service +@Slf4j +@Transactional(rollbackFor = Exception.class) +public class ReportServiceImpl implements ReportService { + + @Override + public void exportSensor(SensorDetail detail, OutputStream output) throws Exception { + List> heads = new ArrayList<>(); + List head = new ArrayList<>(); + head.add("时间"); + heads.add(head); + for (NiecPoint point : detail.getPoints()) { + head = new ArrayList<>(); + head.add(point.getName()); + heads.add(head); + } + + List> list = new ArrayList<>(); + for (Map map : detail.getContent()) { + List line = new ArrayList<>(); + Object data = map.get("acquisitionTime"); + line.add(String.valueOf(data)); + for (NiecPoint point : detail.getPoints()) { + data = map.get(point.getField()); + if (data == null) { + data = ""; + } + line.add(String.valueOf(data)); + } + list.add(line); + } + + // 导出Excel + ExcelWriter excelWriter = EasyExcel.write(output).inMemory(true) + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build(); + + WriteSheet writeSheet0 = EasyExcel.writerSheet(0, detail.getSensor().getName()) + .head(heads) + .build(); + excelWriter.write(list, writeSheet0); + + excelWriter.finish(); + } +}