上架物料明细行EA单位回显
This commit is contained in:
+120
@@ -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 物料基础信息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<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 批次标签
|
||||
|
||||
Reference in New Issue
Block a user