From e04f2681953b2669927eb9ab28b943e2dc295b15 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:55:08 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90fix=20sonar=E3=80=91DlMockController?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dlglong/controller/DlMockController.java | 170 ++++++++++-------- 1 file changed, 95 insertions(+), 75 deletions(-) diff --git a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/dlglong/controller/DlMockController.java b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/dlglong/controller/DlMockController.java index 27693e4b..bee2bc1e 100644 --- a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/dlglong/controller/DlMockController.java +++ b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/dlglong/controller/DlMockController.java @@ -16,6 +16,8 @@ import com.jero.common.system.query.QueryGenerator; import com.jero.common.constant.VXESocketConst; import com.jero.modules.demo.mock.vxe.websocket.VXESocket; import com.jero.modules.dlglong.entity.MockEntity; +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 DlMockController { * @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 DlMockController { * @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 DlMockController { * @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() 即可 */ // 封装行数据 @@ -120,7 +122,7 @@ public class DlMockController { * @return */ @GetMapping("/change4") - public Result mockChange4(@RequestParam("status") String status) { + public Result mockChange4(@RequestParam("status") String status) { // 封装socket数据 JSONObject socketData = new JSONObject(); // 这里的 key 是前端注册时使用的key,必须保持一致 @@ -142,7 +144,7 @@ public class DlMockController { * @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); @@ -155,7 +157,7 @@ public class DlMockController { * @param tableData 表格数据(实际使用时可以替换成一个List实体类) */ @PostMapping("/immediateSaveAll") - public Result mockImmediateSaveAll(@RequestBody JSONArray tableData) throws Exception { + public Result mockImmediateSaveAll(@RequestBody JSONArray tableData) throws InterruptedException { // 【注】: // 1、tableData里包含该页所有的数据 // 2、如果你实现了“即时保存”,那么除了新增的数据,其他的都是已经保存过的了, @@ -178,7 +180,7 @@ public class DlMockController { * @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查询子级,如果为空则查询顶级 @@ -204,7 +206,7 @@ public class DlMockController { * @return */ @GetMapping("/getDdjhData") - public Result getMockDdjhData( + public Result> getMockDdjhData( // SpringMVC 会自动将参数注入到实体里 MockEntity mockEntity, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @@ -222,32 +224,11 @@ public class DlMockController { 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 { - log.info("\ngetDdjhData - 高级查询条件:"); - // 高级查询模式 - MatchTypeEnum matchType = MatchTypeEnum.getByValue(superQueryMatchType); - if (matchType == null) { - log.info("-- 高级查询模式:不识别(" + superQueryMatchType + ")"); - } else { - log.info("-- 高级查询模式:" + matchType.getValue()); - } - superQueryParams = URLDecoder.decode(superQueryParams, "UTF-8"); - List conditions = JSON.parseArray(superQueryParams, QueryCondition.class); - if (conditions != null) { - for (QueryCondition condition : conditions) { - log.info("-- " + JSON.toJSONString(condition)); - } - } else { - log.info("-- 没有传递任何高级查询条件"); - } - } catch (Exception e) { - log.error("-- 高级查询操作失败:" + superQueryParams, e); - e.printStackTrace(); - } + printExpertQuery(superQueryParams, superQueryMatchType); /* 注:实际使用中不用写上面那种繁琐的代码,这里只是为了直观的输出到控制台里而写的示例, 使用下面这种写法更简洁方便 */ @@ -270,12 +251,19 @@ public class DlMockController { 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)) { // 拖轮根据分号分割 @@ -283,49 +271,81 @@ public class DlMockController { // 查询子表数据 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; - } - } - } - } + getRecords(tugStatusMap, tugs, subRecords); } // 新加一个字段用于保存拖轮状态,不要直接覆盖原来的,这个字段可以不保存到数据库里 - record.put("tug_status", tugStatusMap); + obj.put("tug_status", tugStatusMap); + } + return records; + } + + private void getRecords(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; + } + } + } + + private void printExpertQuery(@RequestParam(name = "superQueryParams", required = false) String superQueryParams, @RequestParam(name = "superQueryMatchType", required = false) String superQueryMatchType) { + try { + log.info("\ngetDdjhData - 高级查询条件:"); + // 高级查询模式 + MatchTypeEnum matchType = MatchTypeEnum.getByValue(superQueryMatchType); + if (matchType == null) { + log.info("-- 高级查询模式:不识别(" + superQueryMatchType + ")"); + } else { + log.info("-- 高级查询模式:" + matchType.getValue()); + } + superQueryParams = URLDecoder.decode(superQueryParams, "UTF-8"); + List conditions = JSON.parseArray(superQueryParams, QueryCondition.class); + if (conditions != null) { + for (QueryCondition condition : conditions) { + log.info("-- " + JSON.toJSONString(condition)); + } + } else { + log.info("-- 没有传递任何高级查询条件"); + } + } catch (Exception e) { + log.error("-- 高级查询操作失败:" + superQueryParams, e); + e.printStackTrace(); } - page.setRecords(records); - return Result.OK(page); } /**