上架物料明细行EA单位回显

This commit is contained in:
秦鸿展
2026-02-10 11:34:28 +08:00
parent fcb997d4ca
commit c2af92f1a3
@@ -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<Long, MaterialBaseInfoPO> 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<Long, MaterialBarCodePO> materialBarCodeMap = new HashMap<>();
for (Long materialBaseInfoId : materialBaseInfoIdSet) {
try {
List<MaterialBarCodePO> 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<Long, PackDetailFeignPO> 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 物料基础信息Mapkey: materialBaseInfoId, value: MaterialBaseInfoPO
* @param materialBarCodeMap 物料条码Mapkey: materialBaseInfoId, value: MaterialBarCodePO,单位代码为EA
* @param packDetailMap 包装规格明细Mapkey: materialBaseInfoId, value: PackDetailFeignPO,单位代码为EA
*/
private void fillMaterialDetailInfoRecursively(List<ShelfMaterialDetailPO> shelfMaterialDetailPOList,
Map<Long, MaterialBaseInfoPO> materialBaseInfoMap,
Map<Long, MaterialBarCodePO> materialBarCodeMap,
Map<Long, PackDetailFeignPO> 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 批次标签