diff --git a/pom.xml b/pom.xml index 6efbe6b..cc23dd5 100644 --- a/pom.xml +++ b/pom.xml @@ -111,6 +111,7 @@ <artifactId>poi-ooxml</artifactId> <version>4.1.0</version> </dependency> + <!-- excel导出 end--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> diff --git a/src/main/java/com/sunyo/wlpt/cgonms/provide/controller/NmsController.java b/src/main/java/com/sunyo/wlpt/cgonms/provide/controller/NmsController.java index b692bca..12d5ee6 100644 --- a/src/main/java/com/sunyo/wlpt/cgonms/provide/controller/NmsController.java +++ b/src/main/java/com/sunyo/wlpt/cgonms/provide/controller/NmsController.java @@ -2,7 +2,6 @@ package com.sunyo.wlpt.cgonms.provide.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; -import com.google.common.collect.Lists; import com.sunyo.wlpt.cgonms.provide.domain.*; import com.sunyo.wlpt.cgonms.provide.feign.GetCgoAsmFeign; @@ -22,7 +21,6 @@ import java.io.IOException; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; @@ -93,16 +91,12 @@ public class NmsController { @RequestParam(value = "flightNo", required = false) String flightNo, HttpServletRequest request) { - /** - * 1.取token作爲websocket的sid - * 2.每個可以返回給前端的消息通過websocket發送回去 - */ + // 获取token String sid = request.getHeader("Authorization"); log.info("token的值:" + sid); final String startTime = sdf.format(new Date()); - ResultWs resultStart = new ResultWs("数据开始获取,开始时间:"+ startTime); - - sendMsgByWebsocket("开始时间:" + startTime, sid); + String resultStart = JSON.toJSONString(new ResultWs("数据开始获取,开始时间:" + startTime)); + sendMsgByWebsocket(resultStart, sid); ResultJson resultJson = new ResultJson(); /** @@ -116,7 +110,7 @@ public class NmsController { //控制index,查询数据的时候,保证索引的位置不出错 int index = 0; try { - // 如果数据大于50个,则每次获取前50条。逐次获取 + /*如果数据大于50个,则每次获取前50条。逐次获取*/ if (resultList != null && !resultList.isEmpty() && resultList.size() > THREAD_ACCOUNT) { while (index < resultList.size()) { //如果剩余未处理的数量 大于 等于线程数量,则遍历次数为线程数量 @@ -130,8 +124,7 @@ public class NmsController { resultList.set(i, result); int temp = i + index; - ResultWs resultWs = new ResultWs(); - resultWs = new ResultWs(sid, "获取数据,第" + temp + "条", result); + ResultWs resultWs = new ResultWs("获取数据,第" + temp + "条", "201"); String resultJs = JSON.toJSONString(resultWs, SerializerFeature.DisableCircularReferenceDetect); sendMsgByWebsocket(resultJs, sid); @@ -150,8 +143,7 @@ public class NmsController { result = threadJob(resultList.get(i + index), latch, threadPool); int temp = i + index; - ResultWs resultWs = new ResultWs(); - resultWs = new ResultWs(sid, "获取数据,第" + temp + "条", result); + ResultWs resultWs = new ResultWs("获取数据,第" + temp + "条", "201"); String resultJs = JSON.toJSONString(resultWs, SerializerFeature.DisableCircularReferenceDetect); sendMsgByWebsocket(resultJs, sid); @@ -171,8 +163,7 @@ public class NmsController { result = threadJob(resultList.get(i), latch, threadPool); resultList.set(i, result); - ResultWs resultWs = new ResultWs(); - resultWs = new ResultWs(sid, "获取数据,第" + i + "条", result); + ResultWs resultWs = new ResultWs("获取数据,第" + i + "条", "201"); String resultJs = JSON.toJSONString(resultWs, SerializerFeature.DisableCircularReferenceDetect); sendMsgByWebsocket(resultJs, sid); @@ -182,22 +173,15 @@ public class NmsController { } } catch (Exception e) { e.printStackTrace(); - log.error("获取目录文件出错", e); + log.error("获取数据出错", e); } - - - System.out.println("出港信息,获取完毕"); - System.out.println("index的值为:" + index); final String endTime = sdf.format(new Date()); - + System.out.println("出港信息,获取完毕,index的值为:" + index); System.out.println("结束时间:" + endTime); - String resultJs = JSON.toJSONString(new ResultWs(sid, "获取数据,完毕", resultList)); + String resultJs = JSON.toJSONString(new ResultWs("获取数据,结束时间:" + endTime, resultList, "200")); sendMsgByWebsocket(resultJs, sid); - sendMsgByWebsocket("出港信息,获取完毕,结束时间:" + endTime, sid); - resultJson.setCode("200"); resultJson.setData(resultList); - return resultJson; } @@ -246,16 +230,11 @@ public class NmsController { * 区域描述,中文 */ BasArea basArea = basAreaService.getBasAreaInfo(ta.getArea()); + //航班目的区域,中文描述,所属洲 result.setAreaDescChn(basArea.getAreaDescChn()); - /** - * 6.根据 理货信息 中的运单号,获取预配表中的相应数据 - * - * 发货人名称 - * 收货人名称 - * 航班目的站 - */ + // 6.根据 理货信息 中的运单号,获取预配表中的相应数据 List<PrepareMaster> pm = prepareMasterService.getPrepareMasterInfo(result.getWaybillNoMaster()); if (pm != null && pm.size() > 0) { //发货人名称 @@ -266,7 +245,7 @@ public class NmsController { result.setAimStation(pm.get(0).getDestinationStation()); } /** - * 获取数据仓库的对应数据 + * //获取数据仓库的对应数据 // if (result.getWaybillNoMaster() != null && result.getWaybillNoMaster() != "") {} ResultExitData dataWareHouseInfo=new ResultExitData(); @@ -277,9 +256,7 @@ public class NmsController { result.setTotalGrossWeightMeasure(dataWareHouseInfo.getTotalGrossWeightMeasure()); */ - /** - * 获取运输工具的对应数据 - */ + //获取运输工具的对应数据 ResultExitData transportInfo = new ResultExitData(); transportInfo = getTransportFeign.getInfo(result.getFlightNo(), result.getFlightDate()); //设置航班公司 @@ -295,10 +272,7 @@ public class NmsController { //设置航班计划时间 result.setFlightPlanTime(transportInfo.getFlightPlanTime()); - /** - * 获取代理人的相关数据 - */ -// if (result.getWaybillNoMaster() != null && result.getWaybillNoMaster() != "") { } + //获取代理人的相关数据 ResultExitData asmInfo = new ResultExitData(); asmInfo = getCgoAsmFeign.getInfo(result.getWaybillNoMaster()); //设置结算代理人 @@ -322,6 +296,11 @@ public class NmsController { return result; } + /** + * 由于前台传过来的时间参数是字符串,故转一下格式 + * + * @param binder 转换器 + */ @InitBinder public void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); @@ -329,12 +308,15 @@ public class NmsController { binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); } + /** + * @param msg JSON字符串 + * @param sid 唯一识别值 + */ private void sendMsgByWebsocket(String msg, String sid) { try { WebSocketServer.sendInfo(msg, sid); } catch (IOException e) { e.printStackTrace(); - } } } diff --git a/src/main/java/com/sunyo/wlpt/cgonms/provide/excle/ExitExcel.java b/src/main/java/com/sunyo/wlpt/cgonms/provide/excle/ExitExcel.java index 7ec6730..ceb4a67 100644 --- a/src/main/java/com/sunyo/wlpt/cgonms/provide/excle/ExitExcel.java +++ b/src/main/java/com/sunyo/wlpt/cgonms/provide/excle/ExitExcel.java @@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; import java.util.UUID; @@ -32,7 +33,7 @@ public class ExitExcel { private String dir; final SimpleDateFormat sdfShort = new SimpleDateFormat("yyyy-MM-dd"); - final SimpleDateFormat sdfLong = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + final SimpleDateFormat sdfLong = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @PostMapping("/excel") public void getExit(@RequestBody List<ResultExitData> exitInfoList, HttpServletResponse httpServletResponse) { @@ -40,140 +41,191 @@ public class ExitExcel { } private void exportExcel(List<ResultExitData> exitInfoList, HttpServletResponse response) { - // 创建工作簿 - HSSFWorkbook workbook = new HSSFWorkbook(); - // 创建表 - HSSFSheet sheet = workbook.createSheet("export"); - // 创建行 - HSSFRow row = sheet.createRow(0); - // 创建单元格样式 - HSSFCellStyle cellStyle = workbook.createCellStyle(); - // 表头 - String[] head = { - "运单号", - "件数", - "重量", - "计费重量", - "体积", - "品名", - "二级品类", - "一级品类", - "货物目的站", - "货物目的国家/地区", - "所属洲", - "航空公司", - "航班号", - "航班日期", - "航班时间", - "航班计划日期", - "航班计划时间", - "航段", - "机号", - "机型", - "最大业载", - "运单发货人", - "运单收货人", - "订舱代理人", - "结算代理人", - "自定义项" - }; - HSSFCell cell; - // 设置表头 - for (int i = 0; i < head.length; i++) { - cell = row.createCell(i); - cell.setCellValue(head[i]); - cell.setCellStyle(cellStyle); - // 设置单元格宽度 - sheet.setColumnWidth(i, 4000); - } - // 设置表格内容 - for (int i = 0; i < exitInfoList.size(); i++) { - row = sheet.createRow(i + 1); - ResultExitData ResultExitData = exitInfoList.get(i); - // 这里是内容设置,替换则自己的数据即可 - String[] excelTitle = new String[40]; - - //取出数据,运单号 - excelTitle[0] = ResultExitData.getWaybillNoMaster(); - //件数 - excelTitle[1] = ResultExitData.getTallyTotalPiece(); - //重量 - excelTitle[2] = ResultExitData.getTallyTotalWeight(); - //计费重量 - excelTitle[3] = String.valueOf(ResultExitData.getTotalGrossWeightMeasure()); - //体积 - excelTitle[4] = String.valueOf(ResultExitData.getVolumeMeasure()); - //品名 - excelTitle[5] = ResultExitData.getSdCargoName(); - //二级品类 - excelTitle[6] = ResultExitData.getTwoTypeName(); - //一级品类 - excelTitle[7] = ResultExitData.getTypeName(); - //货物目的站 - excelTitle[8] = ResultExitData.getAimStation(); - //货物目的国家/地区 - excelTitle[9] = ResultExitData.getCountry(); - //所属洲 - excelTitle[10] = ResultExitData.getAreaDescChn(); - //航空公司 - excelTitle[11] = ResultExitData.getAirCompany(); - //航班号 - excelTitle[12] = ResultExitData.getFlightNo(); - //航班日期 - excelTitle[13] = sdfShort.format(ResultExitData.getFlightDate()); - //航班时间 - excelTitle[14] = sdfLong.format(ResultExitData.getFlightTime()); - //航班计划日期 - excelTitle[15] = sdfShort.format(ResultExitData.getFlightPlanDate()); - //航班计划时间 - excelTitle[16] = sdfLong.format(ResultExitData.getFlightPlanTime()); - //航段 - excelTitle[17] = ResultExitData.getSegment(); - //机号 - excelTitle[18] = ResultExitData.getCfNo(); - //机型 - excelTitle[19] = ResultExitData.getCfTp(); - //最大业载 - excelTitle[20] = ""; - //运单发货人 - excelTitle[21] = ResultExitData.getShipperName(); - //运单收货人 - excelTitle[22] = ResultExitData.getConsigneeName(); - //订舱代理人(代理人全称) - excelTitle[23] = ResultExitData.getOrderName(); - //结算代理人(代理人全程) - excelTitle[24] = ResultExitData.getCountName(); - //自定义项 - excelTitle[25] = ""; - - for (int j = 0; j < excelTitle.length; j++) { - row.createCell(j).setCellValue(excelTitle[j]); + try { + // 创建工作簿 + HSSFWorkbook workbook = new HSSFWorkbook(); + // 创建表 + HSSFSheet sheet = workbook.createSheet("export"); + // 创建行 + HSSFRow row = sheet.createRow(0); + // 创建单元格样式 + HSSFCellStyle cellStyle = workbook.createCellStyle(); + // 表头 + String[] head = { + "运单号", + "件数", + "重量", + "计费重量", + "体积", + "品名", + "二级品类", + "一级品类", + "货物目的站", + "货物目的国家/地区", + "所属洲", + "航空公司", + "航班号", + "航班日期", + "航班时间", + "航班计划日期", + "航班计划时间", + "航段", + "机号", + "机型", + "最大业载", + "运单发货人", + "运单收货人", + "订舱代理人", + "结算代理人", + "自定义项" + }; + HSSFCell cell; + // 设置表头 + for (Integer i = 0; i < head.length; i++) { + cell = row.createCell(i); + cell.setCellValue(head[i]); + cell.setCellStyle(cellStyle); + // 设置单元格宽度 + // 256*width+184 + sheet.setColumnWidth(i, 4000); + } + // 设置表格内容 + for (Integer i = 0; i < exitInfoList.size(); i++) { + row = sheet.createRow(i + 1); + ResultExitData resultExitData = exitInfoList.get(i); + // 这里是内容设置,替换则自己的数据即可 + String[] excelTitle = new String[27]; + + //取出数据,运单号 + excelTitle[0] = resultExitData.getWaybillNoMaster(); + //件数 + excelTitle[1] = resultExitData.getTallyTotalPiece(); + //重量 + excelTitle[2] = resultExitData.getTallyTotalWeight(); + //计费重量 + excelTitle[3] = String.valueOf(resultExitData.getTotalGrossWeightMeasure()); + //体积 + excelTitle[4] = String.valueOf(resultExitData.getVolumeMeasure()); + //品名 + excelTitle[5] = resultExitData.getSdCargoName(); + //二级品类 + excelTitle[6] = resultExitData.getTwoTypeName(); + //一级品类 + excelTitle[7] = resultExitData.getTypeName(); + //货物目的站 + excelTitle[8] = resultExitData.getAimStation(); + //货物目的国家/地区 + excelTitle[9] = resultExitData.getCountry(); + //所属洲 + excelTitle[10] = resultExitData.getAreaDescChn(); + //航空公司 + excelTitle[11] = resultExitData.getAirCompany(); + //航班号 + excelTitle[12] = resultExitData.getFlightNo(); + //航班日期 + excelTitle[13] = isNullShort(resultExitData.getFlightDate()); + //航班时间 + excelTitle[14] = isNullLong(resultExitData.getFlightTime()); + //航班计划日期 + excelTitle[15] = isNullShort(resultExitData.getFlightPlanDate()); + //航班计划时间 + excelTitle[16] = isNullLong(resultExitData.getFlightPlanTime()); + //航段 + excelTitle[17] = resultExitData.getSegment(); + //机号 + excelTitle[18] = resultExitData.getCfNo(); + //机型 + excelTitle[19] = resultExitData.getCfTp(); + //最大业载 + excelTitle[20] = ""; + //运单发货人 + excelTitle[21] = resultExitData.getShipperName(); + //运单收货人 + excelTitle[22] = resultExitData.getConsigneeName(); + //订舱代理人(代理人全称) + excelTitle[23] = resultExitData.getOrderName(); + //结算代理人(代理人全程) + excelTitle[24] = resultExitData.getCountName(); + //自定义项 + excelTitle[25] = ""; + + for (Integer j = 0; j < excelTitle.length; j++) { + row.createCell(j).setCellValue(excelTitle[j]); + } } + + String file_name = UUID.randomUUID().toString().replaceAll("-", ""); + // 设置文件名 + String title = file_name + ".xls"; + + String filePath = disc + ":" + File.separator + dir + File.separator + title; + /** + * 创建文件夹 + */ + File testFile = new File(filePath); + File fileParent = testFile.getParentFile(); + if (!fileParent.exists()) { + // 能创建多级目录 + fileParent.mkdirs(); + } + try { + FileOutputStream fos = new FileOutputStream(filePath); + workbook.write(fos); + fos.flush(); + fos.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } catch (Exception e) { + e.printStackTrace(); } + } + + /** + * 时间戳转换成字符串 + */ + public static String getDateToLong(long time) { + Date d = new Date(time); + SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return sf.format(d); + } + + /** + * 时间戳转换成字符串 + */ + public static String getDateToShort(long time) { + Date d = new Date(time); + SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); + return sf.format(d); + } - String file_name= UUID.randomUUID().toString().replaceAll("-", ""); - // 设置文件名 - String title = file_name+".xls"; - - String filePath = disc+":" + File.separator + dir + File.separator + title; - /** - * 创建文件夹 - */ - File testFile = new File(filePath); - File fileParent = testFile.getParentFile(); - if (!fileParent.exists()) { - // 能创建多级目录 - fileParent.mkdirs(); + /** + * 判断传递来的时间,是否为空,为null,则返回"",不为空,则规范格式 "yyyy-MM-dd" + * + * @param time Date类型时间 + * @return + */ + public static String isNullShort(Date time) { + if (null == time) { + return ""; + } else { + return getDateToShort(time.getTime()); } - try { - FileOutputStream fos = new FileOutputStream(filePath); - workbook.write(fos); - fos.flush(); - fos.close(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); + } + + /** + * 判断传递来的时间,是否为空,为null,则返回"",不为空,则规范格式 "yyyy-MM-dd HH:mm:ss" + * + * @param time Date类型时间 + * @return + */ + public static String isNullLong(Date time) { + if (null == time) { + return ""; + } else { + return getDateToLong(time.getTime()); } } } diff --git a/src/main/java/com/sunyo/wlpt/cgonms/provide/response/ResultWs.java b/src/main/java/com/sunyo/wlpt/cgonms/provide/response/ResultWs.java index dbe64ae..59cf0fe 100644 --- a/src/main/java/com/sunyo/wlpt/cgonms/provide/response/ResultWs.java +++ b/src/main/java/com/sunyo/wlpt/cgonms/provide/response/ResultWs.java @@ -20,33 +20,30 @@ public class ResultWs<T> implements Serializable { T data; + String status; public ResultWs() { } - public ResultWs(String sid, T data) { - this.sid = sid; - this.data = data; + public ResultWs(String message, String status) { + this.message = message; + this.status = status; } - public ResultWs(String sid, String message, T data) { - this.sid = sid; + public ResultWs(String message, T data) { this.message = message; this.data = data; } - public ResultWs(String sid, T data, String status) { - this.sid = sid; - this.data = data; - this.status = status; - } - public ResultWs(String message, String status) { + public ResultWs(String message, T data, String status) { this.message = message; + this.data = data; this.status = status; } + public ResultWs(String message) { this.message = message; } diff --git a/src/main/java/com/sunyo/wlpt/cgonms/provide/websocket/WebSocketServer.java b/src/main/java/com/sunyo/wlpt/cgonms/provide/websocket/WebSocketServer.java index 4aa52ff..28623ff 100644 --- a/src/main/java/com/sunyo/wlpt/cgonms/provide/websocket/WebSocketServer.java +++ b/src/main/java/com/sunyo/wlpt/cgonms/provide/websocket/WebSocketServer.java @@ -1,11 +1,16 @@ package com.sunyo.wlpt.cgonms.provide.websocket; +import cn.hutool.json.JSON; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import cn.hutool.log.Log; import cn.hutool.log.LogFactory; import com.sunyo.wlpt.cgonms.provide.controller.NmsController; +import com.sunyo.wlpt.cgonms.provide.response.ResultJson; import org.springframework.stereotype.Component; +import javax.annotation.Resource; import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; @@ -20,6 +25,9 @@ import java.util.concurrent.atomic.AtomicInteger; @Component public class WebSocketServer { + @Resource + NmsController nmsController; + static Log log = LogFactory.get(WebSocketServer.class); //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。 @@ -45,9 +53,9 @@ public class WebSocketServer { log.info("有新窗口开始监听:" + sid + ",当前在线人数为" + getOnlineCount()); this.sid = sid; try { - String openMessage= "{\n" + - " \"sid\":\""+sid+"\",\n" + - " \"session\":\""+session+"\",\n" + + String openMessage = "{\n" + + " \"sid\":\"" + sid + "\",\n" + + " \"session\":\"" + session + "\",\n" + " \"message\": \"连接成功\",\n" + " \"data\":{\"flightdate\":\"2015-02-05\",\"flightNo\":\"CV987\"}\n" + "}"; @@ -70,19 +78,15 @@ public class WebSocketServer { /** * 收到客户端消息后调用的方法 * - * @param message 客户端发送过来的消息,以json形式传递接收, - * 如:{ - * "sid":"aaa", - * "session":"", - * "message": "", - * "data":{"flightdate":"2015-02-05","flightNo":"CV987"} - * - * - * } + * @param message 客户端发送过来的消息,以json形式传递接收 */ @OnMessage public void onMessage(String message, Session session) { +// JSONObject jsonObj = new JSONObject(message); +// String flightNo = jsonObj.get("flightNo").toString(); +// String flightDate = jsonObj.get("flightDate").toString(); +// nmsController.getData() log.info("收到来自窗口" + sid + "的信息:" + message); //群发消息 for (WebSocketServer item : webSocketSet) {