From 4df1d073c776f3c9c46c48cabfb9ada29b2d5f46 Mon Sep 17 00:00:00 2001 From: liangzhou <594755172@qq.com> Date: Wed, 19 Nov 2025 10:02:30 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E5=8F=91=E9=80=81=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B2.=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=AE=8C=E6=88=90=E5=B7=A5=E4=BD=9C=E5=8F=91=E7=94=9F?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wms/controller/TaskController.java | 5 +- .../WmsJobServiceImplements.java | 6 +- .../WorkServiceImplements.java | 100 ++++++++++++------ src/main/java/com/wms/utils/HttpUtils.java | 18 ++-- 4 files changed, 83 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/wms/controller/TaskController.java b/src/main/java/com/wms/controller/TaskController.java index e7bcec2..3f4d99e 100644 --- a/src/main/java/com/wms/controller/TaskController.java +++ b/src/main/java/com/wms/controller/TaskController.java @@ -1951,7 +1951,6 @@ public class TaskController { */ @PostMapping("/confirmFinishedWork") @ResponseBody - @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) @MyLog(logTitle = "工作完成确认", logMethod = "confirmFinishedWork") public String confirmFinishedWork(@RequestBody WorkQuery workQuery) { logger.info("工作完成确认:{},ip地址:{}", convertJsonString(workQuery), HttpUtils.getIpAddr(servletRequest)); @@ -2003,9 +2002,7 @@ public class TaskController { } return convertJsonString(response); } catch (Exception e) { - // 回滚事务 - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - logger.error("工作完成确认异常"); + logger.error("工作完成确认异常:{}", convertJsonString(e)); response.setCode(ResponseCode.ERROR.getCode()); response.setMessage("工作完成确认异常"); return convertJsonString(response); diff --git a/src/main/java/com/wms/service/business/serviceImplements/WmsJobServiceImplements.java b/src/main/java/com/wms/service/business/serviceImplements/WmsJobServiceImplements.java index 745254b..4e1524f 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/WmsJobServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/WmsJobServiceImplements.java @@ -129,10 +129,10 @@ public class WmsJobServiceImplements implements IWmsJobService { // 循环发送任务 for (int i = 0; i < request.size(); i += maxWcsAcceptNums) { List tempRequest = request.subList(i, Math.min(i + maxWcsAcceptNums, request.size())); - logger.info("向WCS发送任务{}-{},地址:{},请求详情:{}", i + 1, Math.min(i + maxWcsAcceptNums, request.size()), url, convertJsonString(request)); - ResponseEntity result = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(url, convertJsonString(request)), ResponseEntity.class); + logger.info("向WCS发送任务{}-{},地址:{},请求详情:{}", i + 1, Math.min(i + maxWcsAcceptNums, request.size()), url, convertJsonString(tempRequest)); + ResponseEntity result = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(url, convertJsonString(tempRequest)), ResponseEntity.class); try { - logService.save(new WmsLog(WmsUtils.generateId("LOG_"), "向WCS发送任务", "SetStackerTask", JSON.toJSONString(request), JSON.toJSONString(result), url, LocalDateTime.now(), "WMS")); + logService.save(new WmsLog(WmsUtils.generateId("LOG_"), "向WCS发送任务", "SetStackerTask", JSON.toJSONString(tempRequest), JSON.toJSONString(result), url, LocalDateTime.now(), "WMS")); } catch (Exception e) { logger.error("保存发送任务的日志错误。"); } diff --git a/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java b/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java index 8aebf8d..240cc1a 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java @@ -774,22 +774,20 @@ public class WorkServiceImplements implements IWorkService { .eq(ELocationConfig::getWorkStation, workStation)); // 保存一下记录 List eLocationConfigLastList = ELocationConfig.toLocationsConfigLastList(eLocationConfigList); - // 先清空之前的 - eLocationConfigLastService.remove(new LambdaQueryWrapper() - .eq(ELocationConfigLast::getWorkStation, workStation)); - eLocationConfigLastService.saveBatch(eLocationConfigLastList); - // 删除所有的标签配置 - eLocationConfigService.remove(new LambdaQueryWrapper() - .eq(ELocationConfig::getWorkStation, workStation)); + // 查询当前站台的所有工作流列表 List workFlowList = workFlowService.list(new LambdaQueryWrapper() .eq(WorkFlow::getWorkStation, workStation) .eq(WorkFlow::getWorkStatus, 2)); + if (workFlowList.isEmpty()) { + return "没有已完成的工作流可以确认"; + } // 保存,防止标签未打印 workFlowLastService.remove(new LambdaQueryWrapper().eq(WorkFlowLast::getWorkStation, workStation)); workFlowLastService.saveBatch(BeanUtil.copyToList(workFlowList, WorkFlowLast.class)); // workSummary列表 List workSummaryList = new ArrayList<>(); + List needUpdateKateOrdersList = new ArrayList<>(); for (WorkFlow workFlow : workFlowList) { WorkSummary summary = new WorkSummary(); summary.setWorkFlowId(workFlow.getWorkFlowId()); @@ -814,34 +812,76 @@ public class WorkServiceImplements implements IWorkService { summary.setELocationId(!currentBoxELocationList.isEmpty() ? currentBoxELocationList.get(0).getELocationId() : ""); workSummaryList.add(summary); // 更新工单表 - kateOrdersService.update(new LambdaUpdateWrapper() - .set(KateOrders::getOrderStatus, 4) - .set(KateOrders::getFinishTime, LocalDateTime.now()) - .set(KateOrders::getPickedQuantity, workFlow.getPickedNum()) - .set(KateOrders::getLackQuantity, workFlow.getNeedNum().subtract(workFlow.getPickedNum())) - .eq(KateOrders::getOrderId, workFlow.getOrderId()) - .eq(KateOrders::getSupplyArea, workFlow.getWorkCenter()) - .eq(KateOrders::getGoodsId, workFlow.getGoodsId())); - // 如果当前工单已经没有未完成的工作,更新DBS状态完成 - if (!kateOrdersService.exists(new LambdaQueryWrapper() - .eq(KateOrders::getOrderId, workFlow.getOrderId()) - .ne(KateOrders::getOrderStatus, 4))) { + KateOrders tempKateOrder = new KateOrders(); + tempKateOrder.setOrderId(workFlow.getOrderId()); + tempKateOrder.setFinishTime(LocalDateTime.now()); + tempKateOrder.setPickedQuantity(workFlow.getPickedNum()); + tempKateOrder.setLackQuantity(workFlow.getNeedNum().subtract(workFlow.getPickedNum())); + tempKateOrder.setOrderStatus(4); + needUpdateKateOrdersList.add(tempKateOrder); + } + // 工单相关 + List orderIdList = needUpdateKateOrdersList.stream().map(KateOrders::getOrderId).distinct().toList(); + List workOrderList = needUpdateKateOrdersList.stream().map(KateOrders::getWorkOrder).distinct().toList(); + // 查询出这些workOrder的工单 + List kateOrdersList = kateOrdersService.list(new LambdaQueryWrapper() + .in(KateOrders::getWorkOrder, workOrderList)); + Map finishWorkOrderMap = new HashMap<>(); + if (!kateOrdersList.isEmpty()) { + for (KateOrders kateOrders : kateOrdersList) { + if (orderIdList.contains(kateOrders.getOrderId())) { + // 本次完成的工单 + kateOrders.setOrderStatus(4); + } + // 判断是否完成 + if (kateOrders.getOrderStatus() != 4) { + finishWorkOrderMap.put(kateOrders.getWorkOrder(), finishWorkOrderMap.getOrDefault(kateOrders.getWorkOrder(), 0) - 1); + } else { + if (!finishWorkOrderMap.containsKey(kateOrders.getWorkOrder())) { + finishWorkOrderMap.put(kateOrders.getWorkOrder(), 0); + } + } + } + } + // 筛选出已经全部完成的工单 + List needFinishWorkOrderList = new ArrayList<>(); + for (String workOrder : finishWorkOrderMap.keySet()) { + if (finishWorkOrderMap.get(workOrder) >= 0) { + needFinishWorkOrderList.add(workOrder); + } + } + + boolean doTransResult = dbTransUtils.useTran(() -> { + workSummaryService.saveOrUpdateBatch(workSummaryList); + // 先清空之前的 + eLocationConfigLastService.remove(new LambdaQueryWrapper() + .eq(ELocationConfigLast::getWorkStation, workStation)); + eLocationConfigLastService.saveBatch(eLocationConfigLastList); + // 删除所有的标签配置 + eLocationConfigService.remove(new LambdaQueryWrapper() + .eq(ELocationConfig::getWorkStation, workStation)); + // 移除工作流 + workFlowService.remove(new LambdaQueryWrapper() + .eq(WorkFlow::getWorkStation, workStation)); + // 移库站台要料 + goodsToStationService.remove(new LambdaQueryWrapper() + .eq(GoodsToStation::getWorkStation, workStation)); + // 完成工单 + if (!needUpdateKateOrdersList.isEmpty()) { + kateOrdersService.updateBatchById(needUpdateKateOrdersList); + } + // 完成dbs + if (!needFinishWorkOrderList.isEmpty()) { kateDBSService.update(new LambdaUpdateWrapper() .set(KateDBS::getDbsStatus, 2) .set(KateDBS::getLastUpdateTime, LocalDateTime.now()) - .eq(KateDBS::getWorkOrder, workFlow.getOrderId())); + .in(KateDBS::getWorkOrder, needFinishWorkOrderList)); } + }); + if (!doTransResult) { + logger.error("完成工作执行数据库事务异常。"); + return "完成站台:" + workStation + "工作执行数据库事务异常!"; } - //解决workSummary的主键冲突问题 去掉workSummaryListlist中对象WorkFlowId重复的对象 - workSummaryList = workSummaryList.stream().collect(Collectors.toMap(WorkSummary::getWorkFlowId, a -> a, (k1, k2) -> k1)).values().stream().collect(Collectors.toList()); - - workSummaryService.saveOrUpdateBatch(workSummaryList); - // 移除工作流 - workFlowService.remove(new LambdaQueryWrapper() - .eq(WorkFlow::getWorkStation, workStation)); - // 移库站台要料 - goodsToStationService.remove(new LambdaQueryWrapper() - .eq(GoodsToStation::getWorkStation, workStation)); } catch (Exception e) { logger.error("完成站台:{},工作发生异常:{}", workStation, e.getMessage()); result = "完成站台:" + workStation + "工作发生异常!"; diff --git a/src/main/java/com/wms/utils/HttpUtils.java b/src/main/java/com/wms/utils/HttpUtils.java index 6a8b3af..4fafdac 100644 --- a/src/main/java/com/wms/utils/HttpUtils.java +++ b/src/main/java/com/wms/utils/HttpUtils.java @@ -101,9 +101,9 @@ public class HttpUtils { HttpGet httpGet = new HttpGet(url); // 设置超时时间 RequestConfig requestConfig = RequestConfig.custom() - .setConnectTimeout(5000) - .setConnectionRequestTimeout(1000) - .setSocketTimeout(5000).build(); + .setConnectTimeout(15000) + .setConnectionRequestTimeout(15000) + .setSocketTimeout(15000).build(); httpGet.setConfig(requestConfig); for(Map.Entry entry : header.entrySet()){ @@ -153,9 +153,9 @@ public class HttpUtils { httpClient = HttpClients.createDefault(); HttpPost httppost = new HttpPost(url); RequestConfig requestConfig = RequestConfig.custom() - .setConnectTimeout(5000) - .setConnectionRequestTimeout(5000) - .setSocketTimeout(5000).build(); + .setConnectTimeout(15000) + .setConnectionRequestTimeout(15000) + .setSocketTimeout(15000).build(); httppost.setConfig(requestConfig); httppost.setHeader("Content-Type", "application/json;charset=UTF-8"); if (StringUtils.isEmpty(token) && StringUtils.isNotEmpty(userName) && StringUtils.isNotEmpty(password)) { @@ -197,9 +197,9 @@ public class HttpUtils { httpClient = HttpClients.createDefault(); HttpPost httppost = new HttpPost(url); RequestConfig requestConfig = RequestConfig.custom() - .setConnectTimeout(5000) - .setConnectionRequestTimeout(1000) - .setSocketTimeout(5000).build(); + .setConnectTimeout(15000) + .setConnectionRequestTimeout(15000) + .setSocketTimeout(15000).build(); httppost.setConfig(requestConfig); httppost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); if (StringUtils.isEmpty(token) && StringUtils.isNotEmpty(userName) && StringUtils.isNotEmpty(password)) {