Commit b3195c7ca5f25af48d62e02d6f8798abbc7cc2b5
1 parent
832e8feb
✨ feat(mes): 更新供应商相关逻辑,添加英文名称及引用校验功能
重构供应商数据模型,替换供应商等级为英文名称,并在相关服务中添加对供应商引用的校验逻辑,以确保数据一致性和完整性。
Showing
18 changed files
with
114 additions
and
36 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/vendor/vo/MesMdVendorPageReqVO.java
| ... | ... | @@ -21,8 +21,8 @@ public class MesMdVendorPageReqVO extends PageParam { |
| 21 | 21 | @Schema(description = "供应商简称", example = "海力德") |
| 22 | 22 | private String nickname; |
| 23 | 23 | |
| 24 | - @Schema(description = "供应商等级", example = "A") | |
| 25 | - private String level; | |
| 24 | + @Schema(description = "供应商英文名称", example = "HLD") | |
| 25 | + private String englishName; | |
| 26 | 26 | |
| 27 | 27 | @Schema(description = "状态", example = "0") |
| 28 | 28 | private Integer status; | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/md/vendor/MesMdVendorMapper.java
| ... | ... | @@ -22,7 +22,7 @@ public interface MesMdVendorMapper extends BaseMapperX<MesMdVendorDO> { |
| 22 | 22 | .eqIfPresent(MesMdVendorDO::getCode, reqVO.getCode()) |
| 23 | 23 | .likeIfPresent(MesMdVendorDO::getName, reqVO.getName()) |
| 24 | 24 | .likeIfPresent(MesMdVendorDO::getNickname, reqVO.getNickname()) |
| 25 | - .eqIfPresent(MesMdVendorDO::getLevel, reqVO.getLevel()) | |
| 25 | + .likeIfPresent(MesMdVendorDO::getEnglishName, reqVO.getEnglishName()) | |
| 26 | 26 | .eqIfPresent(MesMdVendorDO::getStatus, reqVO.getStatus()) |
| 27 | 27 | .orderByDesc(MesMdVendorDO::getId)); |
| 28 | 28 | } |
| ... | ... | @@ -42,5 +42,4 @@ public interface MesMdVendorMapper extends BaseMapperX<MesMdVendorDO> { |
| 42 | 42 | default List<MesMdVendorDO> selectListByStatus(Integer status) { |
| 43 | 43 | return selectList(MesMdVendorDO::getStatus, status); |
| 44 | 44 | } |
| 45 | - | |
| 46 | 45 | } | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/arrivalnotice/MesWmArrivalNoticeMapper.java
| ... | ... | @@ -34,4 +34,8 @@ public interface MesWmArrivalNoticeMapper extends BaseMapperX<MesWmArrivalNotice |
| 34 | 34 | return selectList(MesWmArrivalNoticeDO::getStatus, status); |
| 35 | 35 | } |
| 36 | 36 | |
| 37 | + default Long selectCountByVendorId(Long vendorId) { | |
| 38 | + return selectCount(MesWmArrivalNoticeDO::getVendorId, vendorId); | |
| 39 | + } | |
| 40 | + | |
| 37 | 41 | } | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/itemreceipt/MesWmItemReceiptMapper.java
| ... | ... | @@ -26,4 +26,8 @@ public interface MesWmItemReceiptMapper extends BaseMapperX<MesWmItemReceiptDO> |
| 26 | 26 | return selectOne(MesWmItemReceiptDO::getCode, code); |
| 27 | 27 | } |
| 28 | 28 | |
| 29 | + default Long selectCountByVendorId(Long vendorId) { | |
| 30 | + return selectCount(MesWmItemReceiptDO::getVendorId, vendorId); | |
| 31 | + } | |
| 32 | + | |
| 29 | 33 | } | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/returnvendor/MesWmReturnVendorMapper.java
| ... | ... | @@ -22,4 +22,8 @@ public interface MesWmReturnVendorMapper extends BaseMapperX<MesWmReturnVendorDO |
| 22 | 22 | .orderByDesc(MesWmReturnVendorDO::getId)); |
| 23 | 23 | } |
| 24 | 24 | |
| 25 | + default Long selectCountByVendorId(Long vendorId) { | |
| 26 | + return selectCount(MesWmReturnVendorDO::getVendorId, vendorId); | |
| 27 | + } | |
| 28 | + | |
| 25 | 29 | } | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
| ... | ... | @@ -65,6 +65,7 @@ public interface ErrorCodeConstants { |
| 65 | 65 | ErrorCode MD_VENDOR_NAME_DUPLICATE = new ErrorCode(1_040_104_002, "供应商名称已存在"); |
| 66 | 66 | ErrorCode MD_VENDOR_NICKNAME_DUPLICATE = new ErrorCode(1_040_104_003, "供应商简称已存在"); |
| 67 | 67 | ErrorCode MD_VENDOR_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_040_104_004, "导入供应商数据不能为空"); |
| 68 | + ErrorCode MD_VENDOR_HAS_REFERENCE = new ErrorCode(1_040_104_005, "该供应商已被其他业务引用,无法删除"); | |
| 68 | 69 | |
| 69 | 70 | // ========== MES 基础数据-车间(1-040-105-000) ========== |
| 70 | 71 | ErrorCode MD_WORKSHOP_NOT_EXISTS = new ErrorCode(1_040_105_000, "车间不存在"); | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java
| ... | ... | @@ -12,13 +12,15 @@ import lombok.Getter; |
| 12 | 12 | @AllArgsConstructor |
| 13 | 13 | public enum MesMdAutoCodeRuleCodeEnum { |
| 14 | 14 | |
| 15 | - ITEM_CODE("MD_ITEM_CODE", "物料编码"), | |
| 16 | - SN_CODE("WM_SN_CODE", "SN 码"), | |
| 17 | - PACKAGE_CODE("WM_PACKAGE_CODE", "装箱单编码"), | |
| 18 | - BATCH_CODE("WM_BATCH_CODE", "批次编码"), | |
| 19 | - TASK_CODE("PRO_TASK_CODE", "生产任务编码"), | |
| 15 | + MD_ITEM_CODE("MD_ITEM_CODE", "物料编码"), | |
| 16 | + MD_VENDOR_CODE("MD_VENDOR_CODE", "供应商编码"), | |
| 17 | + WM_SN_CODE("WM_SN_CODE", "SN 码"), | |
| 18 | + WM_PACKAGE_CODE("WM_PACKAGE_CODE", "装箱单编码"), | |
| 19 | + WM_BATCH_CODE("WM_BATCH_CODE", "批次编码"), | |
| 20 | + PRO_TASK_CODE("PRO_TASK_CODE", "生产任务编码"), | |
| 20 | 21 | QC_IQC_CODE("QC_IQC_CODE", "来料检验单编码"), |
| 21 | 22 | QC_IPQC_CODE("QC_IPQC_CODE", "过程检验单编码"), |
| 23 | + QC_OQC_CODE("QC_OQC_CODE", "出货检验单编码"), | |
| 22 | 24 | QC_RQC_CODE("QC_RQC_CODE", "退货检验单编码"); |
| 23 | 25 | |
| 24 | 26 | /** | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/client/MesMdClientServiceImpl.java
| ... | ... | @@ -46,12 +46,8 @@ public class MesMdClientServiceImpl implements MesMdClientService { |
| 46 | 46 | |
| 47 | 47 | @Override |
| 48 | 48 | public Long createClient(MesMdClientSaveReqVO createReqVO) { |
| 49 | - // 校验编码唯一 | |
| 50 | - validateClientCodeUnique(null, createReqVO.getCode()); | |
| 51 | - // 校验名称唯一 | |
| 52 | - validateClientNameUnique(null, createReqVO.getName()); | |
| 53 | - // 校验简称唯一 | |
| 54 | - validateClientNicknameUnique(null, createReqVO.getNickname()); | |
| 49 | + // 校验数据 | |
| 50 | + validateClientSaveData(createReqVO); | |
| 55 | 51 | |
| 56 | 52 | // 插入 |
| 57 | 53 | MesMdClientDO client = BeanUtils.toBean(createReqVO, MesMdClientDO.class); |
| ... | ... | @@ -67,18 +63,23 @@ public class MesMdClientServiceImpl implements MesMdClientService { |
| 67 | 63 | public void updateClient(MesMdClientSaveReqVO updateReqVO) { |
| 68 | 64 | // 校验存在 |
| 69 | 65 | validateClientExists(updateReqVO.getId()); |
| 70 | - // 校验编码唯一 | |
| 71 | - validateClientCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); | |
| 72 | - // 校验名称唯一 | |
| 73 | - validateClientNameUnique(updateReqVO.getId(), updateReqVO.getName()); | |
| 74 | - // 校验简称唯一 | |
| 75 | - validateClientNicknameUnique(updateReqVO.getId(), updateReqVO.getNickname()); | |
| 66 | + // 校验数据 | |
| 67 | + validateClientSaveData(updateReqVO); | |
| 76 | 68 | |
| 77 | 69 | // 更新 |
| 78 | 70 | MesMdClientDO updateObj = BeanUtils.toBean(updateReqVO, MesMdClientDO.class); |
| 79 | 71 | clientMapper.updateById(updateObj); |
| 80 | 72 | } |
| 81 | 73 | |
| 74 | + private void validateClientSaveData(MesMdClientSaveReqVO reqVO) { | |
| 75 | + // 校验编码唯一 | |
| 76 | + validateClientCodeUnique(reqVO.getId(), reqVO.getCode()); | |
| 77 | + // 校验名称唯一 | |
| 78 | + validateClientNameUnique(reqVO.getId(), reqVO.getName()); | |
| 79 | + // 校验简称唯一 | |
| 80 | + validateClientNicknameUnique(reqVO.getId(), reqVO.getNickname()); | |
| 81 | + } | |
| 82 | + | |
| 82 | 83 | @Override |
| 83 | 84 | public void deleteClient(Long id) { |
| 84 | 85 | // 校验存在 | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/vendor/MesMdVendorServiceImpl.java
| ... | ... | @@ -13,8 +13,12 @@ import cn.iocoder.yudao.module.mes.controller.admin.md.vendor.vo.MesMdVendorSave |
| 13 | 13 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.vendor.MesMdVendorDO; |
| 14 | 14 | import cn.iocoder.yudao.module.mes.dal.mysql.md.vendor.MesMdVendorMapper; |
| 15 | 15 | import cn.iocoder.yudao.module.mes.enums.wm.BarcodeBizTypeEnum; |
| 16 | +import cn.iocoder.yudao.module.mes.service.wm.arrivalnotice.MesWmArrivalNoticeService; | |
| 16 | 17 | import cn.iocoder.yudao.module.mes.service.wm.barcode.MesWmBarcodeService; |
| 18 | +import cn.iocoder.yudao.module.mes.service.wm.itemreceipt.MesWmItemReceiptService; | |
| 19 | +import cn.iocoder.yudao.module.mes.service.wm.returnvendor.MesWmReturnVendorService; | |
| 17 | 20 | import jakarta.annotation.Resource; |
| 21 | +import org.springframework.context.annotation.Lazy; | |
| 18 | 22 | import org.springframework.stereotype.Service; |
| 19 | 23 | import org.springframework.transaction.annotation.Transactional; |
| 20 | 24 | import org.springframework.validation.annotation.Validated; |
| ... | ... | @@ -43,15 +47,20 @@ public class MesMdVendorServiceImpl implements MesMdVendorService { |
| 43 | 47 | |
| 44 | 48 | @Resource |
| 45 | 49 | private MesWmBarcodeService barcodeService; |
| 50 | + @Resource | |
| 51 | + @Lazy | |
| 52 | + private MesWmItemReceiptService itemReceiptService; | |
| 53 | + @Resource | |
| 54 | + @Lazy | |
| 55 | + private MesWmArrivalNoticeService arrivalNoticeService; | |
| 56 | + @Resource | |
| 57 | + @Lazy | |
| 58 | + private MesWmReturnVendorService returnVendorService; | |
| 46 | 59 | |
| 47 | 60 | @Override |
| 48 | 61 | public Long createVendor(MesMdVendorSaveReqVO createReqVO) { |
| 49 | - // 校验编码唯一 | |
| 50 | - validateVendorCodeUnique(null, createReqVO.getCode()); | |
| 51 | - // 校验名称唯一 | |
| 52 | - validateVendorNameUnique(null, createReqVO.getName()); | |
| 53 | - // 校验简称唯一 | |
| 54 | - validateVendorNicknameUnique(null, createReqVO.getNickname()); | |
| 62 | + // 校验数据 | |
| 63 | + validateVendorSaveData(createReqVO); | |
| 55 | 64 | |
| 56 | 65 | // 插入 |
| 57 | 66 | MesMdVendorDO vendor = BeanUtils.toBean(createReqVO, MesMdVendorDO.class); |
| ... | ... | @@ -67,12 +76,8 @@ public class MesMdVendorServiceImpl implements MesMdVendorService { |
| 67 | 76 | public void updateVendor(MesMdVendorSaveReqVO updateReqVO) { |
| 68 | 77 | // 校验存在 |
| 69 | 78 | validateVendorExists(updateReqVO.getId()); |
| 70 | - // 校验编码唯一 | |
| 71 | - validateVendorCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); | |
| 72 | - // 校验名称唯一 | |
| 73 | - validateVendorNameUnique(updateReqVO.getId(), updateReqVO.getName()); | |
| 74 | - // 校验简称唯一 | |
| 75 | - validateVendorNicknameUnique(updateReqVO.getId(), updateReqVO.getNickname()); | |
| 79 | + // 校验数据 | |
| 80 | + validateVendorSaveData(updateReqVO); | |
| 76 | 81 | |
| 77 | 82 | // 更新 |
| 78 | 83 | MesMdVendorDO updateObj = BeanUtils.toBean(updateReqVO, MesMdVendorDO.class); |
| ... | ... | @@ -83,6 +88,8 @@ public class MesMdVendorServiceImpl implements MesMdVendorService { |
| 83 | 88 | public void deleteVendor(Long id) { |
| 84 | 89 | // 校验存在 |
| 85 | 90 | validateVendorExists(id); |
| 91 | + // 校验是否被其他业务引用 | |
| 92 | + validateVendorNotReferenced(id); | |
| 86 | 93 | // 删除 |
| 87 | 94 | vendorMapper.deleteById(id); |
| 88 | 95 | } |
| ... | ... | @@ -96,6 +103,15 @@ public class MesMdVendorServiceImpl implements MesMdVendorService { |
| 96 | 103 | return vendor; |
| 97 | 104 | } |
| 98 | 105 | |
| 106 | + private void validateVendorSaveData(MesMdVendorSaveReqVO reqVO) { | |
| 107 | + // 校验编码唯一 | |
| 108 | + validateVendorCodeUnique(reqVO.getId(), reqVO.getCode()); | |
| 109 | + // 校验名称唯一 | |
| 110 | + validateVendorNameUnique(reqVO.getId(), reqVO.getName()); | |
| 111 | + // 校验简称唯一 | |
| 112 | + validateVendorNicknameUnique(reqVO.getId(), reqVO.getNickname()); | |
| 113 | + } | |
| 114 | + | |
| 99 | 115 | private void validateVendorCodeUnique(Long id, String code) { |
| 100 | 116 | MesMdVendorDO vendor = vendorMapper.selectByCode(code); |
| 101 | 117 | if (vendor == null) { |
| ... | ... | @@ -129,6 +145,14 @@ public class MesMdVendorServiceImpl implements MesMdVendorService { |
| 129 | 145 | } |
| 130 | 146 | } |
| 131 | 147 | |
| 148 | + private void validateVendorNotReferenced(Long id) { | |
| 149 | + if (itemReceiptService.getItemReceiptCountByVendorId(id) > 0 | |
| 150 | + || arrivalNoticeService.getArrivalNoticeCountByVendorId(id) > 0 | |
| 151 | + || returnVendorService.getReturnVendorCountByVendorId(id) > 0) { | |
| 152 | + throw exception(MD_VENDOR_HAS_REFERENCE); | |
| 153 | + } | |
| 154 | + } | |
| 155 | + | |
| 132 | 156 | @Override |
| 133 | 157 | public MesMdVendorDO getVendor(Long id) { |
| 134 | 158 | return vendorMapper.selectById(id); | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java
| ... | ... | @@ -70,7 +70,7 @@ public class MesProTaskServiceImpl implements MesProTaskService { |
| 70 | 70 | // 2.1 构建任务 DO |
| 71 | 71 | MesProTaskDO task = BeanUtils.toBean(createReqVO, MesProTaskDO.class) |
| 72 | 72 | .setName(buildTaskName(item.getName(), createReqVO.getQuantity())) |
| 73 | - .setCode(autoCodeRecordService.generateAutoCode(MesMdAutoCodeRuleCodeEnum.TASK_CODE.getCode())) | |
| 73 | + .setCode(autoCodeRecordService.generateAutoCode(MesMdAutoCodeRuleCodeEnum.PRO_TASK_CODE.getCode())) | |
| 74 | 74 | .setStatus(MesProTaskStatusEnum.PREPARE.getStatus()); |
| 75 | 75 | // 2.2 插入 |
| 76 | 76 | taskMapper.insert(task); | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeService.java
| ... | ... | @@ -108,4 +108,12 @@ public interface MesWmArrivalNoticeService { |
| 108 | 108 | */ |
| 109 | 109 | List<MesWmArrivalNoticeDO> getArrivalNoticeListByStatus(Integer status); |
| 110 | 110 | |
| 111 | + /** | |
| 112 | + * 查询指定供应商的到货通知单数量 | |
| 113 | + * | |
| 114 | + * @param vendorId 供应商编号 | |
| 115 | + * @return 数量 | |
| 116 | + */ | |
| 117 | + Long getArrivalNoticeCountByVendorId(Long vendorId); | |
| 118 | + | |
| 111 | 119 | } | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java
| ... | ... | @@ -213,4 +213,9 @@ public class MesWmArrivalNoticeServiceImpl implements MesWmArrivalNoticeService |
| 213 | 213 | } |
| 214 | 214 | } |
| 215 | 215 | |
| 216 | + @Override | |
| 217 | + public Long getArrivalNoticeCountByVendorId(Long vendorId) { | |
| 218 | + return arrivalNoticeMapper.selectCountByVendorId(vendorId); | |
| 219 | + } | |
| 220 | + | |
| 216 | 221 | } | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchServiceImpl.java
| ... | ... | @@ -183,7 +183,7 @@ public class MesWmBatchServiceImpl implements MesWmBatchService { |
| 183 | 183 | } |
| 184 | 184 | |
| 185 | 185 | // 3.2 情况二:生成新批次 |
| 186 | - String batchCode = autoCodeRecordService.generateAutoCode(MesMdAutoCodeRuleCodeEnum.BATCH_CODE.getCode()); | |
| 186 | + String batchCode = autoCodeRecordService.generateAutoCode(MesMdAutoCodeRuleCodeEnum.WM_BATCH_CODE.getCode()); | |
| 187 | 187 | batch.setCode(batchCode); |
| 188 | 188 | batchMapper.insert(batch); |
| 189 | 189 | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptService.java
| ... | ... | @@ -85,4 +85,12 @@ public interface MesWmItemReceiptService { |
| 85 | 85 | */ |
| 86 | 86 | MesWmItemReceiptDO validateItemReceiptEditable(Long id); |
| 87 | 87 | |
| 88 | + /** | |
| 89 | + * 查询指定供应商的采购入库单数量 | |
| 90 | + * | |
| 91 | + * @param vendorId 供应商编号 | |
| 92 | + * @return 数量 | |
| 93 | + */ | |
| 94 | + Long getItemReceiptCountByVendorId(Long vendorId); | |
| 95 | + | |
| 88 | 96 | } | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
| ... | ... | @@ -228,4 +228,9 @@ public class MesWmItemReceiptServiceImpl implements MesWmItemReceiptService { |
| 228 | 228 | } |
| 229 | 229 | } |
| 230 | 230 | |
| 231 | + @Override | |
| 232 | + public Long getItemReceiptCountByVendorId(Long vendorId) { | |
| 233 | + return itemReceiptMapper.selectCountByVendorId(vendorId); | |
| 234 | + } | |
| 235 | + | |
| 231 | 236 | } | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorService.java
| ... | ... | @@ -93,4 +93,12 @@ public interface MesWmReturnVendorService { |
| 93 | 93 | */ |
| 94 | 94 | Boolean checkReturnVendorQuantity(Long id); |
| 95 | 95 | |
| 96 | + /** | |
| 97 | + * 查询指定供应商的退货单数量 | |
| 98 | + * | |
| 99 | + * @param vendorId 供应商编号 | |
| 100 | + * @return 数量 | |
| 101 | + */ | |
| 102 | + Long getReturnVendorCountByVendorId(Long vendorId); | |
| 103 | + | |
| 96 | 104 | } | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorServiceImpl.java
| ... | ... | @@ -208,4 +208,9 @@ public class MesWmReturnVendorServiceImpl implements MesWmReturnVendorService { |
| 208 | 208 | return returnVendor; |
| 209 | 209 | } |
| 210 | 210 | |
| 211 | + @Override | |
| 212 | + public Long getReturnVendorCountByVendorId(Long vendorId) { | |
| 213 | + return returnVendorMapper.selectCountByVendorId(vendorId); | |
| 214 | + } | |
| 215 | + | |
| 211 | 216 | } | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/sn/MesWmSnServiceImpl.java
| ... | ... | @@ -41,7 +41,7 @@ public class MesWmSnServiceImpl implements MesWmSnService { |
| 41 | 41 | String uuid = IdUtil.fastSimpleUUID(); |
| 42 | 42 | // 批量生成 SN 码 |
| 43 | 43 | for (int i = 0; i < reqVO.getCount(); i++) { |
| 44 | - String snCode = autoCodeRecordService.generateAutoCode(MesMdAutoCodeRuleCodeEnum.SN_CODE.getCode()); | |
| 44 | + String snCode = autoCodeRecordService.generateAutoCode(MesMdAutoCodeRuleCodeEnum.WM_SN_CODE.getCode()); | |
| 45 | 45 | sns.add(new MesWmSnDO().setUuid(uuid).setCode(snCode) |
| 46 | 46 | .setItemId(reqVO.getItemId()).setBatchCode(reqVO.getBatchCode()) |
| 47 | 47 | .setWorkOrderId(reqVO.getWorkOrderId())); | ... | ... |