| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- MDM ç©æè¡¥ãé¢è²ãåæ®µï¼éæ±ï¼ç©æé¢è²å¨ç©æç®¡ç(mdm)页é¢åæ ·å¯ç»´æ¤ï¼ |
| | | -- ä¸ mes_md_item.color ä¿æä¸è´ï¼å¹¶æç©æç¼ç æ MES å·²æçé¢è²åå¡«è¿æ¥ã |
| | | |
| | | SET @c := (SELECT COUNT(*) FROM information_schema.COLUMNS |
| | | WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='mdm_item' AND COLUMN_NAME='color'); |
| | | SET @s := IF(@c=0, |
| | | 'ALTER TABLE mdm_item ADD COLUMN color VARCHAR(64) DEFAULT NULL COMMENT ''é¢è²'' AFTER specification', |
| | | 'SELECT 1'); |
| | | PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st; |
| | | |
| | | -- åå¡«ï¼æç©æç¼ç æ MES 侧已维æ¤çé¢è²åæ¥å° MDMï¼ä»
å¡«å
MDM 为空çè®°å½ï¼ |
| | | UPDATE mdm_item m |
| | | JOIN mes_md_item s ON s.code = m.code AND CAST(s.deleted AS UNSIGNED)=0 |
| | | SET m.color = s.color |
| | | WHERE CAST(m.deleted AS UNSIGNED)=0 |
| | | AND s.color IS NOT NULL AND s.color <> '' |
| | | AND (m.color IS NULL OR m.color = ''); |
| | | |
| | | -- åååå¡«ï¼MDM æé¢è²è MES æ²¡ææ¶ï¼åæ¥å° MESï¼ä¿æä¸¤è¾¹ä¸è´ï¼ |
| | | UPDATE mes_md_item s |
| | | JOIN mdm_item m ON m.code = s.code AND CAST(m.deleted AS UNSIGNED)=0 |
| | | SET s.color = m.color |
| | | WHERE CAST(s.deleted AS UNSIGNED)=0 |
| | | AND m.color IS NOT NULL AND m.color <> '' |
| | | AND (s.color IS NULL OR s.color = ''); |
| | |
| | | */ |
| | | CommonResult<Long> syncItemToMdm(MdmItemSyncReqDTO syncReqDTO); |
| | | |
| | | } |
| | | /** ä»
忥已æåç¼ç ç©æçé¢è²ï¼ä¸åå»ºç©ææè¦çå
¶ä»ä¸»æ°æ®ã */ |
| | | CommonResult<Boolean> syncExistingItemColor(String code, String color); |
| | | |
| | | } |
| | |
| | | private MdmItemBatchConfigMapper itemBatchConfigMapper; |
| | | |
| | | @Override |
| | | public CommonResult<Boolean> syncExistingItemColor(String code, String color) { |
| | | MdmItemDO existingItem = itemMapper.selectByCode(code); |
| | | if (existingItem == null || color == null) { |
| | | return success(false); |
| | | } |
| | | itemMapper.updateById(new MdmItemDO().setId(existingItem.getId()).setColor(color)); |
| | | return success(true); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public CommonResult<Long> syncItemToMdm(MdmItemSyncReqDTO syncReqDTO) { |
| | | // 1. æ code æ¥è¯¢æ¯å¦å·²åå¨ |
| | |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | |
| | | @Schema(description = "è§æ ¼åå·", example = "M8*20") |
| | | private String specification; |
| | | |
| | | @Schema(description = "é¢è²", example = "红") |
| | | private String color; |
| | | |
| | | @Schema(description = "ç©æåç±»ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | private Long categoryId; |
| | | |
| | |
| | | @Schema(description = "夿³¨", example = "夿³¨ä¿¡æ¯") |
| | | private String remark; |
| | | |
| | | } |
| | | } |
| | |
| | | @Schema(description = "è§æ ¼åå·", example = "M6*20") |
| | | private String specification; |
| | | |
| | | @Schema(description = "é¢è²", example = "红") |
| | | private String color; |
| | | |
| | | @Schema(description = "ç©æç±»åï¼1åæ, 2åæå, 3æå, 4è¾
æ", example = "1") |
| | | private Long itemType; |
| | | |
| | |
| | | @ExcelProperty("è§æ ¼åå·") |
| | | private String specification; |
| | | |
| | | @ExcelProperty("é¢è²") |
| | | private String color; |
| | | |
| | | @ExcelProperty("ç©æç±»å") |
| | | private String itemTypeName; |
| | | |
| | |
| | | @ExcelProperty("è§æ ¼åå·") |
| | | private String specification; |
| | | |
| | | @ExcelProperty("é¢è²") |
| | | private String color; |
| | | |
| | | @ExcelProperty("ç©æåç±»ç¼ç ") |
| | | private String categoryCode; |
| | | |
| | |
| | | @Schema(description = "ç©ææ¡ç ", example = "12345678") |
| | | private String barCode; |
| | | |
| | | @Schema(description = "é¢è²ï¼æ¨¡ç³å¹é
ï¼", example = "红") |
| | | private String color; |
| | | |
| | | @Schema(description = "ç©æåç±»ç¼å·", example = "1") |
| | | private Long categoryId; |
| | | |
| | |
| | | @Schema(description = "è§æ ¼åå·", example = "M8*20") |
| | | private String specification; |
| | | |
| | | @Schema(description = "é¢è²", example = "红") |
| | | private String color; |
| | | |
| | | @Schema(description = "ç©æåç±»ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | private Long categoryId; |
| | | |
| | |
| | | @Schema(description = "è§æ ¼åå·", example = "M8*20") |
| | | private String specification; |
| | | |
| | | @Schema(description = "é¢è²", example = "红") |
| | | private String color; |
| | | |
| | | @Schema(description = "ç©æåç±»ç¼å·ï¼å
³è MES ç©æåç±» mes_md_item_typeï¼", example = "1") |
| | | private Long categoryId; |
| | | |
| | |
| | | private String specification; |
| | | |
| | | /** |
| | | * é¢è² |
| | | * |
| | | * ç¨äºåºåååå·ä¸åé¢è²çç©æ |
| | | */ |
| | | private String color; |
| | | |
| | | /** |
| | | * ç©æåç±»ç¼å· |
| | | * |
| | | * å
³è {@link MdmItemCategoryDO#getId()} |
| | |
| | | .likeIfPresent(MdmItemDO::getCode, reqVO.getCode()) |
| | | .likeIfPresent(MdmItemDO::getName, reqVO.getName()) |
| | | .likeIfPresent(MdmItemDO::getBarCode, reqVO.getBarCode()) |
| | | .likeIfPresent(MdmItemDO::getColor, reqVO.getColor()) |
| | | .inIfPresent(MdmItemDO::getCategoryId, categoryIds) |
| | | .eqIfPresent(MdmItemDO::getItemType, reqVO.getItemType()) |
| | | .eqIfPresent(MdmItemDO::getBrandId, reqVO.getBrandId()) |
| | |
| | | return selectList(new LambdaQueryWrapperX<MdmItemDO>() |
| | | .likeIfPresent(MdmItemDO::getCode, reqVO.getCode()) |
| | | .likeIfPresent(MdmItemDO::getName, reqVO.getName()) |
| | | .likeIfPresent(MdmItemDO::getColor, reqVO.getColor()) |
| | | .inIfPresent(MdmItemDO::getCategoryId, categoryIds) |
| | | .eqIfPresent(MdmItemDO::getItemType, reqVO.getItemType()) |
| | | .eqIfPresent(MdmItemDO::getStatus, reqVO.getStatus()) |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateItem(MdmItemSaveReqVO updateReqVO) { |
| | | // æ ¡éªåå¨ |
| | | validateItemExists(updateReqVO.getId()); |
| | | MdmItemDO previousItem = validateItemExists(updateReqVO.getId()); |
| | | // æ ¡éªæ°æ® |
| | | validateItemSaveData(updateReqVO); |
| | | |
| | |
| | | |
| | | // æ ¹æ®åæ¥å¼å
³å³å®ï¼æå¼ååæ¥å° MESï¼å
³éå忶忥ï¼ä» MES å é¤ï¼ |
| | | if (Boolean.TRUE.equals(updateReqVO.getSyncMes())) { |
| | | syncItemToMes(updateReqVO); |
| | | syncItemToMes(updateReqVO, previousItem.getCode()); |
| | | } else { |
| | | mesMdItemApi.deleteItem(updateReqVO.getId()); |
| | | } |
| | |
| | | * åæ¥å¤±è´¥å°æåºå¼å¸¸ï¼åæ»æ¬è¡äºå¡ï¼æ¬è¡ç MDM æä½ä¸å¹¶åæ»ï¼ä¸å½±åå
¶å®è¡ï¼ã |
| | | */ |
| | | private void syncItemToMes(MdmItemSaveReqVO reqVO) { |
| | | syncItemToMes(reqVO, null); |
| | | } |
| | | |
| | | private void syncItemToMes(MdmItemSaveReqVO reqVO, String previousCode) { |
| | | // è§£æè®¡éåä½ id -> code |
| | | String unitCode = null; |
| | | if (reqVO.getUnitMeasureId() != null) { |
| | |
| | | // ç»è£
忥 DTO |
| | | MesMdItemSyncReqDTO syncReqDTO = new MesMdItemSyncReqDTO(); |
| | | syncReqDTO.setCode(reqVO.getCode()); |
| | | syncReqDTO.setPreviousCode(previousCode); |
| | | syncReqDTO.setMdmItemId(reqVO.getId()); |
| | | syncReqDTO.setName(reqVO.getName()); |
| | | syncReqDTO.setSpecification(reqVO.getSpecification()); |
| | | syncReqDTO.setColor(reqVO.getColor()); |
| | | syncReqDTO.setUnitCode(unitCode); |
| | | syncReqDTO.setItemTypeCode(itemTypeCode); |
| | | syncReqDTO.setSafeStockFlag(Boolean.TRUE); // ä¿ç MDM ç minStock/maxStockï¼é¿å
被 MES æ¸
é¶ |
| | |
| | | saveReqVO.setName(importVO.getName()); |
| | | saveReqVO.setBarCode(importVO.getBarCode()); |
| | | saveReqVO.setSpecification(importVO.getSpecification()); |
| | | saveReqVO.setColor(importVO.getColor()); |
| | | saveReqVO.setCategoryId(categoryId); |
| | | saveReqVO.setUnitMeasureId(unitMeasureId); |
| | | saveReqVO.setUnitMeasureId2(unitMeasureId2); |
| | |
| | | StrUtil.blankToDefault(importVO.getName(), "ï¼åç§°åç¼ç 为空çè¡ï¼")); |
| | | } |
| | | |
| | | } |
| | | } |
| | |
| | | @Schema(description = "ç©æç¼ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "ITEM001") |
| | | private String code; |
| | | |
| | | @Schema(description = "ä¿®æ¹åçç©æç¼ç ï¼ç¨äºå®å
¨è¯å«å·²å
³èççäº§ç©æ") |
| | | private String previousCode; |
| | | |
| | | @Schema(description = "ç©æåç§°", requiredMode = Schema.RequiredMode.REQUIRED, example = "èºä¸") |
| | | private String name; |
| | | |
| | | @Schema(description = "è§æ ¼åå·", example = "M6*20") |
| | | private String specification; |
| | | |
| | | @Schema(description = "é¢è²", example = "红") |
| | | private String color; |
| | | |
| | | @Schema(description = "计éåä½ç¼ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "PCS") |
| | | private String unitCode; |
| | | |
| | |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.Objects; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.invalidParamException; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | |
| | | @Override |
| | | public Long createItem(MesMdItemSyncReqDTO syncReqDTO) { |
| | | log.info("[createItem] 忥å建 MES ç©æäº§åï¼code={}, mdmItemId={}", syncReqDTO.getCode(), syncReqDTO.getMdmItemId()); |
| | | validateSharedId(syncReqDTO); |
| | | MesMdItemSaveReqVO saveReqVO = buildSaveReqVO(syncReqDTO); |
| | | // ä½¿ç¨ MDM ç©æ ID ä½ä¸º MES ç©æ ID |
| | | if (syncReqDTO.getMdmItemId() != null) { |
| | |
| | | @Override |
| | | public void updateItem(MesMdItemSyncReqDTO syncReqDTO) { |
| | | log.info("[updateItem] åæ¥æ´æ° MES ç©æäº§åï¼code={}, mdmItemId={}", syncReqDTO.getCode(), syncReqDTO.getMdmItemId()); |
| | | validateSharedId(syncReqDTO); |
| | | MesMdItemSaveReqVO saveReqVO = buildSaveReqVO(syncReqDTO); |
| | | // ä½¿ç¨ MDM ç©æ ID ä½ä¸º MES ç©æ ID |
| | | if (syncReqDTO.getMdmItemId() != null) { |
| | |
| | | // saveBatchConfig(itemId, syncReqDTO); |
| | | } |
| | | |
| | | private void validateSharedId(MesMdItemSyncReqDTO syncReqDTO) { |
| | | if (syncReqDTO.getMdmItemId() == null) { |
| | | return; |
| | | } |
| | | MesMdItemDO existing = itemMapper.selectAnyById(syncReqDTO.getMdmItemId()); |
| | | if (existing != null && !Objects.equals(existing.getCode(), syncReqDTO.getCode()) |
| | | && !Objects.equals(existing.getCode(), syncReqDTO.getPreviousCode())) { |
| | | throw invalidParamException("åæ¥å¤±è´¥ï¼çäº§ç©æç¼å·å·²è¢«å
¶ä»ç¼ç å ç¨ï¼è¯·æ ¸å¯¹ä¸¤å¥ç©ææ°æ®ååæä½"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å°åæ¥ DTO 转æ¢ä¸º MES ç©æäº§å SaveReqVOï¼å¹¶æ code è§£æåä½/åç±» id |
| | | */ |
| | |
| | | if (Boolean.TRUE.equals(updateReqVO.getSyncMdm())) { |
| | | MesMdItemDO item = itemMapper.selectById(updateReqVO.getId()); |
| | | syncItemToMdm(item, updateReqVO); |
| | | } else if (updateReqVO.getMdmItemId() == null && updateReqVO.getColor() != null) { |
| | | // MES 页é¢ç¼è¾æ¶åªåæ¥å·²æåç¼ç ç©æçé¢è²ï¼é¿å
è¦ç MDM å
¶ä»å段æå¾ªç¯åæ¥ã |
| | | mdmItemSyncApi.syncExistingItemColor(updateReqVO.getCode(), updateReqVO.getColor()).checkError(); |
| | | } |
| | | } |
| | | |
| | |
| | | syncReqDTO.setCode(item.getCode()); |
| | | syncReqDTO.setName(item.getName()); |
| | | syncReqDTO.setSpecification(item.getSpecification()); |
| | | syncReqDTO.setColor(item.getColor()); |
| | | syncReqDTO.setItemType(itemType); |
| | | syncReqDTO.setUnitMeasureId(unitMeasureId); |
| | | syncReqDTO.setCategoryId(item.getItemTypeId()); |