Commit b3195c7ca5f25af48d62e02d6f8798abbc7cc2b5

Authored by YunaiV
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&lt;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&lt;MesWmItemReceiptDO&gt;
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&lt;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()));
... ...