From 998f58c5867d18242afd7d99bfe33f978fd68a81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Sat, 14 Mar 2026 19:24:43 +0800 Subject: [PATCH] =?UTF-8?q?PDA=E5=86=85=E5=AE=B9=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ceiptMaterialDetailApplicationService.java | 1 - .../StockOutTaskOrderDomainService.java | 25 +++++++++++++ .../StockReceiptOrderDomainService.java | 14 +------- .../service/StockShelfOrderDomainService.java | 33 +++++++---------- .../TaskPickingMaterialDetailImpl.java | 36 +++++++++++++++---- .../todo/TaskPickingMaterialDetailDO.java | 16 +++++++++ .../PickingMaterialDetailMapper.xml | 20 +++++++++++ 7 files changed, 104 insertions(+), 41 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/receiptMaterialDetail/ReceiptMaterialDetailApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/receiptMaterialDetail/ReceiptMaterialDetailApplicationService.java index c157e39d5..725672b37 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/receiptMaterialDetail/ReceiptMaterialDetailApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/receiptMaterialDetail/ReceiptMaterialDetailApplicationService.java @@ -27,7 +27,6 @@ public class ReceiptMaterialDetailApplicationService { /** * 分页查询物料明细列表 */ - public List queryList(ReceiptMaterialDetailDO receiptMaterialDetailDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null){ diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutTaskOrder/service/StockOutTaskOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutTaskOrder/service/StockOutTaskOrderDomainService.java index 2b39251c6..e6f9a6c39 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutTaskOrder/service/StockOutTaskOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutTaskOrder/service/StockOutTaskOrderDomainService.java @@ -24,6 +24,8 @@ import com.mhd.wms.domain.outMaterialDetail.entity.OutMaterialDetail; import com.mhd.wms.domain.outMaterialDetail.repository.mapper.OutMaterialDetailMapper; import com.mhd.wms.domain.outOrderAbnormal.repository.facade.IOutOrderAbnormalService; import com.mhd.wms.domain.outOrderAbnormal.repository.todo.OutOrderAbnormalBaseDO; +import com.mhd.wms.domain.pickingMaterialDetail.entity.PickingMaterialDetail; +import com.mhd.wms.domain.pickingMaterialDetail.repository.facade.IPickingMaterialDetailService; import com.mhd.wms.domain.pickingOrder.entity.PickingOrder; import com.mhd.wms.domain.pickingOrder.repository.facade.IPickingOrderService; import com.mhd.wms.domain.pickingOrder.repository.po.PickingOrderPO; @@ -75,6 +77,8 @@ public class StockOutTaskOrderDomainService { @Autowired private IPickingOrderService pickingOrderService; @Autowired + private IPickingMaterialDetailService pickingMaterialDetailService; + @Autowired private IStockOutOrderService stockOutOrderService; @Autowired private IWaveOutOrderService waveOutOrderService; @@ -519,8 +523,10 @@ public class StockOutTaskOrderDomainService { @Transactional(rollbackFor = Exception.class) public Boolean updateStockOutOrder(PickingOrderPO pickingOrderPODb) { LoginUser loginUser = SecurityUtils.getLoginUser(); + // 与 PickingOrderDomainService 一致:只统计已拣货(status=3)的拣货单数量,确保完成拣货后出库单状态正确更新 List pickingOrderList = pickingOrderService.list(new QueryWrapper().lambda() .eq(PickingOrder::getDelFlag, 1) + .eq(PickingOrder::getStatus, 3) .eq(PickingOrder::getOrderNumber, pickingOrderPODb.getOrderNumber())); BigDecimal pickingQuantity = pickingOrderList.stream().map(PickingOrder::getPickingQuantity).reduce(BigDecimal.ZERO, BigDecimal::add); if (1 == pickingOrderPODb.getType()){ @@ -536,10 +542,29 @@ public class StockOutTaskOrderDomainService { genStockInOrder(stockOutOrderDb); } } + // 根据拣货单明细更新出库单物料明细的拣货数量(与 PickingOrderDomainService 一致) + for (PickingOrder pickingOrder : pickingOrderList) { + List list = pickingMaterialDetailService.list(new QueryWrapper().lambda() + .eq(PickingMaterialDetail::getPickingOrderNumber, pickingOrder.getPickingOrderNumber())); + for (PickingMaterialDetail pickingMaterialDetail : list) { + OutMaterialDetail outMaterialDetail = outMaterialDetailMapper.selectOne(new QueryWrapper().lambda() + .eq(OutMaterialDetail::getUniqueId, pickingMaterialDetail.getOutUniqueId()) + .eq(OutMaterialDetail::getDelFlag, 1)); + if (outMaterialDetail != null) { + outMaterialDetail.setPickingQuantity(pickingMaterialDetail.getPickingQuantity()); + outMaterialDetail.setTotalNetWeight(pickingMaterialDetail.getTotalNetWeight()); + outMaterialDetail.setTotalGrossWeight(pickingMaterialDetail.getTotalGrossWeight()); + outMaterialDetail.setTotalVolume(pickingMaterialDetail.getTotalVolume()); + outMaterialDetail.setTotalArea(pickingMaterialDetail.getTotalArea()); + outMaterialDetailMapper.updateById(outMaterialDetail); + } + } + } StockOutOrder stockOutOrder = new StockOutOrder(); stockOutOrder.setOutOrderNumber(pickingOrderPODb.getOrderNumber()); //1-已创建 2-已审核 3-部分分配 4-已分配 5-波次中 6-拣货中 7-拣货完成 8-复核中 9-已出库 10-已取消 11-已关闭 stockOutOrder.setStatus(status); + stockOutOrder.setPickingQuantity(pickingQuantity); stockOutOrder.setUpdateBy(loginUser.getUserid()); stockOutOrder.setUpdateByName(loginUser.getUsername()); stockOutOrder.setUpdateTime(new Date()); diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java index c682234e2..c8bfb0e81 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java @@ -228,23 +228,11 @@ public class StockReceiptOrderDomainService { receiptMaterialDetailPOChildren.setQuantity(null); }); } else { - // 主项无子项时:添加 parent_copy 到 children,供详情页展示(详情页从 children 读取数据) + // 主项无子项时:不添加 parent_copy,避免 PDA 端重复显示两条记录;主项自身已有全部数据,详情页可直接从主项读取 if (CollectionUtils.isEmpty(receiptMaterialDetailPO.getMaterialMoreDetailList())) { receiptMaterialDetailPO.setMaterialMoreDetailList(getMaterialMoreDetail(receiptMaterialDetailPO)); } - ReceiptMaterialDetailPO parentCopy = new ReceiptMaterialDetailPO(); - BeanUtils.copyProperties(receiptMaterialDetailPO, parentCopy, "children"); - parentCopy.setLevel(2); - parentCopy.setParentUniqueId(receiptMaterialDetailPO.getUniqueId()); - parentCopy.setQuantity(null); - parentCopy.setChildren(new ArrayList<>()); - if (CollectionUtils.isEmpty(parentCopy.getMaterialMoreDetailList())) { - parentCopy.setMaterialMoreDetailList(receiptMaterialDetailPO.getMaterialMoreDetailList()); - } - List serialList = inMaterialDetailSerialNumberMap.get(receiptMaterialDetailPO.getUniqueId()); - parentCopy.setMaterialDetailSerialNumberList(serialList != null ? serialList : new ArrayList<>()); receiptMaterialDetailPOChildrenList = new ArrayList<>(); - receiptMaterialDetailPOChildrenList.add(parentCopy); } receiptMaterialDetailPO.setChildren(receiptMaterialDetailPOChildrenList != null ? receiptMaterialDetailPOChildrenList : new ArrayList<>()); }); diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockShelfOrder/service/StockShelfOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockShelfOrder/service/StockShelfOrderDomainService.java index 75f8e1dfa..6c95e6edb 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockShelfOrder/service/StockShelfOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockShelfOrder/service/StockShelfOrderDomainService.java @@ -235,28 +235,19 @@ public class StockShelfOrderDomainService { MaterialMoreDetailDO materialMoreDetailDO = new MaterialMoreDetailDO(); materialMoreDetailDO.setOrderNumber(stockShelfOrderPO.getShelfOrderNumber()); shelfMaterialDetailPOList.forEach(shelfMaterialDetailPO -> { - List shelfMaterialDetailPOChildrenNowList = new ArrayList<>(); - ShelfMaterialDetailPO shelfMaterialDetailPOChildrenNow = new ShelfMaterialDetailPO(); - BeanUtils.copyProperties(shelfMaterialDetailPO, shelfMaterialDetailPOChildrenNow, "children"); - List materialDetailSerialNumberList = inMaterialDetailSerialNumberMap.get(shelfMaterialDetailPO.getUniqueId()); - if (!CollectionUtils.isEmpty(materialDetailSerialNumberList)){ - shelfMaterialDetailPOChildrenNow.setMaterialDetailSerialNumberList(materialDetailSerialNumberList); - }else { - shelfMaterialDetailPOChildrenNow.setMaterialDetailSerialNumberList(new ArrayList<>()); - } - shelfMaterialDetailPOChildrenNowList.add(shelfMaterialDetailPOChildrenNow); - //子集 + // 不添加 parent_copy,避免 PDA 端重复显示两条记录;主项自身已有全部数据,详情页可直接从主项读取 List shelfMaterialDetailPOChildrenList = shelfMaterialDetailPO.getChildren(); - shelfMaterialDetailPOChildrenList.forEach(receiptMaterialDetailPOChildren -> { - List materialDetailSerialNumberChildrenList = inMaterialDetailSerialNumberMap.get(shelfMaterialDetailPO.getUniqueId()); - if (!CollectionUtils.isEmpty(materialDetailSerialNumberChildrenList)){ - receiptMaterialDetailPOChildren.setMaterialDetailSerialNumberList(materialDetailSerialNumberChildrenList); - }else { - receiptMaterialDetailPOChildren.setMaterialDetailSerialNumberList(new ArrayList<>()); - } - }); - shelfMaterialDetailPOChildrenNowList.addAll(shelfMaterialDetailPOChildrenList); - shelfMaterialDetailPO.setChildren(shelfMaterialDetailPOChildrenNowList); + if (!CollectionUtils.isEmpty(shelfMaterialDetailPOChildrenList)) { + shelfMaterialDetailPOChildrenList.forEach(receiptMaterialDetailPOChildren -> { + List materialDetailSerialNumberChildrenList = inMaterialDetailSerialNumberMap.get(shelfMaterialDetailPO.getUniqueId()); + if (!CollectionUtils.isEmpty(materialDetailSerialNumberChildrenList)){ + receiptMaterialDetailPOChildren.setMaterialDetailSerialNumberList(materialDetailSerialNumberChildrenList); + }else { + receiptMaterialDetailPOChildren.setMaterialDetailSerialNumberList(new ArrayList<>()); + } + }); + } + shelfMaterialDetailPO.setChildren(shelfMaterialDetailPOChildrenList != null ? shelfMaterialDetailPOChildrenList : new ArrayList<>()); }); stockShelfOrderPO.setMaterialDetailList(shelfMaterialDetailPOList); return stockShelfOrderPO; diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/taskPickingMaterialDetail/repository/persistence/TaskPickingMaterialDetailImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/taskPickingMaterialDetail/repository/persistence/TaskPickingMaterialDetailImpl.java index 17c3c253f..75eed0939 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/taskPickingMaterialDetail/repository/persistence/TaskPickingMaterialDetailImpl.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/taskPickingMaterialDetail/repository/persistence/TaskPickingMaterialDetailImpl.java @@ -160,12 +160,36 @@ public class TaskPickingMaterialDetailImpl extends ServiceImpl pickingUniqueId.equals(p.getUniqueId())).findFirst().orElse(null); + if (existing != null) { + existing.setPickingQuantity((existing.getPickingQuantity() != null ? existing.getPickingQuantity() : BigDecimal.ZERO).add(qty)); + if (taskPickingMaterialDetailDO.getTotalNetWeight() != null) { + existing.setTotalNetWeight((existing.getTotalNetWeight() != null ? existing.getTotalNetWeight() : BigDecimal.ZERO).add(taskPickingMaterialDetailDO.getTotalNetWeight())); + } + if (taskPickingMaterialDetailDO.getTotalGrossWeight() != null) { + existing.setTotalGrossWeight((existing.getTotalGrossWeight() != null ? existing.getTotalGrossWeight() : BigDecimal.ZERO).add(taskPickingMaterialDetailDO.getTotalGrossWeight())); + } + if (taskPickingMaterialDetailDO.getTotalVolume() != null) { + existing.setTotalVolume((existing.getTotalVolume() != null ? existing.getTotalVolume() : BigDecimal.ZERO).add(taskPickingMaterialDetailDO.getTotalVolume())); + } + if (taskPickingMaterialDetailDO.getTotalArea() != null) { + existing.setTotalArea((existing.getTotalArea() != null ? existing.getTotalArea() : BigDecimal.ZERO).add(taskPickingMaterialDetailDO.getTotalArea())); + } + } else { + PickingMaterialDetailDO pickingMaterialDetailDO = new PickingMaterialDetailDO(); + pickingMaterialDetailDO.setUniqueId(pickingUniqueId); + pickingMaterialDetailDO.setPickingQuantity(qty); + pickingMaterialDetailDO.setTotalNetWeight(taskPickingMaterialDetailDO.getTotalNetWeight()); + pickingMaterialDetailDO.setTotalGrossWeight(taskPickingMaterialDetailDO.getTotalGrossWeight()); + pickingMaterialDetailDO.setTotalVolume(taskPickingMaterialDetailDO.getTotalVolume()); + pickingMaterialDetailDO.setTotalArea(taskPickingMaterialDetailDO.getTotalArea()); + pickingMaterialDetailList.add(pickingMaterialDetailDO); + } + totalPickingQuantity = totalPickingQuantity.add(qty); } //保存物料明细信息 saveOrUpdateBatch(taskPickingMaterialDetailList); diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/taskPickingMaterialDetail/repository/todo/TaskPickingMaterialDetailDO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/taskPickingMaterialDetail/repository/todo/TaskPickingMaterialDetailDO.java index c00697173..20092288b 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/taskPickingMaterialDetail/repository/todo/TaskPickingMaterialDetailDO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/taskPickingMaterialDetail/repository/todo/TaskPickingMaterialDetailDO.java @@ -207,4 +207,20 @@ public class TaskPickingMaterialDetailDO extends BaseVOEntity { @ApiModelProperty("序列号") private List materialDetailSerialNumberList; + + @ApiModelProperty("总净重(KG)") + @Excel(name = "总净重(KG)") + private BigDecimal totalNetWeight; + + @ApiModelProperty("总毛重(KG)") + @Excel(name = "总毛重(KG)") + private BigDecimal totalGrossWeight; + + @ApiModelProperty("总体积(CBM)") + @Excel(name = "总体积(CBM)") + private BigDecimal totalVolume; + + @ApiModelProperty("总面积(SQM)") + @Excel(name = "总面积(SQM)") + private BigDecimal totalArea; } diff --git a/mhd_wms/src/main/resources/mapper/pickingMaterialDetail/PickingMaterialDetailMapper.xml b/mhd_wms/src/main/resources/mapper/pickingMaterialDetail/PickingMaterialDetailMapper.xml index 6ac504b8c..ba330c641 100644 --- a/mhd_wms/src/main/resources/mapper/pickingMaterialDetail/PickingMaterialDetailMapper.xml +++ b/mhd_wms/src/main/resources/mapper/pickingMaterialDetail/PickingMaterialDetailMapper.xml @@ -206,6 +206,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" WHEN #{item.uniqueId} THEN LEAST(picking_quantity + #{item.pickingQuantity}, quantity) + + + WHEN #{item.uniqueId} THEN IFNULL(total_net_weight, 0) + IFNULL(#{item.totalNetWeight}, 0) + + + + + WHEN #{item.uniqueId} THEN IFNULL(total_gross_weight, 0) + IFNULL(#{item.totalGrossWeight}, 0) + + + + + WHEN #{item.uniqueId} THEN IFNULL(total_volume, 0) + IFNULL(#{item.totalVolume}, 0) + + + + + WHEN #{item.uniqueId} THEN IFNULL(total_area, 0) + IFNULL(#{item.totalArea}, 0) + + update_by = #{updateBy}, update_by_name = #{updateByName}, update_time = #{updateTime}