From b7c17be566d7ce1367ba31ae951a145ef591c12e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Thu, 28 May 2026 21:21:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E4=BF=AE=E6=94=B9=EF=BC=8CPD?= =?UTF-8?q?A=E6=89=B9=E6=AC=A1=E5=AD=97=E6=AE=B5=E5=9B=9E=E6=98=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MaterialBaseInfoApplicationService.java | 25 +------ .../StockReceiptOrderApplicationService.java | 69 +++++++++++-------- .../ReceiptMaterialDetailImpl.java | 17 +++++ 3 files changed, 60 insertions(+), 51 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java index 53f5a8de6..3cb25b386 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java @@ -515,33 +515,10 @@ public class MaterialBaseInfoApplicationService { materialBaseInfoDO.setMaterialCommon(null); materialBaseInfoDO.setMaterialWarehouseControl(null); materialBaseInfoDO.setMaterialBarCodeList(buildImportBarCodeList(row)); + // 商品规则由 buildImportMaterialGoodsRule + insert() 统一写入,勿再单独 insert,避免 MATERIAL_GOODS_RULE 重复 insert(materialBaseInfoDO); Long materialBaseInfoId = materialBaseInfoDO.getMaterialBaseInfoId(); - //商品规则批次 - if (StringUtils.isNotBlank(row.getBatchRuleNameImport())) { - MaterialGoodsRuleDO materialGoodsRuleDO = new MaterialGoodsRuleDO(); - Object batchListByName = systemServiceFeign.getBatchListByName(row.getBatchRuleNameImport(), row.getOrganizationId()); - Map batchListByNameMap = JSON.parseObject(JSONObject.toJSONString(batchListByName), new TypeReference>() {}); - Object codeObj = batchListByNameMap.get("code"); - Object totalObj = batchListByNameMap.get("total"); - List> rowsBatch = extractTableDataRows(batchListByNameMap); - for (Map p : rowsBatch) { - if (p == null) { - continue; - } - String rowBatchName = normalizeBatchKeyword(p.get("batchName") == null ? "" : String.valueOf(p.get("batchName"))); - if (StringUtils.equals(row.getBatchRuleNameImport(), rowBatchName)) { - Object idObj = p.get("batchId"); - Long.valueOf(String.valueOf(idObj)); - materialGoodsRuleDO.setBatchId(Long.valueOf(String.valueOf(idObj))); - - materialGoodsRuleDO.setMaterialBaseInfoId(materialBaseInfoId); - materialGoodsRuleDomainService.insert(materialGoodsRuleDO); - } - } - } - //公共信息 MaterialCommonDO materialCommonDO = materialBaseInfoDO.getMaterialCommon(); if (materialCommonDO != null) { 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 69cc07774..355dc57d2 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 @@ -213,33 +213,7 @@ public class StockReceiptOrderApplicationService { .filter(Objects::nonNull) .collect(Collectors.toSet()); - // 2. 批量查询批次属性(使用Map缓存,避免重复查询相同的materialBaseInfoId) - Map> batchDetailMap = new HashMap<>(); - for (Long materialBaseInfoId : materialBaseInfoIdSet) { - try { - MaterialGoodsRulePO localGoodsRule = materialGoodsRuleService.getInfoByMaterialBaseInfoIds(materialBaseInfoId); - if (localGoodsRule == null || localGoodsRule.getBatchId() == null) { - continue; - } - AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(materialBaseInfoId); - if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) { - List batchDetailFeignPOList = JSON.parseArray( - JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class); - // 与物料商品规则中的 batchId 对齐,避免多批次模板的 isDisplay=1 行全部合并成几十条 - batchDetailFeignPOList = ReceiptBatchDetailFilter.filterByMaterialGoodsRule( - materialBaseInfoId, batchDetailFeignPOList, materialGoodsRuleService); - if (!CollectionUtils.isEmpty(batchDetailFeignPOList)) { - // 过滤isDisplay=1的属性 - List filteredList = batchDetailFeignPOList.stream() - .filter(batchDetail -> batchDetail.getIsDisplay() != null && batchDetail.getIsDisplay() == 1) - .collect(Collectors.toList()); - batchDetailMap.put(materialBaseInfoId, filteredList); - } - } - } catch (Exception e) { - log.warn("获取物料批次属性失败,物料基础信息ID:{},错误:{}", materialBaseInfoId, e.getMessage()); - } - } + Map> batchDetailMap = buildBatchDetailMapForReceiptInfo(materialBaseInfoIdSet); // 3. 为每个物料明细设置更多属性(从缓存中获取),递归处理所有层级 setMaterialMoreDetailListRecursively(receiptMaterialDetailPOList, batchDetailMap); @@ -1044,6 +1018,10 @@ public class StockReceiptOrderApplicationService { labelToFieldNameMap.put("总体积", "totalVolume"); labelToFieldNameMap.put("总面积", "totalArea"); labelToFieldNameMap.put("总价", "totalPrice"); + labelToFieldNameMap.put("生产日期", "productionDate"); + labelToFieldNameMap.put("过期日期", "expiryDate"); + labelToFieldNameMap.put("存货日期", "inventoryDate"); + labelToFieldNameMap.put("饮用日期", "drinkDate"); // 精确匹配 String fieldName = labelToFieldNameMap.get(batchLabel.trim()); @@ -1216,6 +1194,9 @@ public class StockReceiptOrderApplicationService { } Set materialBaseInfoIdSet = new HashSet<>(); collectMaterialBaseInfoIdsRecursively(materialDetailList, materialBaseInfoIdSet); + // 与 PC getInfo 一致:将明细行 expiryDate/productionDate 等回填到 materialMoreDetailList,避免批次「过期日期」为 null + Map> batchDetailMap = buildBatchDetailMapForReceiptInfo(materialBaseInfoIdSet); + setMaterialMoreDetailListRecursively(materialDetailList, batchDetailMap); Map materialBaseInfoMap = new HashMap<>(); for (Long materialBaseInfoId : materialBaseInfoIdSet) { try { @@ -1483,6 +1464,40 @@ public class StockReceiptOrderApplicationService { return detailStatus != null && (detailStatus == 3 || detailStatus == 4 || detailStatus == 5); } + /** + * 批量加载物料批次属性(isDisplay=1),供 PC/PDA 详情回填 materialMoreDetailList 使用 + */ + private Map> buildBatchDetailMapForReceiptInfo(Set materialBaseInfoIdSet) { + Map> batchDetailMap = new HashMap<>(); + if (CollectionUtils.isEmpty(materialBaseInfoIdSet)) { + return batchDetailMap; + } + for (Long materialBaseInfoId : materialBaseInfoIdSet) { + try { + MaterialGoodsRulePO localGoodsRule = materialGoodsRuleService.getInfoByMaterialBaseInfoIds(materialBaseInfoId); + if (localGoodsRule == null || localGoodsRule.getBatchId() == null) { + continue; + } + AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(materialBaseInfoId); + if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) { + List batchDetailFeignPOList = JSON.parseArray( + JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class); + batchDetailFeignPOList = ReceiptBatchDetailFilter.filterByMaterialGoodsRule( + materialBaseInfoId, batchDetailFeignPOList, materialGoodsRuleService); + if (!CollectionUtils.isEmpty(batchDetailFeignPOList)) { + List filteredList = batchDetailFeignPOList.stream() + .filter(batchDetail -> batchDetail.getIsDisplay() != null && batchDetail.getIsDisplay() == 1) + .collect(Collectors.toList()); + batchDetailMap.put(materialBaseInfoId, filteredList); + } + } + } catch (Exception e) { + log.warn("获取物料批次属性失败,物料基础信息ID:{},错误:{}", materialBaseInfoId, e.getMessage()); + } + } + return batchDetailMap; + } + /** * 递归收集明细树中所有物料基础信息ID */ 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 388447438..2b29eeb42 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 @@ -893,6 +893,18 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl