入库单明细收货数量

This commit is contained in:
秦鸿展
2026-02-11 10:55:42 +08:00
parent d8400d3a9d
commit 801c9fec3d
3 changed files with 365 additions and 21 deletions
@@ -73,28 +73,13 @@ public class StockInOrderApplicationService {
if (topOrganizationId != null && topOrganizationId != 1){
stockInOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
try {
// 直接从数据库查询当前登录用户选择的仓库,不使用缓存
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoFromDb(loginUser.getUserid());
if ("200".equals(String.valueOf(ajaxResult.get("code"))) && ajaxResult.get("data") != null) {
AssociationWarehouseCacheDO associationWarehouseCacheDO = JSON.parseObject(
JSONObject.toJSONString(ajaxResult.get("data")),
AssociationWarehouseCacheDO.class);
if (associationWarehouseCacheDO != null) {
if (associationWarehouseCacheDO.getWarehouseId() != null) {
stockInOrderDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId());
}
if (StringUtils.isNotBlank(associationWarehouseCacheDO.getWarehouseCode())) {
stockInOrderDO.setWarehouseCode(associationWarehouseCacheDO.getWarehouseCode());
}
if (StringUtils.isNotBlank(associationWarehouseCacheDO.getWarehouseName())) {
stockInOrderDO.setWarehouseName(associationWarehouseCacheDO.getWarehouseName());
}
}
// 前端有传warehouseId则优先使用传参;未传时才使用"用户关联仓库"作为默认值
if (stockInOrderDO.getWarehouseId() == null) {
AssociationWarehouseCacheDO associationWarehouseCacheDO =
SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid());
if (associationWarehouseCacheDO != null) {
stockInOrderDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId());
}
} catch (Exception e) {
// 如果获取仓库信息失败,记录日志但不影响查询(允许查询所有仓库)
log.warn("获取用户关联仓库信息失败,将查询所有仓库数据,用户ID:{},错误:{}", loginUser.getUserid(), e.getMessage());
}
}
return stockInOrderDomainService.queryList(stockInOrderDO);
@@ -26,7 +26,12 @@ import com.mhd.wms.domain.materialWarehouseControl.repository.facade.IMaterialWa
import com.mhd.wms.domain.materialWarehouseControl.repository.po.MaterialWarehouseControlPO;
import com.mhd.wms.domain.qualityInspection.repository.facade.IQualityInspectionService;
import com.mhd.wms.domain.qualityInspection.repository.todo.QualityInspectionDO;
import com.mhd.wms.domain.receiptMaterialDetail.repository.facade.IReceiptMaterialDetailService;
import com.mhd.wms.domain.receiptMaterialDetail.repository.po.ReceiptMaterialDetailPO;
import com.mhd.wms.domain.receiptMaterialDetail.repository.todo.ReceiptMaterialDetailDO;
import com.mhd.wms.domain.shelfMaterialDetail.repository.facade.IShelfMaterialDetailService;
import com.mhd.wms.domain.shelfMaterialDetail.repository.po.ShelfMaterialDetailPO;
import com.mhd.wms.domain.shelfMaterialDetail.repository.todo.ShelfMaterialDetailDO;
import com.mhd.wms.domain.stockInOrder.entity.StockInOrder;
import com.mhd.wms.domain.stockInOrder.repository.facade.IStockInOrderService;
import com.mhd.wms.domain.stockInOrder.repository.po.StockInOrderPO;
@@ -34,6 +39,9 @@ import com.mhd.wms.domain.stockInOrder.repository.todo.StockInOrderDO;
import com.mhd.wms.domain.stockReceiptOrder.repository.po.StockReceiptOrderPO;
import com.mhd.wms.domain.stockReceiptOrder.repository.todo.StockReceiptOrderDO;
import com.mhd.wms.domain.stockReceiptOrder.service.StockReceiptOrderDomainService;
import com.mhd.wms.domain.stockShelfOrder.repository.po.StockShelfOrderPO;
import com.mhd.wms.domain.stockShelfOrder.repository.todo.StockShelfOrderDO;
import com.mhd.wms.domain.stockShelfOrder.service.StockShelfOrderDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -62,6 +70,8 @@ public class StockInOrderDomainService {
@Autowired
private StockReceiptOrderDomainService stockReceiptOrderDomainService;
@Autowired
private StockShelfOrderDomainService stockShelfOrderDomainService;
@Autowired
private IQualityInspectionService qualityInspectionService;
@Autowired
private IMaterialBaseInfoService materialBaseInfoService;
@@ -71,6 +81,10 @@ public class StockInOrderDomainService {
private IMaterialWarehouseControlService materialWarehouseControlService;
@Autowired
private SystemServiceFeign systemServiceFeign;
@Autowired
private IReceiptMaterialDetailService receiptMaterialDetailService;
@Autowired
private IShelfMaterialDetailService shelfMaterialDetailService;
/**
* 分页查询入库单列表
@@ -180,10 +194,161 @@ public class StockInOrderDomainService {
inMaterialDetailDO.setInOrderNumber(stockInOrderPO.getInOrderNumber());
inMaterialDetailDO.setLevel(1);
List<InMaterialDetailPO> inMaterialDetailPOList = materialDetailService.queryList(inMaterialDetailDO);
// 先通过入库单号查询收货单列表
StockReceiptOrderDO stockReceiptOrderDO = new StockReceiptOrderDO();
stockReceiptOrderDO.setInOrderNumber(stockInOrderPO.getInOrderNumber());
List<StockReceiptOrderPO> stockReceiptOrderPOList = stockReceiptOrderDomainService.queryList(stockReceiptOrderDO);
// 先通过入库单号查询上架单列表
StockShelfOrderDO stockShelfOrderDO = new StockShelfOrderDO();
stockShelfOrderDO.setInOrderNumber(stockInOrderPO.getInOrderNumber());
List<StockShelfOrderPO> stockShelfOrderPOList = stockShelfOrderDomainService.queryList(stockShelfOrderDO);
// 查询收货单明细,用于填充收货数量和更新毛重、净重、面积、体积
List<ReceiptMaterialDetailPO> receiptMaterialDetailPOList = new ArrayList<>();
if (!CollectionUtils.isEmpty(stockReceiptOrderPOList)) {
List<String> receiptOrderNumberList = stockReceiptOrderPOList.stream()
.map(StockReceiptOrderPO::getReceiptOrderNumber)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
if (!CollectionUtils.isEmpty(receiptOrderNumberList)) {
ReceiptMaterialDetailDO receiptMaterialDetailDO = new ReceiptMaterialDetailDO();
receiptMaterialDetailDO.setReceiptOrderNumberList(receiptOrderNumberList);
receiptMaterialDetailPOList = receiptMaterialDetailService.queryList(receiptMaterialDetailDO);
}
}
// 查询上架单明细,用于填充上架数量
List<ShelfMaterialDetailPO> shelfMaterialDetailPOList = new ArrayList<>();
if (!CollectionUtils.isEmpty(stockShelfOrderPOList)) {
for (StockShelfOrderPO stockShelfOrderPO : stockShelfOrderPOList) {
if (StringUtils.isNotBlank(stockShelfOrderPO.getShelfOrderNumber())) {
ShelfMaterialDetailDO shelfMaterialDetailDO = new ShelfMaterialDetailDO();
shelfMaterialDetailDO.setShelfOrderNumber(stockShelfOrderPO.getShelfOrderNumber());
List<ShelfMaterialDetailPO> shelfDetails = shelfMaterialDetailService.queryList(shelfMaterialDetailDO);
if (!CollectionUtils.isEmpty(shelfDetails)) {
shelfMaterialDetailPOList.addAll(shelfDetails);
}
}
}
}
// 按 materialDetailId 分组汇总收货数量和上架数量,以及更新毛重、净重、面积、体积
if (!CollectionUtils.isEmpty(inMaterialDetailPOList)) {
// 按 materialDetailId 分组汇总收货数量(实际收货数量)、毛重、净重、面积、体积
// 收货数量:入库单对应的收货单实际收货数量汇总
Map<Long, ReceiptMaterialDetailPO> receiptDetailMap = new HashMap<>();
if (!CollectionUtils.isEmpty(receiptMaterialDetailPOList)) {
// 递归处理所有层级的收货单明细(包括子明细)
for (ReceiptMaterialDetailPO receiptDetail : receiptMaterialDetailPOList) {
processReceiptDetail(receiptDetail, receiptDetailMap);
}
}
// 按 materialDetailId 分组汇总上架数量(实际上架数量)
// 上架数量:入库单对应的上架单实际上架数量汇总
Map<Long, BigDecimal> shelfQuantityMap = new HashMap<>();
if (!CollectionUtils.isEmpty(shelfMaterialDetailPOList)) {
for (ShelfMaterialDetailPO shelfDetail : shelfMaterialDetailPOList) {
if (shelfDetail.getMaterialDetailId() != null && shelfDetail.getShelvesQuantity() != null) {
Long materialDetailId = shelfDetail.getMaterialDetailId();
BigDecimal shelvesQuantity = shelfQuantityMap.getOrDefault(materialDetailId, BigDecimal.ZERO);
shelfQuantityMap.put(materialDetailId, shelvesQuantity.add(shelfDetail.getShelvesQuantity()));
}
}
}
// 填充入库单明细的收货数量、上架数量,以及更新毛重、净重、面积、体积
for (InMaterialDetailPO inMaterialDetail : inMaterialDetailPOList) {
Long materialDetailId = inMaterialDetail.getMaterialDetailId();
if (materialDetailId != null) {
// 填充收货数量(入库单对应的收货单实际收货数量)
ReceiptMaterialDetailPO receiptDetail = receiptDetailMap.get(materialDetailId);
if (receiptDetail != null) {
// 更新收货数量
if (receiptDetail.getReceiptQuantity() != null) {
inMaterialDetail.setReceiptQuantity(receiptDetail.getReceiptQuantity());
}
// 更新毛重、净重、面积、体积(根据收货时所填的明细行数据更新到入库单明细中)
// 将收货单明细中填写的数据汇总后更新到入库单明细
if (receiptDetail.getTotalGrossWeight() != null) {
inMaterialDetail.setTotalGrossWeight(receiptDetail.getTotalGrossWeight());
}
if (receiptDetail.getTotalNetWeight() != null) {
inMaterialDetail.setTotalNetWeight(receiptDetail.getTotalNetWeight());
}
if (receiptDetail.getTotalArea() != null) {
inMaterialDetail.setTotalArea(receiptDetail.getTotalArea());
}
if (receiptDetail.getTotalVolume() != null) {
inMaterialDetail.setTotalVolume(receiptDetail.getTotalVolume());
}
}
// 填充上架数量(入库单对应的上架单实际上架数量)
BigDecimal shelvesQuantity = shelfQuantityMap.get(materialDetailId);
if (shelvesQuantity != null) {
inMaterialDetail.setShelvesQuantity(shelvesQuantity);
}
}
}
}
stockInOrderPO.setMaterialDetailList(inMaterialDetailPOList);
return stockInOrderPO;
}
/**
* 递归处理收货单明细,汇总毛重、净重、面积、体积
* @param receiptDetail 收货单明细
* @param receiptDetailMap 收货单明细汇总Map
*/
private void processReceiptDetail(ReceiptMaterialDetailPO receiptDetail, Map<Long, ReceiptMaterialDetailPO> receiptDetailMap) {
if (receiptDetail == null || receiptDetail.getMaterialDetailId() == null) {
return;
}
Long materialDetailId = receiptDetail.getMaterialDetailId();
ReceiptMaterialDetailPO existing = receiptDetailMap.get(materialDetailId);
if (existing == null) {
// 如果不存在,直接放入Map
receiptDetailMap.put(materialDetailId, receiptDetail);
} else {
// 如果已存在,汇总收货数量、毛重、净重、面积、体积
// 汇总收货数量(实际收货数量)
BigDecimal receiptQuantity = existing.getReceiptQuantity() != null ? existing.getReceiptQuantity() : BigDecimal.ZERO;
BigDecimal newReceiptQuantity = receiptDetail.getReceiptQuantity() != null ? receiptDetail.getReceiptQuantity() : BigDecimal.ZERO;
existing.setReceiptQuantity(receiptQuantity.add(newReceiptQuantity));
// 汇总毛重、净重、面积、体积(根据收货时填写的数据)
// 累加所有收货单明细的毛重、净重、面积、体积
BigDecimal existingGrossWeight = existing.getTotalGrossWeight() != null ? existing.getTotalGrossWeight() : BigDecimal.ZERO;
BigDecimal newGrossWeight = receiptDetail.getTotalGrossWeight() != null ? receiptDetail.getTotalGrossWeight() : BigDecimal.ZERO;
existing.setTotalGrossWeight(existingGrossWeight.add(newGrossWeight));
BigDecimal existingNetWeight = existing.getTotalNetWeight() != null ? existing.getTotalNetWeight() : BigDecimal.ZERO;
BigDecimal newNetWeight = receiptDetail.getTotalNetWeight() != null ? receiptDetail.getTotalNetWeight() : BigDecimal.ZERO;
existing.setTotalNetWeight(existingNetWeight.add(newNetWeight));
BigDecimal existingArea = existing.getTotalArea() != null ? existing.getTotalArea() : BigDecimal.ZERO;
BigDecimal newArea = receiptDetail.getTotalArea() != null ? receiptDetail.getTotalArea() : BigDecimal.ZERO;
existing.setTotalArea(existingArea.add(newArea));
BigDecimal existingVolume = existing.getTotalVolume() != null ? existing.getTotalVolume() : BigDecimal.ZERO;
BigDecimal newVolume = receiptDetail.getTotalVolume() != null ? receiptDetail.getTotalVolume() : BigDecimal.ZERO;
existing.setTotalVolume(existingVolume.add(newVolume));
}
// 递归处理子明细
if (!CollectionUtils.isEmpty(receiptDetail.getChildren())) {
for (ReceiptMaterialDetailPO child : receiptDetail.getChildren()) {
processReceiptDetail(child, receiptDetailMap);
}
}
}
/**
* @description 审核入库单
@@ -24,6 +24,7 @@ import com.mhd.wms.domain.containerUsageRecord.repository.facade.IContainerUsage
import com.mhd.wms.domain.containerUsageRecord.repository.todo.ContainerUsageRecordDO;
import com.mhd.wms.domain.deliveTask.repository.facade.IDeliveTaskService;
import com.mhd.wms.domain.deliveTask.repository.todo.DeliveTaskDO;
import com.mhd.wms.domain.inMaterialDetail.entity.InMaterialDetail;
import com.mhd.wms.domain.inMaterialDetail.repository.facade.IInMaterialDetailService;
import com.mhd.wms.domain.inMaterialDetail.repository.po.InMaterialDetailPO;
import com.mhd.wms.domain.inMaterialDetailSerialNumber.repository.facade.IInMaterialDetailSerialNumberService;
@@ -388,6 +389,8 @@ public class StockReceiptOrderDomainService {
genInventoryStandingReport(stockReceiptOrderPO, stockReceiptOrderDO);
//修改物料明细信息
receiptMaterialDetailService.batchReceiptUpdate(stockReceiptOrderDO);
//同步更新入库单明细的收货数量、总毛重、总净重、总面积、总体积
syncUpdateInMaterialDetailFromReceipt(stockReceiptOrderDO, stockReceiptOrderPO);
//生成 收货作业单
genStockReceiptTaskOrderByReceivingGoods(stockReceiptOrderPO,stockReceiptOrderDO);
//收货后上架前 生成质检
@@ -400,6 +403,197 @@ public class StockReceiptOrderDomainService {
}
/**
* 同步更新入库单明细的收货数量、总毛重、总净重、总面积、总体积
* 根据收货单明细中填写的数据,按materialDetailId分组汇总后更新到入库单明细
* @param stockReceiptOrderDO 收货单DO
* @param stockReceiptOrderPO 收货单PO(可选,如果为null则从DO中获取)
*/
private void syncUpdateInMaterialDetailFromReceipt(StockReceiptOrderDO stockReceiptOrderDO, StockReceiptOrderPO stockReceiptOrderPO) {
if (stockReceiptOrderDO == null || StringUtils.isBlank(stockReceiptOrderDO.getReceiptOrderNumber())) {
return;
}
// 获取入库单号
String inOrderNumber = stockReceiptOrderDO.getInOrderNumber();
if (StringUtils.isBlank(inOrderNumber) && stockReceiptOrderPO != null) {
inOrderNumber = stockReceiptOrderPO.getInOrderNumber();
}
if (StringUtils.isBlank(inOrderNumber) && stockReceiptOrderDO.getReceiptOrderId() != null) {
// 如果收货单DO中没有入库单号,从收货单PO中获取
StockReceiptOrderPO receiptOrderPO = stockReceiptOrderService.getInfo(stockReceiptOrderDO.getReceiptOrderId());
if (receiptOrderPO != null) {
inOrderNumber = receiptOrderPO.getInOrderNumber();
}
}
if (StringUtils.isBlank(inOrderNumber)) {
log.warn("收货单【{}】没有关联的入库单号,无法同步更新入库单明细", stockReceiptOrderDO.getReceiptOrderNumber());
return;
}
log.info("开始同步更新入库单【{}】的明细,收货单号:{}", inOrderNumber, stockReceiptOrderDO.getReceiptOrderNumber());
// 查询该入库单对应的所有收货单
StockReceiptOrderDO queryReceiptOrderDO = new StockReceiptOrderDO();
queryReceiptOrderDO.setInOrderNumber(inOrderNumber);
List<StockReceiptOrderPO> receiptOrderPOList = stockReceiptOrderService.queryList(queryReceiptOrderDO);
if (CollectionUtils.isEmpty(receiptOrderPOList)) {
return;
}
// 获取所有收货单号
List<String> receiptOrderNumberList = receiptOrderPOList.stream()
.map(StockReceiptOrderPO::getReceiptOrderNumber)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(receiptOrderNumberList)) {
return;
}
// 从数据库查询该入库单对应的所有收货单明细(包括已更新的数据)
ReceiptMaterialDetailDO receiptMaterialDetailDO = new ReceiptMaterialDetailDO();
receiptMaterialDetailDO.setReceiptOrderNumberList(receiptOrderNumberList);
List<ReceiptMaterialDetailPO> receiptMaterialDetailPOList = receiptMaterialDetailService.queryList(receiptMaterialDetailDO);
if (CollectionUtils.isEmpty(receiptMaterialDetailPOList)) {
return;
}
// 按unique_id(入库单明细的唯一标识)分组汇总收货数量、总毛重、总净重、总面积、总体积
// 注意:收货单明细的material_detail_id和入库单明细的material_detail_id是不同的
// 需要通过in_unique_id(收货单明细)关联到unique_id(入库单明细)
Map<Long, Map<String, BigDecimal>> uniqueIdSummaryMap = new HashMap<>();
// 递归处理所有层级的收货单明细
for (ReceiptMaterialDetailPO receiptDetail : receiptMaterialDetailPOList) {
processReceiptDetailPOForSync(receiptDetail, uniqueIdSummaryMap);
}
// 批量更新入库单明细
if (!uniqueIdSummaryMap.isEmpty()) {
LoginUser loginUser = SecurityUtils.getLoginUser();
Date updateTime = new Date();
log.info("开始同步更新入库单【{}】的明细,共{}个明细需要更新", inOrderNumber, uniqueIdSummaryMap.size());
for (Map.Entry<Long, Map<String, BigDecimal>> entry : uniqueIdSummaryMap.entrySet()) {
Long uniqueId = entry.getKey(); // 这是入库单明细的unique_id
Map<String, BigDecimal> summary = entry.getValue();
UpdateWrapper<InMaterialDetail> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("unique_id", uniqueId);
updateWrapper.eq("in_order_number", inOrderNumber);
updateWrapper.eq("del_flag", 1);
boolean hasUpdate = false;
// 更新收货数量
if (summary.containsKey("receiptQuantity") && summary.get("receiptQuantity") != null) {
updateWrapper.set("receipt_quantity", summary.get("receiptQuantity"));
hasUpdate = true;
}
// 更新总毛重
if (summary.containsKey("totalGrossWeight") && summary.get("totalGrossWeight") != null) {
updateWrapper.set("total_gross_weight", summary.get("totalGrossWeight"));
hasUpdate = true;
}
// 更新总净重
if (summary.containsKey("totalNetWeight") && summary.get("totalNetWeight") != null) {
updateWrapper.set("total_net_weight", summary.get("totalNetWeight"));
hasUpdate = true;
}
// 更新总面积
if (summary.containsKey("totalArea") && summary.get("totalArea") != null) {
updateWrapper.set("total_area", summary.get("totalArea"));
hasUpdate = true;
}
// 更新总体积
if (summary.containsKey("totalVolume") && summary.get("totalVolume") != null) {
updateWrapper.set("total_volume", summary.get("totalVolume"));
hasUpdate = true;
}
if (hasUpdate) {
updateWrapper.set("update_by", loginUser.getUserid());
updateWrapper.set("update_by_name", loginUser.getUsername());
updateWrapper.set("update_time", updateTime);
boolean updateResult = iInMaterialDetailService.update(updateWrapper);
if (updateResult) {
log.info("成功更新入库单明细,uniqueId: {}, 收货数量: {}, 总毛重: {}, 总净重: {}, 总面积: {}, 总体积: {}",
uniqueId,
summary.get("receiptQuantity"),
summary.get("totalGrossWeight"),
summary.get("totalNetWeight"),
summary.get("totalArea"),
summary.get("totalVolume"));
} else {
log.warn("更新入库单明细失败,uniqueId: {}, inOrderNumber: {}", uniqueId, inOrderNumber);
}
} else {
log.debug("入库单明细无需更新,uniqueId: {}", uniqueId);
}
}
log.info("完成同步更新入库单【{}】的明细", inOrderNumber);
} else {
log.warn("入库单【{}】没有需要更新的明细数据", inOrderNumber);
}
}
/**
* 递归处理收货单明细,汇总收货数量、总毛重、总净重、总面积、总体积
* @param receiptDetail 收货单明细PO
* @param uniqueIdSummaryMap 汇总Mapkey为入库单明细的unique_id(即收货单明细的in_unique_id),value为字段汇总Map
*/
private void processReceiptDetailPOForSync(ReceiptMaterialDetailPO receiptDetail,
Map<Long, Map<String, BigDecimal>> uniqueIdSummaryMap) {
if (receiptDetail == null || receiptDetail.getInUniqueId() == null) {
return;
}
// 使用in_unique_id作为key,因为这是关联到入库单明细的unique_id
Long uniqueId = receiptDetail.getInUniqueId();
Map<String, BigDecimal> summary = uniqueIdSummaryMap.computeIfAbsent(uniqueId, k -> new HashMap<>());
// 汇总收货数量
BigDecimal receiptQuantity = summary.getOrDefault("receiptQuantity", BigDecimal.ZERO);
BigDecimal newReceiptQuantity = receiptDetail.getReceiptQuantity() != null ? receiptDetail.getReceiptQuantity() : BigDecimal.ZERO;
summary.put("receiptQuantity", receiptQuantity.add(newReceiptQuantity));
// 汇总总毛重
BigDecimal totalGrossWeight = summary.getOrDefault("totalGrossWeight", BigDecimal.ZERO);
BigDecimal newGrossWeight = receiptDetail.getTotalGrossWeight() != null ? receiptDetail.getTotalGrossWeight() : BigDecimal.ZERO;
summary.put("totalGrossWeight", totalGrossWeight.add(newGrossWeight));
// 汇总总净重
BigDecimal totalNetWeight = summary.getOrDefault("totalNetWeight", BigDecimal.ZERO);
BigDecimal newNetWeight = receiptDetail.getTotalNetWeight() != null ? receiptDetail.getTotalNetWeight() : BigDecimal.ZERO;
summary.put("totalNetWeight", totalNetWeight.add(newNetWeight));
// 汇总总面积
BigDecimal totalArea = summary.getOrDefault("totalArea", BigDecimal.ZERO);
BigDecimal newArea = receiptDetail.getTotalArea() != null ? receiptDetail.getTotalArea() : BigDecimal.ZERO;
summary.put("totalArea", totalArea.add(newArea));
// 汇总总体积
BigDecimal totalVolume = summary.getOrDefault("totalVolume", BigDecimal.ZERO);
BigDecimal newVolume = receiptDetail.getTotalVolume() != null ? receiptDetail.getTotalVolume() : BigDecimal.ZERO;
summary.put("totalVolume", totalVolume.add(newVolume));
// 递归处理子明细
if (!CollectionUtils.isEmpty(receiptDetail.getChildren())) {
for (ReceiptMaterialDetailPO child : receiptDetail.getChildren()) {
processReceiptDetailPOForSync(child, uniqueIdSummaryMap);
}
}
}
/**
* @param stockReceiptOrderDO
* @return StockReceiptOrder