From 25c53502b527e7814d1ca9c159f505b2f6721647 Mon Sep 17 00:00:00 2001 From: "HUOJIN\\92525" <925259474@qq.com> Date: Sat, 7 Feb 2026 21:31:36 +0800 Subject: [PATCH] no message --- .../shipping/controller/PickController.java | 8 ---- .../service/processor/AllocateProcessor.java | 43 +++++++++++-------- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/controller/PickController.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/controller/PickController.java index e448667..c7148de 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/controller/PickController.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/controller/PickController.java @@ -8,19 +8,11 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; -import org.cpte.modules.base.entity.Stock; -import org.cpte.modules.constant.GeneralConstant; -import org.cpte.modules.receive.entity.Asn; -import org.cpte.modules.receive.entity.AsnDetail; -import org.cpte.modules.receive.service.processor.ReceiveBackProcessor; -import org.cpte.modules.serialNumber.PickSerialNumberRule; import org.cpte.modules.shipping.entity.Task; import org.cpte.modules.shipping.mapper.TaskMapper; import org.cpte.modules.shipping.service.ITaskService; import org.cpte.modules.shipping.service.processor.PickBackProcessor; -import org.cpte.modules.shipping.service.processor.PickProcessor; import org.cpte.modules.shipping.vo.PickData; -import org.jeecg.common.system.query.QueryRuleEnum; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/processor/AllocateProcessor.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/processor/AllocateProcessor.java index a0ecf18..e31742e 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/processor/AllocateProcessor.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/processor/AllocateProcessor.java @@ -842,34 +842,43 @@ public class AllocateProcessor { * @param createToTask 创建的拣货任务集合 * @param data 数据 */ - private final Object taskCreationLock = new Object(); private void createPickTask(PickDetail pickDetail, Pick pick, Item item, Inventory inventory, InventoryScore inventoryScore, BigDecimal allocateQty, List createToTask, AllocationData data) { - synchronized (taskCreationLock) { + String lockKey = "lock:createTask" + pickDetail.getId() + "_" + inventory.getId(); + String lockValue = null; + try { + lockValue = redissonLock.tryLock(lockKey, 10); + if (StringUtils.isEmpty(lockValue)) { + return; // 直接返回,不重复创建 + } Stock stock = data.getStockMap().get(inventory.getStockId()); - Point fromPoint = data.getPointMap().get(inventory.getPointId()); - // 判断是否整托分配 BigDecimal availableQty = BigDecimalUtil.subtract(inventory.getQuantity(), inventory.getQueuedQty(), 0); Integer izAll = availableQty.compareTo(BigDecimal.ZERO) <= 0 ? 0 : 1; - - // 目标库位 - //Point toPoint = inventoryScore.getOutPoint(); - // 构建拣货任务 String taskNo = String.format("%s_%d", pick.getNo(), pickDetail.getLineNo()); Task task = taskService.bulidTask( taskNo, TaskTypeEnum.PICK.getValue(), item, fromPoint, null, stock, pick.getId(), pickDetail.getId(), inventory.getItemKeyId(), inventory.getId(), allocateQty, izAll, null); - if (task != null) { - createToTask.add(task); - log.info("生成拣货任务: {}- 容器:{} - 库位:{} - 类型:{}- 分配数量:{}", - task.getTaskNo(), stock.getStockCode(), - fromPoint.getPointCode(), izAll, allocateQty); + boolean isDuplicate = createToTask.stream() + .anyMatch(t -> t.getPickDetailId().equals(pickDetail.getId()) + && t.getInventoryId().equals(inventory.getId())); + if (!isDuplicate) { + createToTask.add(task); + log.info("生成拣货任务: {}- 容器:{} - 库位:{} - 分配数量:{}", + task.getTaskNo(), stock.getStockCode(), fromPoint.getPointCode(), allocateQty); + } + } + } catch (Exception e) { + log.error("生成拣货任务失败", e); + throw e; + } finally { + if (StringUtils.isNotEmpty(lockValue)) { + redissonLock.unlock(lockKey, lockValue); } } } @@ -928,8 +937,8 @@ public class AllocateProcessor { if (CollectionUtils.isNotEmpty(movePoints)) { Set toPointIds = createToTask.stream().map(Task::getFromPointId).collect(Collectors.toSet()); movePoints = movePoints.stream().filter(point -> !toPointIds.contains(point.getId())).toList(); - if(CollectionUtils.isNotEmpty(movePoints)){ - List moveToTask = buildMoveTask(currOutPointCode, movePoints,processedStock); + if (CollectionUtils.isNotEmpty(movePoints)) { + List moveToTask = buildMoveTask(currOutPointCode, movePoints, processedStock); if (CollectionUtils.isNotEmpty(moveToTask)) { createToTask.addAll(moveToTask); } @@ -946,8 +955,8 @@ public class AllocateProcessor { * @param movePoints 移位库位 * @return 移位任务 */ - public List buildMoveTask(String currOutPointCode, List movePoints,Set processedStock) { - if(CollectionUtils.isEmpty(movePoints)){ + public List buildMoveTask(String currOutPointCode, List movePoints, Set processedStock) { + if (CollectionUtils.isEmpty(movePoints)) { return new ArrayList<>(); } List moveList = new ArrayList<>();