修复导出航班数据成excel为根据前端提供的动态key字段进行导出。后端不限定导出字段和内容。

This commit is contained in:
zhouxiunai
2019-05-10 10:54:42 +08:00
parent 6e447fb1cc
commit b0ed00e930
3 changed files with 263 additions and 7 deletions
@@ -3,6 +3,7 @@ package com.gzzn.omms.adminapi.controller.fltrs;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@@ -29,7 +30,7 @@ import io.swagger.annotations.ApiOperation;
@RestController @RestController
public class FltrController { public class FltrController {
@ApiOperation(value="导出航班动态到excel",tags="航班动态") @ApiOperation(value="导出航班动态到excel。正常返回excel文件内容。错误返回json错误描述",tags="航班动态")
@PostMapping("/fltrs/toExcel") @PostMapping("/fltrs/toExcel")
public void exportToExcel(@RequestBody ExportToExcelDto lsData, public void exportToExcel(@RequestBody ExportToExcelDto lsData,
HttpServletResponse response) { HttpServletResponse response) {
@@ -48,13 +49,12 @@ public class FltrController {
// //
List<List<Object>> rows = new ArrayList(); List<List<Object>> rows = new ArrayList();
for(ExcelRowDto rowData : lsData.getData() ) for(Map rowData : lsData.getData() )
{ {
List<Object> row = new ArrayList(); List<Object> row = new ArrayList();
for(ExcelHeaderDto headerData : lsData.getColumns() ) for(ExcelHeaderDto headerData : lsData.getColumns() )
{ {
Method method = ReflectionUtils.findMethod(rowData.getClass(), "get" + headerData.getKey()); String cellData = String.valueOf(rowData.get(headerData.getKey()));
String cellData = (String) ReflectionUtils.invokeMethod(method, rowData);
row.add(cellData); row.add(cellData);
} }
rows.add(row); rows.add(row);
@@ -1,10 +1,11 @@
package com.gzzn.omms.adminapi.dto.fltrs; package com.gzzn.omms.adminapi.dto.fltrs;
import java.util.List; import java.util.List;
import java.util.Map;
public class ExportToExcelDto { public class ExportToExcelDto {
private List<ExcelHeaderDto> columns;//要导出的列 private List<ExcelHeaderDto> columns;//要导出的列
private List<ExcelRowDto> data;//要导出的数据 private List<Map> data;//要导出的数据
public List<ExcelHeaderDto> getColumns() { public List<ExcelHeaderDto> getColumns() {
@@ -13,10 +14,10 @@ public class ExportToExcelDto {
public void setColumns(List<ExcelHeaderDto> columns) { public void setColumns(List<ExcelHeaderDto> columns) {
this.columns = columns; this.columns = columns;
} }
public List<ExcelRowDto> getData() { public List<Map> getData() {
return data; return data;
} }
public void setData(List<ExcelRowDto> data) { public void setData(List<Map> data) {
this.data = data; this.data = data;
} }
} }
@@ -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"));
}
}