package cn.iocoder.yudao.module.erp.service.product.mapping;
|
|
import cn.hutool.core.util.StrUtil;
|
import cn.iocoder.yudao.module.erp.dal.dataobject.mapping.ErpMesWarehouseMappingDO;
|
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
|
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpWarehouseDO;
|
import cn.iocoder.yudao.module.erp.dal.mysql.mapping.ErpMesWarehouseMappingMapper;
|
import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductMapper;
|
import cn.iocoder.yudao.module.erp.dal.mysql.stock.ErpWarehouseMapper;
|
import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
|
import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
|
import jakarta.annotation.Resource;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
import org.springframework.validation.annotation.Validated;
|
|
/**
|
* ERP 产品与 MDM 物料映射服务实现类
|
*/
|
@Service
|
@Validated
|
@Slf4j
|
public class ErpMdmMappingServiceImpl implements ErpMdmMappingService {
|
|
@Resource
|
private ErpProductMapper productMapper;
|
|
@Resource
|
private ErpWarehouseMapper warehouseMapper;
|
|
@Resource
|
private ErpMesWarehouseMappingMapper warehouseMappingMapper;
|
|
@Resource
|
private MdmItemApi mdmItemApi;
|
|
@Override
|
public Long getMdmItemId(Long erpProductId) {
|
if (erpProductId == null) {
|
return null;
|
}
|
// 1. 查询 ERP 产品
|
ErpProductDO product = productMapper.selectById(erpProductId);
|
if (product == null || StrUtil.isEmpty(product.getBarCode())) {
|
log.warn("[getMdmItemId] ERP产品不存在或条码为空,erpProductId={}", erpProductId);
|
return null;
|
}
|
|
// 2. 通过条码查询 MDM 物料
|
return getMdmItemIdByBarCode(product.getBarCode());
|
}
|
|
@Override
|
public Long getMdmItemIdByBarCode(String barCode) {
|
if (StrUtil.isEmpty(barCode)) {
|
return null;
|
}
|
|
// 优先通过条码查询
|
MdmItemRespDTO item = mdmItemApi.getItemByBarCode(barCode).getCheckedData();
|
if (item != null) {
|
return item.getId();
|
}
|
|
// 条码匹配编码
|
item = mdmItemApi.getItemByCode(barCode).getCheckedData();
|
if (item != null) {
|
return item.getId();
|
}
|
|
log.warn("[getMdmItemIdByBarCode] 未找到对应的MDM物料,barCode={}", barCode);
|
return null;
|
}
|
|
@Override
|
public Long getMesWarehouseId(Long erpWarehouseId) {
|
if (erpWarehouseId == null) {
|
return null;
|
}
|
|
// 1. 优先查询映射表
|
ErpMesWarehouseMappingDO mapping = warehouseMappingMapper.selectByErpWarehouseId(erpWarehouseId);
|
if (mapping != null) {
|
return mapping.getMesWarehouseId();
|
}
|
|
// 2. 映射表没有记录,尝试通过名称匹配(备用方案)
|
ErpWarehouseDO erpWarehouse = warehouseMapper.selectById(erpWarehouseId);
|
if (erpWarehouse == null) {
|
log.warn("[getMesWarehouseId] ERP仓库不存在,erpWarehouseId={}", erpWarehouseId);
|
return null;
|
}
|
|
log.warn("[getMesWarehouseId] 未找到仓库映射配置,erpWarehouseId={},请配置仓库映射", erpWarehouseId);
|
return null;
|
}
|
|
@Override
|
public Long getMesWarehouseIdByName(String erpWarehouseName) {
|
// 此方法已不再推荐使用,建议配置映射表
|
log.warn("[getMesWarehouseIdByName] 建议配置仓库映射表替代名称匹配,erpWarehouseName={}", erpWarehouseName);
|
return null;
|
}
|
|
}
|