diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java index a88586bbd..370aa48a4 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java @@ -19,9 +19,13 @@ import com.mhd.system.api.domain.StorageLocationFeignPO; import com.mhd.system.api.domain.cache.AssociationWarehouseCacheDO; import com.mhd.system.api.domain.cache.SystemServiceCacheUtil; import com.mhd.system.api.model.LoginUser; +import com.mhd.wms.domain.materialBarCode.repository.facade.IMaterialBarCodeService; +import com.mhd.wms.domain.materialBarCode.repository.po.MaterialBarCodePO; import com.mhd.wms.domain.materialBaseInfo.entity.MaterialBaseInfo; +import com.mhd.wms.domain.materialBaseInfo.repository.facade.IMaterialBaseInfoService; import com.mhd.wms.domain.materialBaseInfo.repository.mapper.MaterialBaseInfoMapper; import com.mhd.wms.domain.materialBaseInfo.repository.po.MaterialBaseInfoPO; +import com.mhd.system.api.domain.PackDetailFeignPO; import com.mhd.wms.domain.materialGoodsRule.repository.facade.IMaterialGoodsRuleService; import com.mhd.wms.domain.materialGoodsRule.repository.po.BatchDetailPO; import com.mhd.wms.domain.materialGoodsRule.repository.po.BatchPO; @@ -80,6 +84,10 @@ public class StockShelfOrderApplicationService { private MaterialInventoryMapper materialInventoryMapper; @Autowired private IMaterialGoodsRuleService materialGoodsRuleService; + @Autowired + private IMaterialBaseInfoService materialBaseInfoService; + @Autowired + private IMaterialBarCodeService materialBarCodeService; @@ -179,6 +187,66 @@ public class StockShelfOrderApplicationService { // 3. 为每个物料明细设置更多属性(从缓存中获取),递归处理所有层级 setMaterialMoreDetailListRecursively(shelfMaterialDetailPOList, batchDetailMap); + // 4. 批量查询物料基础信息和物料条码信息,填充明细行的物料单位、包装和条码 + // 4.1 批量查询物料基础信息 + Map materialBaseInfoMap = new HashMap<>(); + for (Long materialBaseInfoId : materialBaseInfoIdSet) { + try { + MaterialBaseInfoPO materialBaseInfoPO = materialBaseInfoService.getInfo(materialBaseInfoId); + if (materialBaseInfoPO != null) { + materialBaseInfoMap.put(materialBaseInfoId, materialBaseInfoPO); + } + } catch (Exception e) { + log.warn("获取物料基础信息失败,物料基础信息ID:{},错误:{}", materialBaseInfoId, e.getMessage()); + } + } + + // 4.2 批量查询物料条码信息(单位代码为EA的条码) + Map materialBarCodeMap = new HashMap<>(); + for (Long materialBaseInfoId : materialBaseInfoIdSet) { + try { + List materialBarCodePOList = materialBarCodeService.getInfoByMaterialBaseInfoIds(materialBaseInfoId); + if (materialBarCodePOList != null && !materialBarCodePOList.isEmpty()) { + // 查找单位代码为EA的条码 + MaterialBarCodePO eaBarCode = materialBarCodePOList.stream() + .filter(barCode -> "EA".equals(barCode.getUnitCode())) + .findFirst() + .orElse(null); + if (eaBarCode != null) { + materialBarCodeMap.put(materialBaseInfoId, eaBarCode); + } + } + } catch (Exception e) { + log.warn("获取物料条码信息失败,物料基础信息ID:{},错误:{}", materialBaseInfoId, e.getMessage()); + } + } + + // 4.3 批量查询包装规格信息(单位代码为EA的单位名称) + Map packDetailMap = new HashMap<>(); + for (Long materialBaseInfoId : materialBaseInfoIdSet) { + MaterialBaseInfoPO materialBaseInfoPO = materialBaseInfoMap.get(materialBaseInfoId); + if (materialBaseInfoPO != null && materialBaseInfoPO.getPackId() != null) { + try { + AjaxResult packDetailResult = systemServiceFeign.getInfoByPackIdAndUnitCode(materialBaseInfoPO.getPackId(), "EA"); + if (packDetailResult != null && "200".equals(String.valueOf(packDetailResult.get("code"))) + && packDetailResult.get("data") != null) { + PackDetailFeignPO packDetailFeignPO = JSON.parseObject( + JSONObject.toJSONString(packDetailResult.get("data")), + PackDetailFeignPO.class); + if (packDetailFeignPO != null) { + packDetailMap.put(materialBaseInfoId, packDetailFeignPO); + } + } + } catch (Exception e) { + log.warn("获取包装规格EA单位信息失败,物料基础信息ID:{},包装ID:{},错误:{}", + materialBaseInfoId, materialBaseInfoPO.getPackId(), e.getMessage()); + } + } + } + + // 4.4 为每个明细行填充物料单位、包装和条码信息 + fillMaterialDetailInfoRecursively(shelfMaterialDetailPOList, materialBaseInfoMap, materialBarCodeMap, packDetailMap); + stockShelfOrderPO.setMaterialDetailList(shelfMaterialDetailPOList); log.info("返回上架单信息,shelfOrderId={}, materialDetailList大小={}", stockShelfOrderPO.getShelfOrderId(), @@ -645,6 +713,58 @@ public class StockShelfOrderApplicationService { }); } + /** + * 递归填充明细行的物料单位、包装和条码信息 + * @param shelfMaterialDetailPOList 上架单明细列表 + * @param materialBaseInfoMap 物料基础信息Map(key: materialBaseInfoId, value: MaterialBaseInfoPO) + * @param materialBarCodeMap 物料条码Map(key: materialBaseInfoId, value: MaterialBarCodePO,单位代码为EA) + * @param packDetailMap 包装规格明细Map(key: materialBaseInfoId, value: PackDetailFeignPO,单位代码为EA) + */ + private void fillMaterialDetailInfoRecursively(List shelfMaterialDetailPOList, + Map materialBaseInfoMap, + Map materialBarCodeMap, + Map packDetailMap) { + if (CollectionUtils.isEmpty(shelfMaterialDetailPOList)) { + return; + } + + shelfMaterialDetailPOList.forEach(shelfMaterialDetailPO -> { + Long materialBaseInfoId = shelfMaterialDetailPO.getMaterialBaseInfoId(); + + if (materialBaseInfoId != null) { + // 填充包装名称(从物料基础信息中获取) + MaterialBaseInfoPO materialBaseInfoPO = materialBaseInfoMap.get(materialBaseInfoId); + if (materialBaseInfoPO != null) { + // 包装显示物料绑定的包装规格名称 + if (StringUtils.isNotBlank(materialBaseInfoPO.getPackName())) { + shelfMaterialDetailPO.setPackName(materialBaseInfoPO.getPackName()); + } + } + + // 填充物料单位名称(从包装规格明细中获取单位代码为EA的单位名称) + PackDetailFeignPO packDetailFeignPO = packDetailMap.get(materialBaseInfoId); + if (packDetailFeignPO != null && StringUtils.isNotBlank(packDetailFeignPO.getName())) { + // 物料单位EA显示物料绑定的包装规格维护的单位代码为EA的单位名称 + shelfMaterialDetailPO.setUnitName(packDetailFeignPO.getName()); + shelfMaterialDetailPO.setUnitCode("EA"); + } + + // 填充条码(从物料条码信息中获取单位代码为EA的条码) + MaterialBarCodePO materialBarCodePO = materialBarCodeMap.get(materialBaseInfoId); + if (materialBarCodePO != null && StringUtils.isNotBlank(materialBarCodePO.getBarCode())) { + // 条码取物料条码信息中单位代码为EA的条码 + shelfMaterialDetailPO.setBarCode(materialBarCodePO.getBarCode()); + } + } + + // 递归处理子明细 + if (!CollectionUtils.isEmpty(shelfMaterialDetailPO.getChildren())) { + fillMaterialDetailInfoRecursively(shelfMaterialDetailPO.getChildren(), + materialBaseInfoMap, materialBarCodeMap, packDetailMap); + } + }); + } + /** * 根据批次标签(batchLabels)映射到字段名 * @param batchLabel 批次标签