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; } }