From aaf44fe9297977270d69f0e678bf120324b94135 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Mon, 16 Mar 2026 16:16:28 +0800 Subject: [PATCH] =?UTF-8?q?PDA=E6=8C=89=E5=8D=95=E7=A7=BB=E4=BD=8D?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ShiftManageDomainService.java | 47 +++++++++++++------ .../ShiftMaterialDetailMapper.xml | 1 + 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/shiftManage/service/ShiftManageDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/shiftManage/service/ShiftManageDomainService.java index da8ffeb51..5a5fe2e11 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/shiftManage/service/ShiftManageDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/shiftManage/service/ShiftManageDomainService.java @@ -1,4 +1,4 @@ -package com.mhd.wms.domain.shiftManage.service; +package com.mhd.wms.domain.shiftManage.service; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; @@ -674,7 +674,14 @@ public class ShiftManageDomainService { shiftManage.setShiftQuantity(shiftManageDO.getShiftQuantity()); shiftManage.setShiftMaterialQuantity(shiftManageDO.getShiftMaterialQuantity()); int shiftStatus = 3; - if(shiftManageDO.getShiftQuantity().compareTo(shiftManagePO.getQuantity()) >= 0){ + // 多条物料时,需要查询所有明细,判断是否全部已完成移位(shiftQuantity >= quantity),才能置为已完成 + ShiftMaterialDetailDO queryDetailDO = new ShiftMaterialDetailDO(); + queryDetailDO.setShiftNumber(shiftManagePO.getShiftNumber()); + List allDetails = shiftMaterialDetailService.queryList(queryDetailDO); + boolean allDone = !allDetails.isEmpty() && allDetails.stream().allMatch(d -> + d.getShiftQuantity() != null && d.getQuantity() != null + && d.getShiftQuantity().compareTo(d.getQuantity()) >= 0); + if (allDone) { shiftStatus = 4; } shiftManage.setShiftStatus(shiftStatus); @@ -705,32 +712,44 @@ public class ShiftManageDomainService { ShiftMaterialDetailDO shiftMaterialDetailDO = new ShiftMaterialDetailDO(); shiftMaterialDetailDO.setShiftNumber(shiftNumber); List shiftMaterialDetailPOList = shiftMaterialDetailService.queryListChildren(shiftMaterialDetailDO); - // 避免 NPE:getMaterialMoreDetailList 可能为 null;同一 shift 下 shiftNumber 重复需合并 - Map> MaterialMoreDetailMap = shiftMaterialDetailList.stream() - .filter(d -> d.getShiftNumber() != null) - .collect(Collectors.toMap( - ShiftMaterialDetailDO::getShiftNumber, - d -> d.getMaterialMoreDetailList() != null ? d.getMaterialMoreDetailList() : new ArrayList<>(), - (a, b) -> a - )); + // key by uniqueId so each detail maps to its own materialMoreDetailList + Map> materialMoreDetailMap = new java.util.HashMap<>(); + for (ShiftMaterialDetailDO d : shiftMaterialDetailList) { + if (d.getUniqueId() != null) { + materialMoreDetailMap.put(d.getUniqueId(), + d.getMaterialMoreDetailList() != null ? d.getMaterialMoreDetailList() : new ArrayList<>()); + } + if (!CollectionUtils.isEmpty(d.getChildren())) { + for (ShiftMaterialDetailDO child : d.getChildren()) { + if (child.getUniqueId() != null) { + materialMoreDetailMap.put(child.getUniqueId(), + child.getMaterialMoreDetailList() != null ? child.getMaterialMoreDetailList() + : (d.getMaterialMoreDetailList() != null ? d.getMaterialMoreDetailList() : new ArrayList<>())); + } + } + } + } for (ShiftMaterialDetailPO shiftMaterialDetailPO : shiftMaterialDetailPOList){ MaterialInventory materialInventoryOldDb = materialInventoryService.getById(shiftMaterialDetailPO.getMaterialInventoryId()); List shiftMaterialDetailPOChildrenList = shiftMaterialDetailPO.getChildren(); boolean hasChildren = !CollectionUtils.isEmpty(shiftMaterialDetailPOChildrenList); - // 有子项时仅用子项参与库存计算,避免父项+子项重复累加(容器移位已改为扁平结构无子项,此处主要防护按单移位的父子同目标场景) BigDecimal shiftQuantity; if (hasChildren) { shiftQuantity = shiftMaterialDetailPOChildrenList.stream() .map(c -> c.getShiftQuantity() != null ? c.getShiftQuantity() : BigDecimal.ZERO) .reduce(BigDecimal.ZERO, BigDecimal::add); - shiftMaterialDetailPO.setMaterialMoreDetailList(MaterialMoreDetailMap.get(shiftMaterialDetailPO.getShiftNumber())); + shiftMaterialDetailPO.setMaterialMoreDetailList(materialMoreDetailMap.get(shiftMaterialDetailPO.getUniqueId())); for (ShiftMaterialDetailPO shiftMaterialDetailPOChildren : shiftMaterialDetailPOChildrenList) { - shiftMaterialDetailPOChildren.setMaterialMoreDetailList(MaterialMoreDetailMap.get(shiftMaterialDetailPO.getShiftNumber())); + List childMoreDetail = materialMoreDetailMap.get(shiftMaterialDetailPOChildren.getUniqueId()); + if (childMoreDetail == null) { + childMoreDetail = materialMoreDetailMap.get(shiftMaterialDetailPO.getUniqueId()); + } + shiftMaterialDetailPOChildren.setMaterialMoreDetailList(childMoreDetail); materialInventoryNowList.add(genMaterialInventory(shiftMaterialDetailPOChildren)); } } else { shiftQuantity = shiftMaterialDetailPO.getShiftQuantity() != null ? shiftMaterialDetailPO.getShiftQuantity() : BigDecimal.ZERO; - shiftMaterialDetailPO.setMaterialMoreDetailList(MaterialMoreDetailMap.get(shiftMaterialDetailPO.getShiftNumber())); + shiftMaterialDetailPO.setMaterialMoreDetailList(materialMoreDetailMap.get(shiftMaterialDetailPO.getUniqueId())); materialInventoryNowList.add(genMaterialInventory(shiftMaterialDetailPO)); } if (materialInventoryOldDb.getInventoryQuantity().compareTo(shiftQuantity) < 0){ diff --git a/mhd_wms/src/main/resources/mapper/shiftMaterialDetail/ShiftMaterialDetailMapper.xml b/mhd_wms/src/main/resources/mapper/shiftMaterialDetail/ShiftMaterialDetailMapper.xml index d9221f19d..64a3036b4 100644 --- a/mhd_wms/src/main/resources/mapper/shiftMaterialDetail/ShiftMaterialDetailMapper.xml +++ b/mhd_wms/src/main/resources/mapper/shiftMaterialDetail/ShiftMaterialDetailMapper.xml @@ -6,6 +6,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +