From ceb45fe9fe5d86cc0d7b0075cc2ab533a3698839 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E7=90=A6=E6=B6=9B?= Date: Thu, 16 Mar 2023 09:56:32 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90fix=20sonar=E3=80=91VxeMockController?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vxe/controller/VxeMockController.java | 122 ++++++++++-------- 1 file changed, 69 insertions(+), 53 deletions(-) diff --git a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/mock/vxe/controller/VxeMockController.java b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/mock/vxe/controller/VxeMockController.java index f03c093a..914b6198 100644 --- a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/mock/vxe/controller/VxeMockController.java +++ b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/mock/vxe/controller/VxeMockController.java @@ -16,6 +16,8 @@ import com.jero.common.system.query.QueryCondition; import com.jero.common.system.query.QueryGenerator; import com.jero.modules.demo.mock.vxe.entity.MockEntity; import com.jero.modules.demo.mock.vxe.websocket.VXESocket; +import org.apache.poi.ss.formula.functions.T; +import org.jetbrains.annotations.NotNull; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; @@ -38,7 +40,7 @@ public class VxeMockController { * @return */ @GetMapping("/change1") - public Result mockChange1(@RequestParam("id") String id, @RequestParam("status") String status) { + public Result mockChange1(@RequestParam("id") String id, @RequestParam("status") String status) { /* id 为 行的id(rowId),只要获取到rowId,那么只需要调用 VXESocket.sendMessageToAll() 即可 */ // 封装行数据 @@ -61,7 +63,7 @@ public class VxeMockController { * @return */ @GetMapping("/change2") - public Result mockChange2(@RequestParam("id") String id, @RequestParam("tug_status") String tug_status) { + public Result mockChange2(@RequestParam("id") String id, @RequestParam("tug_status") String tug_status) { /* id 为 行的id(rowId),只要获取到rowId,那么只需要调用 VXESocket.sendMessageToAll() 即可 */ // 封装行数据 @@ -85,7 +87,7 @@ public class VxeMockController { * @return */ @GetMapping("/change3") - public Result mockChange3(@RequestParam("id") String id, @RequestParam("progress") String progress) { + public Result mockChange3(@RequestParam("id") String id, @RequestParam("progress") String progress) { /* id 为 行的id(rowId),只要获取到rowId,那么只需要调用 VXESocket.sendMessageToAll() 即可 */ // 封装行数据 @@ -121,7 +123,7 @@ public class VxeMockController { * @return */ @GetMapping("/change4") - public Result mockChange4(@RequestParam("status") String status) { + public Result mockChange4(@RequestParam("status") String status) { // 封装socket数据 JSONObject socketData = new JSONObject(); // 这里的 key 是前端注册时使用的key,必须保持一致 @@ -143,7 +145,7 @@ public class VxeMockController { * @param rowData 行数据,实际使用时可以替换成一个实体类 */ @PostMapping ("/immediateSaveRow") - public Result mockImmediateSaveRow(@RequestBody JSONObject rowData) throws Exception { + public Result mockImmediateSaveRow(@RequestBody JSONObject rowData) throws InterruptedException { log.info("即时保存.rowData:" + rowData.toJSONString()); // 延时1.5秒,模拟网慢堵塞真实感 Thread.sleep(500); @@ -156,7 +158,7 @@ public class VxeMockController { * @param tableData 表格数据(实际使用时可以替换成一个List实体类) */ @PostMapping("/immediateSaveAll") - public Result mockImmediateSaveAll(@RequestBody JSONArray tableData) throws Exception { + public Result mockImmediateSaveAll(@RequestBody JSONArray tableData) throws InterruptedException { // 【注】: // 1、tableData里包含该页所有的数据 // 2、如果你实现了“即时保存”,那么除了新增的数据,其他的都是已经保存过的了, @@ -179,7 +181,7 @@ public class VxeMockController { * @return */ @GetMapping("/getData") - public Result getMockData( + public Result> getMockData( @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, // 父级id,根据父级id查询子级,如果为空则查询顶级 @@ -205,7 +207,7 @@ public class VxeMockController { * @return */ @GetMapping("/getDdjhData") - public Result getMockDdjhData( + public Result> getMockDdjhData( // SpringMVC 会自动将参数注入到实体里 MockEntity mockEntity, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @@ -223,8 +225,8 @@ public class VxeMockController { Map parameterMap = request.getParameterMap(); // 遍历输出到控制台 log.info("\ngetDdjhData - 普通查询条件:"); - for (String key : parameterMap.keySet()) { - log.info("-- " + key + ": " + JSON.toJSONString(parameterMap.get(key))); + for (Map.Entry entry : parameterMap.entrySet()) { + log.info("-- " + entry.getKey() + ": " + JSON.toJSONString(entry.getValue())); } // 输出高级查询 try { @@ -270,13 +272,20 @@ public class VxeMockController { } IPage page = this.queryDataPage(dataList, parentId, pageNo, pageSize); + List records = getJsonObjects(dataList, page); + page.setRecords(records); + return Result.OK(page); + } + + @NotNull + private List getJsonObjects(JSONArray dataList, IPage page) { // 逐行查询子表数据,用于计算拖轮状态 List records = page.getRecords(); - for (JSONObject record : records) { + for (JSONObject obj : records) { Map tugStatusMap = new HashMap<>(); - String id = record.getString("id"); + String id = obj.getString("id"); // 查询出主表的拖轮 - String tugMain = record.getString("tug"); + String tugMain = obj.getString("tug"); // 判断是否有值 if (StringUtils.isNotBlank(tugMain)) { // 拖轮根据分号分割 @@ -284,49 +293,56 @@ public class VxeMockController { // 查询子表数据 List subRecords = this.queryDataPage(dataList, id, null, null).getRecords(); // 遍历子表和拖轮数据,找出进行计算反推拖轮状态 - for (JSONObject subData : subRecords) { - String subTug = subData.getString("tug"); - if (StringUtils.isNotBlank(subTug)) { - for (String tug : tugs) { - if (tug.equals(subTug)) { - // 计算拖轮状态逻辑 - int statusCode = 0; - - /* 如果有发船时间、作业开始时间、作业结束时间、回船时间,则主表中的拖轮列中的每个拖轮背景色要即时变色 */ - - // 有发船时间,状态 +1 - String departureTime = subData.getString("departure_time"); - if (StringUtils.isNotBlank(departureTime)) { - statusCode += 1; - } - // 有作业开始时间,状态 +1 - String workBeginTime = subData.getString("work_begin_time"); - if (StringUtils.isNotBlank(workBeginTime)) { - statusCode += 1; - } - // 有作业结束时间,状态 +1 - String workEndTime = subData.getString("work_end_time"); - if (StringUtils.isNotBlank(workEndTime)) { - statusCode += 1; - } - // 有回船时间,状态 +1 - String returnTime = subData.getString("return_time"); - if (StringUtils.isNotBlank(returnTime)) { - statusCode += 1; - } - // 保存拖轮状态,key是拖轮的值,value是状态,前端根据不同的状态码,显示不同的颜色,这个颜色也可以后台计算完之后返回给前端直接使用 - tugStatusMap.put(tug, statusCode); - break; - } - } - } - } + doForSubRecords(tugStatusMap, tugs, subRecords); } // 新加一个字段用于保存拖轮状态,不要直接覆盖原来的,这个字段可以不保存到数据库里 - record.put("tug_status", tugStatusMap); + obj.put("tug_status", tugStatusMap); + } + return records; + } + + private void doForSubRecords(Map tugStatusMap, String[] tugs, List subRecords) { + for (JSONObject subData : subRecords) { + String subTug = subData.getString("tug"); + if (StringUtils.isNotBlank(subTug)) { + doForTugs(tugStatusMap, tugs, subData, subTug); + } + } + } + + private void doForTugs(Map tugStatusMap, String[] tugs, JSONObject subData, String subTug) { + for (String tug : tugs) { + if (tug.equals(subTug)) { + // 计算拖轮状态逻辑 + int statusCode = 0; + + /* 如果有发船时间、作业开始时间、作业结束时间、回船时间,则主表中的拖轮列中的每个拖轮背景色要即时变色 */ + + // 有发船时间,状态 +1 + String departureTime = subData.getString("departure_time"); + if (StringUtils.isNotBlank(departureTime)) { + statusCode += 1; + } + // 有作业开始时间,状态 +1 + String workBeginTime = subData.getString("work_begin_time"); + if (StringUtils.isNotBlank(workBeginTime)) { + statusCode += 1; + } + // 有作业结束时间,状态 +1 + String workEndTime = subData.getString("work_end_time"); + if (StringUtils.isNotBlank(workEndTime)) { + statusCode += 1; + } + // 有回船时间,状态 +1 + String returnTime = subData.getString("return_time"); + if (StringUtils.isNotBlank(returnTime)) { + statusCode += 1; + } + // 保存拖轮状态,key是拖轮的值,value是状态,前端根据不同的状态码,显示不同的颜色,这个颜色也可以后台计算完之后返回给前端直接使用 + tugStatusMap.put(tug, statusCode); + break; + } } - page.setRecords(records); - return Result.OK(page); } /**