| | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.batchconfig.MesMdItemBatchConfigSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemBatchConfigDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.md.item.MesMdItemBatchConfigMapper; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemBatchConfigApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemBatchConfigRespDTO; |
| | | import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemBatchConfigDO; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | |
| | | |
| | | /** |
| | | * MES 物料批次属性配置 Service 实现类 |
| | | * |
| | | * 批次配置统一存储在 MDM 表(mdm_item_batch_config) |
| | | * MES 本地表(mes_md_item_batch_config)仅用于兼容历史数据和 MES 模块内部查询 |
| | | * |
| | | * @author 芋道源码 |
| | | */ |
| | |
| | | private MesMdItemBatchConfigMapper itemBatchConfigMapper; |
| | | |
| | | @Resource |
| | | @Lazy // 避免循环依赖(MesMdItemServiceImpl 也会注入本 Service) |
| | | @Lazy |
| | | private MesMdItemService itemService; |
| | | |
| | | @Resource |
| | | @Lazy |
| | | private MdmItemApi mdmItemApi; |
| | | |
| | | @Resource |
| | | private MdmItemBatchConfigApi mdmItemBatchConfigApi; |
| | | |
| | | @Override |
| | | public MesMdItemBatchConfigDO getItemBatchConfigByItemId(Long itemId) { |
| | | return itemBatchConfigMapper.selectByItemId(itemId); |
| | | // 优先从 MES 本地表查询(性能更好) |
| | | MesMdItemBatchConfigDO mesConfig = itemBatchConfigMapper.selectByItemId(itemId); |
| | | if (mesConfig != null) { |
| | | return mesConfig; |
| | | } |
| | | // 本地表不存在,尝试从 MDM 获取(不写入本地,避免副作用) |
| | | MdmItemBatchConfigRespDTO mdmConfig = mdmItemBatchConfigApi.getItemBatchConfig(itemId); |
| | | if (mdmConfig != null) { |
| | | return BeanUtils.toBean(mdmConfig, MesMdItemBatchConfigDO.class); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long saveItemBatchConfig(MesMdItemBatchConfigSaveReqVO saveReqVO) { |
| | | // 1. 校验物料存在 |
| | | if (itemService.getItem(saveReqVO.getItemId()) == null) { |
| | | // 1. 校验物料存在(从 MDM 校验) |
| | | if (mdmItemApi.getItem(saveReqVO.getItemId()).getCheckedData() == null) { |
| | | throw exception(MD_ITEM_NOT_EXISTS); |
| | | } |
| | | |
| | | // 2. 查询已有配置,决定新增还是更新 |
| | | MesMdItemBatchConfigDO existing = itemBatchConfigMapper.selectByItemId(saveReqVO.getItemId()); |
| | | if (existing != null) { |
| | | // 更新 |
| | | MesMdItemBatchConfigDO updateObj = BeanUtils.toBean(saveReqVO, MesMdItemBatchConfigDO.class); |
| | | updateObj.setId(existing.getId()); |
| | | itemBatchConfigMapper.updateById(updateObj); |
| | | return existing.getId(); |
| | | } |
| | | // 2. 清空不需要的字段(只保留必要的7个字段) |
| | | MesMdItemBatchConfigSaveReqVO cleanReqVO = new MesMdItemBatchConfigSaveReqVO(); |
| | | cleanReqVO.setId(saveReqVO.getId()); |
| | | cleanReqVO.setItemId(saveReqVO.getItemId()); |
| | | cleanReqVO.setProduceDateFlag(saveReqVO.getProduceDateFlag()); |
| | | cleanReqVO.setExpireDateFlag(saveReqVO.getExpireDateFlag()); |
| | | cleanReqVO.setReceiptDateFlag(saveReqVO.getReceiptDateFlag()); |
| | | cleanReqVO.setVendorFlag(saveReqVO.getVendorFlag()); |
| | | cleanReqVO.setPurchaseOrderCodeFlag(saveReqVO.getPurchaseOrderCodeFlag()); |
| | | cleanReqVO.setLotNumberFlag(saveReqVO.getLotNumberFlag()); |
| | | cleanReqVO.setQualityStatusFlag(saveReqVO.getQualityStatusFlag()); |
| | | |
| | | // 新增 |
| | | MesMdItemBatchConfigDO insertObj = BeanUtils.toBean(saveReqVO, MesMdItemBatchConfigDO.class); |
| | | itemBatchConfigMapper.insert(insertObj); |
| | | return insertObj.getId(); |
| | | // 3. 保存到 MDM 表 |
| | | MdmItemBatchConfigDO mdmConfig = BeanUtils.toBean(cleanReqVO, MdmItemBatchConfigDO.class); |
| | | Long configId = mdmItemBatchConfigApi.saveItemBatch(mdmConfig); |
| | | |
| | | // 4. 同步保存到 MES 本地表 |
| | | saveToMesTable(cleanReqVO); |
| | | |
| | | return configId; |
| | | } |
| | | |
| | | @Override |
| | |
| | | itemBatchConfigMapper.deleteByItemId(itemId); |
| | | } |
| | | |
| | | } |
| | | /** |
| | | * 保存到 MES 本地表 |
| | | */ |
| | | private void saveToMesTable(MesMdItemBatchConfigSaveReqVO saveReqVO) { |
| | | MesMdItemBatchConfigDO existing = itemBatchConfigMapper.selectByItemId(saveReqVO.getItemId()); |
| | | MesMdItemBatchConfigDO mesConfig = BeanUtils.toBean(saveReqVO, MesMdItemBatchConfigDO.class); |
| | | |
| | | if (existing != null) { |
| | | // 存在则更新,使用已有的 ID |
| | | mesConfig.setId(existing.getId()); |
| | | itemBatchConfigMapper.updateById(mesConfig); |
| | | } else { |
| | | // 不存在则插入,让数据库自动生成 ID |
| | | mesConfig.setId(null); |
| | | itemBatchConfigMapper.insert(mesConfig); |
| | | } |
| | | } |
| | | |
| | | } |