diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/shiftManage/ShiftManageApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/shiftManage/ShiftManageApplicationService.java index d47fcf3a6..b37b23248 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/shiftManage/ShiftManageApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/shiftManage/ShiftManageApplicationService.java @@ -742,7 +742,11 @@ public class ShiftManageApplicationService { continue; } shiftMoveMaterialQuantityList.forEach(shiftMoveMaterialQuantityPO -> { - AjaxResult storageLocationResult = systemServiceFeign.getStorageLocationInfoByStorageLocationId(shiftMoveMaterialQuantityPO.getNewStorageLocationId()); + Long newStorageLocationId = shiftMoveMaterialQuantityPO.getNewStorageLocationId(); + if (newStorageLocationId == null || newStorageLocationId <= 0) { + throw new ServiceException("目标库位不能为空,请选择目标库位"); + } + AjaxResult storageLocationResult = systemServiceFeign.getStorageLocationInfoByStorageLocationId(newStorageLocationId); if(!"200".equals(String.valueOf(storageLocationResult.get("code")))){ throw new ServiceException("获取上架库位信息失败"); } diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java index 7e824fc0b..2f7b422de 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java @@ -150,20 +150,35 @@ public class StockOutOrderApplicationService { List stockOutOrderPOS = stockOutOrderDomainService.queryList(stockOutOrderDO); for (StockOutOrderPO stockOutOrderPO : stockOutOrderPOS) { StockOutOrderPO stockOutOrderPO1 = stockOutOrderDomainService.getInfoChildren(stockOutOrderPO.getOutOrderId()); - List materialDetailList = stockOutOrderPO1.getMaterialDetailList(); - BigDecimal reduce = materialDetailList.stream().map(OutMaterialDetailPO::getOutboundQuantity).reduce(BigDecimal.ZERO, BigDecimal::add); + List materialDetailList = stockOutOrderPO1 != null ? stockOutOrderPO1.getMaterialDetailList() : null; + if (materialDetailList == null) { + materialDetailList = Collections.emptyList(); + } + BigDecimal reduce = materialDetailList.stream().map(OutMaterialDetailPO::getOutboundQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); stockOutOrderPO.setTotalOutboundQuantity(reduce); - stockOutOrderPO.setAllocationQuantity(stockOutOrderPO1.getAllocationQuantity()); - // PDA复核物料总数量:使用实际下发时的拣货完成数量(picking_material_detail),而非计划数量 + stockOutOrderPO.setAllocationQuantity(stockOutOrderPO1 != null ? stockOutOrderPO1.getAllocationQuantity() : null); String outOrderNumber = stockOutOrderPO.getOutOrderNumber(); + // PDA复核物料总数量:使用实际下发时的拣货完成数量(picking_material_detail),拣货多少显示多少 + // PDA端物料总数量取quantity字段、复核总数量取checkQuantity字段,需同时设置quantity和pickingQuantity BigDecimal actualPickingQty = pickingMaterialDetailService.sumPickingQuantityByOutOrderNumber(outOrderNumber); - stockOutOrderPO.setPickingQuantity(actualPickingQty.compareTo(BigDecimal.ZERO) > 0 ? actualPickingQty : stockOutOrderPO1.getPickingQuantity()); - // 物料种类:按有拣货数量的明细统计 + BigDecimal displayPickingQty = actualPickingQty.compareTo(BigDecimal.ZERO) > 0 ? actualPickingQty : (stockOutOrderPO1 != null ? stockOutOrderPO1.getPickingQuantity() : BigDecimal.ZERO); + stockOutOrderPO.setPickingQuantity(displayPickingQty); + stockOutOrderPO.setQuantity(displayPickingQty); + // 物料种类:优先从picking_material_detail统计,为0时从out_material_detail按料号去重 Integer materialTypeCount = pickingMaterialDetailService.countMaterialTypesByOutOrderNumber(outOrderNumber); if (materialTypeCount != null && materialTypeCount > 0) { stockOutOrderPO.setMaterialQuantity(materialTypeCount); + } else { + long count = materialDetailList.stream() + .map(d -> d.getMaterialBaseInfoId() != null ? String.valueOf(d.getMaterialBaseInfoId()) : d.getMaterialCode()) + .filter(Objects::nonNull) + .distinct() + .count(); + stockOutOrderPO.setMaterialQuantity((int) count); } - stockOutOrderPO.setCheckQuantity(stockOutOrderPO1.getCheckQuantity()); + // 复核总数量:从out_material_detail汇总check_quantity + BigDecimal checkSum = materialDetailList.stream().map(OutMaterialDetailPO::getCheckQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + stockOutOrderPO.setCheckQuantity(checkSum); } return stockOutOrderPOS; }