diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManage/ContractManageApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManage/ContractManageApplicationService.java index b084ef4b0..1d49d32d8 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManage/ContractManageApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManage/ContractManageApplicationService.java @@ -437,14 +437,14 @@ public class ContractManageApplicationService { List contractManageDetailPOList = contractManageDetailDomainService.queryListByManageId(resultContract.getContractManageId()); List contractManageDetailSaveList = new ArrayList<>(); if(contractManageDetailPOList != null && contractManageDetailPOList.size()>0){ - //将临时合同中没有,但是通用合同中有的数据过滤出 - contractManageDetailSaveList = contractManageDetailPOList.stream().filter(item -> contractManageDetailPOList.stream().noneMatch(item1 -> item1.getFirstSubjectCode().equals(item.getFirstSubjectCode()) && item1.getSecondSubjectCode().equals(item.getSecondSubjectCode()) && item1.getSubjectType()==1)).collect(Collectors.toList()); + //将临时合同中没有,但是通用合同中有的数据过滤出(使用 ObjectUtil.equal 避免 firstSubjectCode/secondSubjectCode 为 null 时 NPE) + contractManageDetailSaveList = contractManageDetailPOList.stream().filter(item -> contractManageDetailPOList.stream().noneMatch(item1 -> ObjectUtil.equal(item1.getFirstSubjectCode(), item.getFirstSubjectCode()) && ObjectUtil.equal(item1.getSecondSubjectCode(), item.getSecondSubjectCode()) && item1.getSubjectType()==1)).collect(Collectors.toList()); //首先根据结算科目类型将临时合同过滤出 List tempContractManageDetailPOList = contractManageDetailPOList.stream().filter(item -> item.getSubjectType()==2).collect(Collectors.toList()); //遍历两个集合,将相同费用科目code的数据,进行比较,如果结算科目类型是临时且合同有效期有效,则使用该条数据,将另一条移除 for (ContractManageDetailPO manageDetailPO : tempContractManageDetailPOList) { for (ContractManageDetailPO contractManageDetailPO : contractManageDetailPOList) { - if(contractManageDetailPO.getFirstSubjectCode().equals(manageDetailPO.getFirstSubjectCode()) && contractManageDetailPO.getSecondSubjectCode().equals(manageDetailPO.getSecondSubjectCode())){ + if(ObjectUtil.equal(contractManageDetailPO.getFirstSubjectCode(), manageDetailPO.getFirstSubjectCode()) && ObjectUtil.equal(contractManageDetailPO.getSecondSubjectCode(), manageDetailPO.getSecondSubjectCode())){ //判断如果是临时合同在有效期内,则将该条数据保存到集合contractManageDetailSaveList DateTime start = DateUtil.parseDate(DateUtil.format(manageDetailPO.getSubjectEffectiveDate(),"yyyy-MM-dd")); DateTime end = DateUtil.parseDateTime(DateUtil.format(manageDetailPO.getSubjectEffectiveDate(),"yyyy-MM-dd")); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/service/ContractManageDomainService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/service/ContractManageDomainService.java index 8f3060afa..cd98766cb 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/service/ContractManageDomainService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/service/ContractManageDomainService.java @@ -119,14 +119,14 @@ public class ContractManageDomainService { List contractManageDetailPOList = contractManageDetailDomainService.queryListByManageId(contractManagePO.getContractManageId()); List contractManageDetailSaveList = new ArrayList<>(); if(contractManageDetailPOList != null && contractManageDetailPOList.size()>0){ - //将临时合同中没有,但是通用合同中有的数据过滤出 - contractManageDetailSaveList = contractManageDetailPOList.stream().filter(item -> contractManageDetailPOList.stream().anyMatch(item1 -> item1.getFirstSubjectCode().equals(item.getFirstSubjectCode()) && item1.getSecondSubjectCode().equals(item.getSecondSubjectCode()) && item1.getSubjectType()==1)).collect(Collectors.toList()); + //将临时合同中没有,但是通用合同中有的数据过滤出(使用 ObjectUtil.equal 避免 firstSubjectCode/secondSubjectCode 为 null 时 NPE) + contractManageDetailSaveList = contractManageDetailPOList.stream().filter(item -> contractManageDetailPOList.stream().anyMatch(item1 -> ObjectUtil.equal(item1.getFirstSubjectCode(), item.getFirstSubjectCode()) && ObjectUtil.equal(item1.getSecondSubjectCode(), item.getSecondSubjectCode()) && item1.getSubjectType()==1)).collect(Collectors.toList()); //首先根据结算科目类型将临时合同过滤出 List tempContractManageDetailPOList = contractManageDetailPOList.stream().filter(item -> item.getSubjectType()==2).collect(Collectors.toList()); //遍历两个集合,将相同费用科目code的数据,进行比较,如果结算科目类型是临时且合同有效期有效,则使用该条数据,将另一条移除 for (ContractManageDetailPO manageDetailPO : tempContractManageDetailPOList) { for (ContractManageDetailPO contractManageDetailPO : contractManageDetailPOList) { - if(contractManageDetailPO.getFirstSubjectCode().equals(manageDetailPO.getFirstSubjectCode()) && contractManageDetailPO.getSecondSubjectCode().equals(manageDetailPO.getSecondSubjectCode())){ + if(ObjectUtil.equal(contractManageDetailPO.getFirstSubjectCode(), manageDetailPO.getFirstSubjectCode()) && ObjectUtil.equal(contractManageDetailPO.getSecondSubjectCode(), manageDetailPO.getSecondSubjectCode())){ //判断如果是临时合同在有效期内,则将该条数据保存到集合contractManageDetailSaveList DateTime start = DateUtil.parseDate(DateUtil.format(manageDetailPO.getSubjectEffectiveDate(),"yyyy-MM-dd")); DateTime end = DateUtil.parseDateTime(DateUtil.format(manageDetailPO.getSubjectEffectiveDate(),"yyyy-MM-dd")); diff --git a/mhd_bms/src/main/java/com/mhd/bms/application/server/billingRules/CostCalculationApplicationService.java b/mhd_bms/src/main/java/com/mhd/bms/application/server/billingRules/CostCalculationApplicationService.java index fb1bee82f..c3b488789 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/application/server/billingRules/CostCalculationApplicationService.java +++ b/mhd_bms/src/main/java/com/mhd/bms/application/server/billingRules/CostCalculationApplicationService.java @@ -144,8 +144,11 @@ public class CostCalculationApplicationService { throw new ServiceException("单据类型未找到"); } //遍历费用科目取出对应配置的费用科目项 - AjaxResult expenseAccountAjax = systemServiceFeign.getSubInfoByCode2(costCalculationDTO.getSubjectCode(),costCalculationDTO.getTopOrganizationId()); - if(!"200".equals(String.valueOf(ajaxResult.get("code")))) { + if (costCalculationDTO.getTopOrganizationId() == null) { + throw new ServiceException("组织信息不能为空,无法查询费用科目"); + } + AjaxResult expenseAccountAjax = systemServiceFeign.getSubInfoByCode2(costCalculationDTO.getSubjectCode(), costCalculationDTO.getTopOrganizationId()); + if (!"200".equals(String.valueOf(expenseAccountAjax.get("code")))) { throw new ServiceException("费用科目不存在或已被删除"); } ExpenseAccountPO expenseAccountPO = JSON.parseObject(JSONObject.toJSONString(expenseAccountAjax.get("data")), ExpenseAccountPO.class); @@ -166,7 +169,7 @@ public class CostCalculationApplicationService { taskFlowRecordsDO.setSecondSubjectName(expenseAccountPO.getSubjectName()); } if(null == contractManageDetailPO){ - throw new ServiceException("合同中不包含该费用科目的计费策略,请查正后重试"); + throw new ServiceException("合同中不包含该费用科目的计费策略,请查证后重试"); } //根据计费策略查询计费规则信息 BillingRulesPO billingRulesPO = billingRulesDomainService.getInfo(contractManageDetailPO.getAccountingStrategyId()); diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BusinessDocumentApi.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BusinessDocumentApi.java index 5d59d8919..c34b2aa0f 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BusinessDocumentApi.java +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BusinessDocumentApi.java @@ -24,6 +24,7 @@ import javax.annotation.Resource; import com.mhd.common.core.web.controller.BaseController; import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.common.core.web.page.TableDataInfo; +import com.mhd.common.core.exception.ServiceException; /** * 业务单据Api @@ -70,8 +71,10 @@ public class BusinessDocumentApi extends BaseController{ }else { return toAjax(businessDocumentApplicationService.insert(businessDocumentDO)); } - }catch (Exception e){ - return AjaxResult.error("保存业务单据失败" +e.getMessage()); + } catch (ServiceException e) { + return AjaxResult.error(e.getMessage()); + } catch (Exception e){ + return AjaxResult.error("保存业务单据失败:" + e.getMessage()); } } diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java index 4736360c5..e58a5a29b 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java @@ -252,28 +252,18 @@ public class StockReceiptOrderApplicationService { // 5. 清空质检相关字段(如果是否质检为否) clearQualityInspectionFieldsRecursively(receiptMaterialDetailPOList); - // 6. 汇总第一层明细的净重、毛重、体积、面积 + // 6. 汇总明细的净重、毛重、体积、面积(递归包含主项+子项) BigDecimal totalNetWeight = BigDecimal.ZERO; BigDecimal totalGrossWeight = BigDecimal.ZERO; BigDecimal totalVolume = BigDecimal.ZERO; BigDecimal totalArea = BigDecimal.ZERO; if (!CollectionUtils.isEmpty(receiptMaterialDetailPOList)) { - // receiptMaterialDetailPOList 已经是树形结构,第一层明细的 level 应该是 1 或 null for (ReceiptMaterialDetailPO detail : receiptMaterialDetailPOList) { - // 只汇总第一层明细(level=1或没有level字段) if (detail.getLevel() == null || detail.getLevel() == 1) { - if (detail.getTotalNetWeight() != null) { - totalNetWeight = totalNetWeight.add(detail.getTotalNetWeight()); - } - if (detail.getTotalGrossWeight() != null) { - totalGrossWeight = totalGrossWeight.add(detail.getTotalGrossWeight()); - } - if (detail.getTotalVolume() != null) { - totalVolume = totalVolume.add(detail.getTotalVolume()); - } - if (detail.getTotalArea() != null) { - totalArea = totalArea.add(detail.getTotalArea()); - } + totalNetWeight = totalNetWeight.add(sumDetailRecursively(detail, ReceiptMaterialDetailPO::getTotalNetWeight)); + totalGrossWeight = totalGrossWeight.add(sumDetailRecursively(detail, ReceiptMaterialDetailPO::getTotalGrossWeight)); + totalVolume = totalVolume.add(sumDetailRecursively(detail, ReceiptMaterialDetailPO::getTotalVolume)); + totalArea = totalArea.add(sumDetailRecursively(detail, ReceiptMaterialDetailPO::getTotalArea)); } } } @@ -360,6 +350,80 @@ public class StockReceiptOrderApplicationService { return materialMoreDetailPOList; } + /** + * 递归汇总明细及其子项的某字段值(用于汇总净重、毛重、体积、面积) + */ + private BigDecimal sumDetailRecursively(ReceiptMaterialDetailPO detail, Function getter) { + BigDecimal sum = BigDecimal.ZERO; + if (detail == null) { + return sum; + } + BigDecimal v = getter.apply(detail); + if (v != null) { + sum = sum.add(v); + } + List children = detail.getChildren(); + if (!CollectionUtils.isEmpty(children)) { + for (ReceiptMaterialDetailPO child : children) { + sum = sum.add(sumDetailRecursively(child, getter)); + } + } + return sum; + } + + /** + * 扁平化明细:将子项收货数据合并到父级并清空 children,使每条明细只显示一行(PDA 与 PC 端收货一致) + * @param receiptMaterialDetailPOList 物料明细列表(树形,level 1 父级含 children) + */ + private void flattenMaterialDetailList(List receiptMaterialDetailPOList) { + if (CollectionUtils.isEmpty(receiptMaterialDetailPOList)) { + return; + } + for (ReceiptMaterialDetailPO parent : receiptMaterialDetailPOList) { + List children = parent.getChildren(); + if (CollectionUtils.isEmpty(children)) { + continue; + } + // 将子项收货数据合并到父级 + BigDecimal receiptQuantitySum = parent.getReceiptQuantity() != null ? parent.getReceiptQuantity() : BigDecimal.ZERO; + BigDecimal totalNetWeightSum = parent.getTotalNetWeight() != null ? parent.getTotalNetWeight() : BigDecimal.ZERO; + BigDecimal totalGrossWeightSum = parent.getTotalGrossWeight() != null ? parent.getTotalGrossWeight() : BigDecimal.ZERO; + BigDecimal totalVolumeSum = parent.getTotalVolume() != null ? parent.getTotalVolume() : BigDecimal.ZERO; + BigDecimal totalAreaSum = parent.getTotalArea() != null ? parent.getTotalArea() : BigDecimal.ZERO; + Integer maxReceiptStatus = parent.getReceiptStatus(); + for (ReceiptMaterialDetailPO child : children) { + if (child.getReceiptQuantity() != null) { + receiptQuantitySum = receiptQuantitySum.add(child.getReceiptQuantity()); + } + if (child.getTotalNetWeight() != null) { + totalNetWeightSum = totalNetWeightSum.add(child.getTotalNetWeight()); + } + if (child.getTotalGrossWeight() != null) { + totalGrossWeightSum = totalGrossWeightSum.add(child.getTotalGrossWeight()); + } + if (child.getTotalVolume() != null) { + totalVolumeSum = totalVolumeSum.add(child.getTotalVolume()); + } + if (child.getTotalArea() != null) { + totalAreaSum = totalAreaSum.add(child.getTotalArea()); + } + if (child.getReceiptStatus() != null && (maxReceiptStatus == null || child.getReceiptStatus() > maxReceiptStatus)) { + maxReceiptStatus = child.getReceiptStatus(); + } + } + parent.setReceiptQuantity(receiptQuantitySum); + parent.setTotalNetWeight(totalNetWeightSum); + parent.setTotalGrossWeight(totalGrossWeightSum); + parent.setTotalVolume(totalVolumeSum); + parent.setTotalArea(totalAreaSum); + if (maxReceiptStatus != null) { + parent.setReceiptStatus(maxReceiptStatus); + } + // 清空子项,使前端只显示父级一行 + parent.setChildren(new ArrayList<>()); + } + } + /** * 递归为物料明细设置更多属性 * @param receiptMaterialDetailPOList 物料明细列表 @@ -810,32 +874,7 @@ public class StockReceiptOrderApplicationService { * @return Boolean */ public Boolean receivingGoodsByApp(StockReceiptOrderDO stockReceiptOrderDO){ - List receiptMaterialDetailDOList = stockReceiptOrderDO.getMaterialDetailList(); - receiptMaterialDetailDOList.forEach(receiptMaterialDetailDO -> { - List receiptMaterialDetailDOChildrenList1 = receiptMaterialDetailDO.getChildren(); - if (receiptMaterialDetailDOChildrenList1 != null && receiptMaterialDetailDOChildrenList1.size() > 0) { - //ReceiptMaterialDetailDO receiptMaterialDetailDOChildren = receiptMaterialDetailDOChildrenList1.stream().filter(p -> 1 == p.getLevel()).collect(Collectors.toList()).get(0); - ReceiptMaterialDetailDO receiptMaterialDetailDOChildren = - receiptMaterialDetailDOChildrenList1.stream() - .filter(p -> 1 == p.getLevel()) - .findFirst() // 返回 Optional - .orElse(null); // 没有符合条件的元素时返回null(也可以自定义默认值) - if (receiptMaterialDetailDOChildren != null) { - receiptMaterialDetailDO.setMaterialDetailId(receiptMaterialDetailDOChildren.getMaterialDetailId()); - receiptMaterialDetailDO.setReceiptQuantity(receiptMaterialDetailDOChildren.getReceiptQuantity()); - receiptMaterialDetailDO.setMaterialStatusCode(receiptMaterialDetailDOChildren.getMaterialStatusCode()); - receiptMaterialDetailDO.setBatchNumber(receiptMaterialDetailDOChildren.getBatchNumber()); - receiptMaterialDetailDO.setContainerId(receiptMaterialDetailDOChildren.getContainerId()); - receiptMaterialDetailDO.setLevel(receiptMaterialDetailDOChildren.getLevel()); - receiptMaterialDetailDO.setMaterialMoreDetailList(receiptMaterialDetailDOChildren.getMaterialMoreDetailList()); - receiptMaterialDetailDO.setMaterialDetailSerialNumberList(receiptMaterialDetailDOChildren.getMaterialDetailSerialNumberList()); - } - //只留二级 - List receiptMaterialDetailDOChildrenList2 = receiptMaterialDetailDOChildrenList1.stream().filter(p -> 2 == p.getLevel()).collect(Collectors.toList()); - receiptMaterialDetailDO.setChildren(receiptMaterialDetailDOChildrenList2); - } - }); - //收货装配参数 + // PDA 收货与 PC 一致,保留主项子项结构 StockReceiptOrderDO assembleStockReceiptOrderDO = assembleParamByReceipt(stockReceiptOrderDO); return stockReceiptOrderDomainService.receivingGoods(assembleStockReceiptOrderDO); } diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/receiptMaterialDetail/repository/persistence/ReceiptMaterialDetailImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/receiptMaterialDetail/repository/persistence/ReceiptMaterialDetailImpl.java index 8c9d92940..faa6a5175 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/receiptMaterialDetail/repository/persistence/ReceiptMaterialDetailImpl.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/receiptMaterialDetail/repository/persistence/ReceiptMaterialDetailImpl.java @@ -245,6 +245,9 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl materialDetailSerialNumberList = new ArrayList<>(); for (ReceiptMaterialDetailDO receiptMaterialDetailDO : receiptMaterialDetailDOList){ List materialMoreDetailList1 = receiptMaterialDetailDO.getMaterialMoreDetailList(); + if (CollectionUtils.isEmpty(materialMoreDetailList1)) { + materialMoreDetailList1 = new ArrayList<>(); + } for (MaterialMoreDetailDO materialMoreDetailDO : materialMoreDetailList1) { String batchLabels = materialMoreDetailDO.getBatchLabels(); String attributeValue = materialMoreDetailDO.getAttributeValue(); @@ -310,6 +313,10 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl buildMaterialMoreDetailFromReceiptFields(ReceiptMaterialDetailDO receiptMaterialDetailDO) { + List result = new ArrayList<>(); + Long materialBaseInfoId = receiptMaterialDetailDO.getMaterialBaseInfoId(); + if (materialBaseInfoId == null) { + return result; + } + try { + AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(materialBaseInfoId); + if (ajaxResult == null || !"200".equals(String.valueOf(ajaxResult.get("code")))) { + return result; + } + List list = JSON.parseArray(JSON.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class); + if (CollectionUtils.isEmpty(list)) { + return result; + } + Map labelToField = new HashMap<>(); + labelToField.put("Batch Ref NO's", "batchRefNo"); + labelToField.put("Batch Ref NO", "batchRefNo"); + labelToField.put("批次参考号", "batchRefNo"); + labelToField.put("Sheet Ref NO's", "sheetRefNo"); + labelToField.put("Sheet Ref NO", "sheetRefNo"); + labelToField.put("单据参考号", "sheetRefNo"); + labelToField.put("箱号/卡板号", "boxPalletNo"); + labelToField.put("批次号", "batchNumber"); + labelToField.put("物料状态", "materialStatusCode"); + + for (BatchDetailFeignPO po : list) { + if (po.getIsDisplay() == null || po.getIsDisplay() != 1) { + continue; + } + String fieldName = po.getFieldName(); + if (StringUtils.isBlank(fieldName) && StringUtils.isNotBlank(po.getBatchLabels())) { + fieldName = labelToField.get(po.getBatchLabels().trim()); + } + if (StringUtils.isBlank(fieldName)) { + continue; + } + String value = getReceiptFieldValue(receiptMaterialDetailDO, fieldName); + if (StringUtils.isBlank(value)) { + continue; + } + MaterialMoreDetailDO dto = new MaterialMoreDetailDO(); + dto.setBatchId(po.getBatchId()); + dto.setBatchDetailId(po.getBatchDetailId()); + dto.setBatchLabels(po.getBatchLabels()); + dto.setAttributeValue(value); + result.add(dto); + } + } catch (Exception e) { + log.warn("从收货明细构建更多属性失败,materialBaseInfoId:{},错误:{}", materialBaseInfoId, e.getMessage()); + } + return result; + } + + private String getReceiptFieldValue(ReceiptMaterialDetailDO dto, String fieldName) { + if (dto == null || StringUtils.isBlank(fieldName)) { + return null; + } + try { + java.lang.reflect.Field field = ReceiptMaterialDetailDO.class.getDeclaredField(fieldName); + field.setAccessible(true); + Object v = field.get(dto); + return v != null ? v.toString().trim() : null; + } catch (Exception e) { + return null; + } + } + /** * @description 生成物料明细 * @author ZhouGY 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 61a4019cc..ba2e6d4df 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 @@ -216,6 +216,14 @@ public class StockReceiptOrderDomainService { .collect(Collectors.groupingBy(MaterialMoreDetailPO::getMaterialDetailUniqueId)); receiptMaterialDetailPOList.forEach(receiptMaterialDetailPO -> { List receiptMaterialDetailPOChildrenNowList = new ArrayList<>(); + //子集(level 2 的真实子项) + List receiptMaterialDetailPOChildrenList = receiptMaterialDetailPO.getChildren(); + if (CollectionUtils.isEmpty(receiptMaterialDetailPOChildrenList)) { + //无 level 2 子项时,不添加父级拷贝,避免 PC 端显示重复 + receiptMaterialDetailPO.setChildren(receiptMaterialDetailPOChildrenNowList); + return; + } + //有 level 2 子项时,添加父级拷贝(level 1)供 PDA 收货使用 ReceiptMaterialDetailPO receiptMaterialDetailPOChildrenNow = new ReceiptMaterialDetailPO(); BeanUtils.copyProperties(receiptMaterialDetailPO, receiptMaterialDetailPOChildrenNow, "children"); List materialDetailSerialNumberList = inMaterialDetailSerialNumberMap.get(receiptMaterialDetailPO.getUniqueId()); @@ -231,8 +239,6 @@ public class StockReceiptOrderDomainService { receiptMaterialDetailPOChildrenNow.setMaterialMoreDetailList(getMaterialMoreDetail(receiptMaterialDetailPO)); } receiptMaterialDetailPOChildrenNowList.add(receiptMaterialDetailPOChildrenNow); - //子集 - List receiptMaterialDetailPOChildrenList = receiptMaterialDetailPO.getChildren(); receiptMaterialDetailPOChildrenList.forEach(receiptMaterialDetailPOChildren -> { List materialDetailSerialNumberChildrenList = inMaterialDetailSerialNumberMap.get(receiptMaterialDetailPOChildren.getUniqueId()); if (!CollectionUtils.isEmpty(materialDetailSerialNumberChildrenList)) {