From b0ed00e9303cba54348fcd3cf603031d46734ed1 Mon Sep 17 00:00:00 2001 From: zhouxiunai <154707516@qq.com> Date: Fri, 10 May 2019 10:54:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AF=BC=E5=87=BA=E8=88=AA?= =?UTF-8?q?=E7=8F=AD=E6=95=B0=E6=8D=AE=E6=88=90excel=E4=B8=BA=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E5=89=8D=E7=AB=AF=E6=8F=90=E4=BE=9B=E7=9A=84=E5=8A=A8?= =?UTF-8?q?=E6=80=81key=E5=AD=97=E6=AE=B5=E8=BF=9B=E8=A1=8C=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E3=80=82=E5=90=8E=E7=AB=AF=E4=B8=8D=E9=99=90=E5=AE=9A?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=AD=97=E6=AE=B5=E5=92=8C=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/fltrs/FltrController.java | 8 +- .../adminapi/dto/fltrs/ExportToExcelDto.java | 7 +- .../controller/fltrs/FltrControllerTest.java | 255 ++++++++++++++++++ 3 files changed, 263 insertions(+), 7 deletions(-) create mode 100644 src/test/java/com/gzzn/omms/adminapi/controller/fltrs/FltrControllerTest.java diff --git a/src/main/java/com/gzzn/omms/adminapi/controller/fltrs/FltrController.java b/src/main/java/com/gzzn/omms/adminapi/controller/fltrs/FltrController.java index 5e226dc..07d4e9f 100644 --- a/src/main/java/com/gzzn/omms/adminapi/controller/fltrs/FltrController.java +++ b/src/main/java/com/gzzn/omms/adminapi/controller/fltrs/FltrController.java @@ -3,6 +3,7 @@ package com.gzzn.omms.adminapi.controller.fltrs; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; +import java.util.Map; import javax.servlet.http.HttpServletResponse; @@ -29,7 +30,7 @@ import io.swagger.annotations.ApiOperation; @RestController public class FltrController { - @ApiOperation(value="导出航班动态到excel",tags="航班动态") + @ApiOperation(value="导出航班动态到excel。正常返回excel文件内容。错误返回json错误描述",tags="航班动态") @PostMapping("/fltrs/toExcel") public void exportToExcel(@RequestBody ExportToExcelDto lsData, HttpServletResponse response) { @@ -48,13 +49,12 @@ public class FltrController { // List> rows = new ArrayList(); - for(ExcelRowDto rowData : lsData.getData() ) + for(Map rowData : lsData.getData() ) { List row = new ArrayList(); for(ExcelHeaderDto headerData : lsData.getColumns() ) { - Method method = ReflectionUtils.findMethod(rowData.getClass(), "get" + headerData.getKey()); - String cellData = (String) ReflectionUtils.invokeMethod(method, rowData); + String cellData = String.valueOf(rowData.get(headerData.getKey())); row.add(cellData); } rows.add(row); diff --git a/src/main/java/com/gzzn/omms/adminapi/dto/fltrs/ExportToExcelDto.java b/src/main/java/com/gzzn/omms/adminapi/dto/fltrs/ExportToExcelDto.java index b8d0850..c742213 100644 --- a/src/main/java/com/gzzn/omms/adminapi/dto/fltrs/ExportToExcelDto.java +++ b/src/main/java/com/gzzn/omms/adminapi/dto/fltrs/ExportToExcelDto.java @@ -1,10 +1,11 @@ package com.gzzn.omms.adminapi.dto.fltrs; import java.util.List; +import java.util.Map; public class ExportToExcelDto { private List columns;//要导出的列 - private List data;//要导出的数据 + private List data;//要导出的数据 public List getColumns() { @@ -13,10 +14,10 @@ public class ExportToExcelDto { public void setColumns(List columns) { this.columns = columns; } - public List getData() { + public List getData() { return data; } - public void setData(List data) { + public void setData(List data) { this.data = data; } } diff --git a/src/test/java/com/gzzn/omms/adminapi/controller/fltrs/FltrControllerTest.java b/src/test/java/com/gzzn/omms/adminapi/controller/fltrs/FltrControllerTest.java new file mode 100644 index 0000000..a6fcfe4 --- /dev/null +++ b/src/test/java/com/gzzn/omms/adminapi/controller/fltrs/FltrControllerTest.java @@ -0,0 +1,255 @@ +package com.gzzn.omms.adminapi.controller.fltrs; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +@RunWith(SpringRunner.class) +@SpringBootTest +@AutoConfigureMockMvc +public class FltrControllerTest { + + @Autowired + private MockMvc mvc; + + /** + * 测试航班动态导出excel + * @throws Exception + */ + @Test + public void testFltrToExcel() throws Exception + { + String jsonContent = "{\r\n" + + " \"columns\": [\r\n" + + " {\r\n" + + " \"key\": \"FLNO\",\r\n" + + " \"name\": \"航班号\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"FLDT\",\r\n" + + " \"name\": \"航班日期\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"ERUTCODE\",\r\n" + + " \"name\": \"航线(三字码)\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"ERUT\",\r\n" + + " \"name\": \"航线\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"FLIN\",\r\n" + + " \"name\": \"航线类别\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"ALCD\",\r\n" + + " \"name\": \"航空公司\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"RENO\",\r\n" + + " \"name\": \"飞机号\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"SODT\",\r\n" + + " \"name\": \"计划到达/出发\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"ESTT\",\r\n" + + " \"name\": \"预计到达/出发 \"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"ACTT\",\r\n" + + " \"name\": \"实际到达/出发\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"PSST\",\r\n" + + " \"name\": \"计划机位\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"PADT\",\r\n" + + " \"name\": \"前站起飞时间\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"STND\",\r\n" + + " \"name\": \"当前机位\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"ACFT\",\r\n" + + " \"name\": \"机型\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"GCTM\",\r\n" + + " \"name\": \"登机结束\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"BOTM\",\r\n" + + " \"name\": \"登机开始\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"ABDG\",\r\n" + + " \"name\": \"登机桥\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"AOTM_D\",\r\n" + + " \"name\": \"撤桥时间\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"AOTM_A\",\r\n" + + " \"name\": \"靠桥时间\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"BELT\",\r\n" + + " \"name\": \"转盘号\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"CHKC\",\r\n" + + " \"name\": \"值机柜台\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"CCTM\",\r\n" + + " \"name\": \"值机结束\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"COTM\",\r\n" + + " \"name\": \"值机开始\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"CHTM_OFF\",\r\n" + + " \"name\": \"下轮挡\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"CHTM_ON\",\r\n" + + " \"name\": \"上轮挡\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"LACL\",\r\n" + + " \"name\": \"最后通知时间\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"CHUT\",\r\n" + + " \"name\": \"行李传送带\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"MVIN\",\r\n" + + " \"name\": \"到达/出发\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"FTSS\",\r\n" + + " \"name\": \"运营状态\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"TRML\",\r\n" + + " \"name\": \"航站楼\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"FLTY\",\r\n" + + " \"name\": \"航班类别\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"GTDT\",\r\n" + + " \"name\": \"登机门号 \"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"ARSF\",\r\n" + + " \"name\": \"到港共享航班\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"key\": \"DESF\",\r\n" + + " \"name\": \"离港共享航班\"\r\n" + + " }\r\n" + + " ],\r\n" + + " \"data\": [\r\n" + + " {\r\n" + + " \"FLNO\": \"TV9802\",\r\n" + + " \"ACFT\": \"320\",\r\n" + + " \"GCTM\": \"\",\r\n" + + " \"BOTM\": \"\",\r\n" + + " \"ABDG\": \"\",\r\n" + + " \"AOTM_D\": \"\",\r\n" + + " \"AOTM_A\": \"\",\r\n" + + " \"BELT\": \"\",\r\n" + + " \"CHKC\": \"\",\r\n" + + " \"CCTM\": \"\",\r\n" + + " \"COTM\": \"\",\r\n" + + " \"CHTM_OFF\": \"\",\r\n" + + " \"CHTM_ON\": \"\",\r\n" + + " \"LACL\": \"\",\r\n" + + " \"CHUT\": \"\",\r\n" + + " \"RENO\": \"B8418\",\r\n" + + " \"ALCD\": \"西藏航空\",\r\n" + + " \"ACTT\": \"\",\r\n" + + " \"PSST\": \"\",\r\n" + + " \"ESTT\": \"\",\r\n" + + " \"MVIN\": \"到达\",\r\n" + + " \"ERUT\": \"固原 - 蓉\",\r\n" + + " \"ERUTCODE\": \"GYU - CTU\",\r\n" + + " \"FTSS\": \"初始状态\",\r\n" + + " \"FLIN\": \"国内\",\r\n" + + " \"SODT\": \"02:20\",\r\n" + + " \"TRML\": \"T2\",\r\n" + + " \"FLTY\": \"调机\",\r\n" + + " \"GTDT\": \"\",\r\n" + + " \"PADT\": \"(00:00)\",\r\n" + + " \"FLDT\": \"2019-05-10\",\r\n" + + " \"ARSF\": \"\",\r\n" + + " \"DESF\": \"\",\r\n" + + " \"ERUTCHN\": \"固原 - 成都双流机场(蓉)\",\r\n" + + " \"orderBy\": 1557426000000\r\n" + + " },\r\n" + + " {\r\n" + + " \"FLNO\": \"YG9061 / YG9028\",\r\n" + + " \"ACFT\": \"733\",\r\n" + + " \"GCTM\": \"\",\r\n" + + " \"BOTM\": \"\",\r\n" + + " \"ABDG\": \"\",\r\n" + + " \"AOTM_D\": \"\",\r\n" + + " \"AOTM_A\": \"\",\r\n" + + " \"BELT\": \"\",\r\n" + + " \"CHKC\": \"\",\r\n" + + " \"CCTM\": \"\",\r\n" + + " \"COTM\": \"\",\r\n" + + " \"CHTM_OFF\": \"\",\r\n" + + " \"CHTM_ON\": \"\",\r\n" + + " \"LACL\": \"\",\r\n" + + " \"CHUT\": \"\",\r\n" + + " \"RENO\": \"B2898\",\r\n" + + " \"ALCD\": \"圆通航空货运有限公司\",\r\n" + + " \"ACTT\": \"\",\r\n" + + " \"PSST\": \"\",\r\n" + + " \"ESTT\": \"\",\r\n" + + " \"MVIN\": \"到达 / 出发\",\r\n" + + " \"ERUT\": \"杭 - 蓉 - 陕\",\r\n" + + " \"ERUTCODE\": \"HGH - CTU - XIY\",\r\n" + + " \"FTSS\": \"正常\",\r\n" + + " \"FLIN\": \"国内\",\r\n" + + " \"SODT\": \"04:45 / 05:35\",\r\n" + + " \"TRML\": \"T2\",\r\n" + + " \"FLTY\": \"货班\",\r\n" + + " \"GTDT\": \"\",\r\n" + + " \"PADT\": \"(01:30)\",\r\n" + + " \"STND\": \"\",\r\n" + + " \"FLDT\": \"2019-05-10\",\r\n" + + " \"ARSF\": \"\",\r\n" + + " \"DESF\": \"\",\r\n" + + " \"ERUTCHN\": \"杭州萧山 - 成都双流机场(蓉) - 西安咸阳\",\r\n" + + " \"orderBy\": 1557434700000\r\n" + + " }]\r\n" + + "}"; + + mvc. + perform(post("/fltrs/toExcel").content(jsonContent).contentType(MediaType.APPLICATION_JSON_UTF8)) + .andExpect(status().isOk()) + .andExpect(content().contentType("application/vnd.ms-excel")); + } +}