From 74005fc603047ad9288b85b23ddc5ffac2afcd80 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Thu, 19 Feb 2026 18:45:42 +0800 Subject: [PATCH] fix(mes): 工艺路线模块 TODO 修复:启用限制、枚举规范、字典链接 --- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/pro/route/MesProRouteProcessDO.java | 1 + yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/pro/route/MesProRouteProductDO.java | 4 ++-- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/MesProRouteProcessMapper.java | 18 ------------------ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/DictTypeConstants.java | 2 ++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java | 1 + yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProLinkTypeEnum.java | 9 ++++----- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProcessServiceImpl.java | 19 ++++++++++++------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProductBomServiceImpl.java | 24 +++++++++++++++++++----- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProductServiceImpl.java | 13 +++++++++++-- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteService.java | 7 +++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteServiceImpl.java | 20 ++++++++++++++++---- 11 files changed, 75 insertions(+), 43 deletions(-) diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/pro/route/MesProRouteProcessDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/pro/route/MesProRouteProcessDO.java index 5b612e5..e94a4a8 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/pro/route/MesProRouteProcessDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/pro/route/MesProRouteProcessDO.java @@ -51,6 +51,7 @@ public class MesProRouteProcessDO extends BaseDO { /** * 与下一道工序关系 * + * 字典 {@link cn.iocoder.yudao.module.mes.enums.DictTypeConstants#MES_PRO_LINK_TYPE} * 枚举 {@link cn.iocoder.yudao.module.mes.enums.pro.MesProLinkTypeEnum} */ private Integer linkType; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/pro/route/MesProRouteProductDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/pro/route/MesProRouteProductDO.java index 43f46e1..6d826db 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/pro/route/MesProRouteProductDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/pro/route/MesProRouteProductDO.java @@ -51,9 +51,9 @@ public class MesProRouteProductDO extends BaseDO { /** * 时间单位 * - * 字典类型 mes_time_unit_type + * 字典 {@link cn.iocoder.yudao.module.mes.enums.DictTypeConstants#MES_TIME_UNIT_TYPE} + * 枚举 {@link cn.iocoder.yudao.module.mes.enums.pro.MesTimeUnitTypeEnum} */ - // TODO @AI:外链 @ 加下,字典 + 枚举类;(需要枚举出来。在 dictconstants 里) private String timeUnitType; /** * 备注 diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/MesProRouteProcessMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/MesProRouteProcessMapper.java index 38a65b8..1ed2303 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/MesProRouteProcessMapper.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/MesProRouteProcessMapper.java @@ -48,22 +48,4 @@ public interface MesProRouteProcessMapper extends BaseMapperX() - .eq(MesProRouteProcessDO::getRouteId, routeId) - .lt(MesProRouteProcessDO::getSort, sort) - .orderByDesc(MesProRouteProcessDO::getSort) - // TODO @AI:limit 1,使用 mybatis utils - .last("LIMIT 1")); - } - - default MesProRouteProcessDO findNextProcess(Long routeId, Integer sort) { - return selectOne(new LambdaQueryWrapperX() - .eq(MesProRouteProcessDO::getRouteId, routeId) - .gt(MesProRouteProcessDO::getSort, sort) - .orderByAsc(MesProRouteProcessDO::getSort) - // TODO @AI:limit 1,使用 mybatis utils - .last("LIMIT 1")); - } - } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/DictTypeConstants.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/DictTypeConstants.java index d0caebc..fcaa7a1 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/DictTypeConstants.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/DictTypeConstants.java @@ -24,5 +24,7 @@ public interface DictTypeConstants { String MES_PRO_WORK_ORDER_SOURCE_TYPE = "mes_pro_work_order_source_type"; // MES 工单来源类型 String MES_PRO_WORK_ORDER_TYPE = "mes_pro_work_order_type"; // MES 工单类型 String MES_QC_TYPE = "mes_qc_type"; // MES 检测种类(IQC/IPQC/OQC/RQC) + String MES_PRO_LINK_TYPE = "mes_pro_link_type"; // MES 工序关系类型 + String MES_TIME_UNIT_TYPE = "mes_time_unit_type"; // MES 时间单位 } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java index 610dd3a..9f07458 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java @@ -150,6 +150,7 @@ public interface ErrorCodeConstants { ErrorCode PRO_ROUTE_ENABLE_NO_PROCESS = new ErrorCode(1_040_501_002, "请先添加组成工序"); ErrorCode PRO_ROUTE_ENABLE_NO_KEY_PROCESS = new ErrorCode(1_040_501_003, "工艺路线必须要有关键工序"); ErrorCode PRO_ROUTE_ENABLE_PRODUCT_NO_BOM = new ErrorCode(1_040_501_004, "产品 {} 未配置工序的 BOM 消耗"); + ErrorCode PRO_ROUTE_IS_ENABLE = new ErrorCode(1_040_501_005, "工艺路线已启用,不允许操作"); // ========== MES 生产管理-工艺路线工序(1-040-501-100) ========== ErrorCode PRO_ROUTE_PROCESS_NOT_EXISTS = new ErrorCode(1_040_501_100, "工艺路线工序不存在"); ErrorCode PRO_ROUTE_PROCESS_SORT_DUPLICATE = new ErrorCode(1_040_501_101, "序号已存在"); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProLinkTypeEnum.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProLinkTypeEnum.java index de07449..8ad8deb 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProLinkTypeEnum.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProLinkTypeEnum.java @@ -15,11 +15,10 @@ import java.util.Arrays; @AllArgsConstructor public enum MesProLinkTypeEnum implements ArrayValuable { - // TODO @AI:START_START,类似这样的缩写; - SS(0, "开始-开始"), - FF(1, "结束-结束"), - SF(2, "开始-结束"), - FS(3, "结束-开始"); + START_START(0, "开始-开始"), + FINISH_FINISH(1, "结束-结束"), + START_FINISH(2, "开始-结束"), + FINISH_START(3, "结束-开始"); public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesProLinkTypeEnum::getType).toArray(Integer[]::new); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProcessServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProcessServiceImpl.java index 05300c5..826354d 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProcessServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProcessServiceImpl.java @@ -41,6 +41,8 @@ public class MesProRouteProcessServiceImpl implements MesProRouteProcessService @Override @Transactional(rollbackFor = Exception.class) public Long createRouteProcess(MesProRouteProcessSaveReqVO createReqVO) { + // 1.0 已启用的工艺路线,不允许操作 + routeService.validateRouteNotEnable(createReqVO.getRouteId()); // 1.1 校验工艺路线、工序存在 validateRouteAndProcessExists(createReqVO.getRouteId(), createReqVO.getProcessId()); // 1.2 校验唯一性 @@ -60,6 +62,8 @@ public class MesProRouteProcessServiceImpl implements MesProRouteProcessService @Override @Transactional(rollbackFor = Exception.class) public void updateRouteProcess(MesProRouteProcessSaveReqVO updateReqVO) { + // 1.0 已启用的工艺路线,不允许操作 + routeService.validateRouteNotEnable(updateReqVO.getRouteId()); // 1.1 校验存在 validateRouteProcessExists(updateReqVO.getId()); // 1.2 校验工艺路线、工序存在 @@ -80,11 +84,10 @@ public class MesProRouteProcessServiceImpl implements MesProRouteProcessService @Override @Transactional(rollbackFor = Exception.class) public void deleteRouteProcess(Long id) { - // 1. 校验存在 - MesProRouteProcessDO routeProcess = routeProcessMapper.selectById(id); - if (routeProcess == null) { - throw exception(PRO_ROUTE_PROCESS_NOT_EXISTS); - } + // 1.1 校验存在 + MesProRouteProcessDO routeProcess = validateRouteProcessExists(id); + // 1.2 已启用的工艺路线,不允许操作 + routeService.validateRouteNotEnable(routeProcess.getRouteId()); // 2. 删除 routeProcessMapper.deleteById(id); @@ -114,10 +117,12 @@ public class MesProRouteProcessServiceImpl implements MesProRouteProcessService } } - private void validateRouteProcessExists(Long id) { - if (routeProcessMapper.selectById(id) == null) { + private MesProRouteProcessDO validateRouteProcessExists(Long id) { + MesProRouteProcessDO routeProcess = routeProcessMapper.selectById(id); + if (routeProcess == null) { throw exception(PRO_ROUTE_PROCESS_NOT_EXISTS); } + return routeProcess; } private void validateRouteAndProcessExists(Long routeId, Long processId) { diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProductBomServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProductBomServiceImpl.java index 1cf6907..59bb0d8 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProductBomServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProductBomServiceImpl.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.mes.controller.admin.pro.route.vo.productbom.MesP import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProductBomDO; import cn.iocoder.yudao.module.mes.dal.mysql.pro.MesProRouteProductBomMapper; import jakarta.annotation.Resource; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -26,9 +27,15 @@ public class MesProRouteProductBomServiceImpl implements MesProRouteProductBomSe @Resource private MesProRouteProductBomMapper routeProductBomMapper; + @Resource + @Lazy + private MesProRouteService routeService; + @Override public Long createRouteProductBom(MesProRouteProductBomSaveReqVO createReqVO) { - // 1. 校验唯一性 + // 1.0 已启用的工艺路线,不允许操作 + routeService.validateRouteNotEnable(createReqVO.getRouteId()); + // 1.1 校验唯一性 validateBomUnique(null, createReqVO.getItemId(), createReqVO.getProcessId(), createReqVO.getProductId()); // 2. 插入 MesProRouteProductBomDO routeProductBom = BeanUtils.toBean(createReqVO, MesProRouteProductBomDO.class); @@ -38,9 +45,11 @@ public class MesProRouteProductBomServiceImpl implements MesProRouteProductBomSe @Override public void updateRouteProductBom(MesProRouteProductBomSaveReqVO updateReqVO) { - // 1. 校验存在 + // 1.0 已启用的工艺路线,不允许操作 + routeService.validateRouteNotEnable(updateReqVO.getRouteId()); + // 1.1 校验存在 validateRouteProductBomExists(updateReqVO.getId()); - // 2. 校验唯一性 + // 1.2 校验唯一性 validateBomUnique(updateReqVO.getId(), updateReqVO.getItemId(), updateReqVO.getProcessId(), updateReqVO.getProductId()); // 3. 更新 MesProRouteProductBomDO updateObj = BeanUtils.toBean(updateReqVO, MesProRouteProductBomDO.class); @@ -49,8 +58,13 @@ public class MesProRouteProductBomServiceImpl implements MesProRouteProductBomSe @Override public void deleteRouteProductBom(Long id) { - // 1. 校验存在 - validateRouteProductBomExists(id); + // 1.1 校验存在 + MesProRouteProductBomDO bom = routeProductBomMapper.selectById(id); + if (bom == null) { + throw exception(PRO_ROUTE_PRODUCT_BOM_NOT_EXISTS); + } + // 1.2 已启用的工艺路线,不允许操作 + routeService.validateRouteNotEnable(bom.getRouteId()); // 2. 删除 routeProductBomMapper.deleteById(id); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProductServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProductServiceImpl.java index 004f128..f43fc0b 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProductServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProductServiceImpl.java @@ -30,11 +30,16 @@ public class MesProRouteProductServiceImpl implements MesProRouteProductService @Resource @Lazy + private MesProRouteService routeService; + @Resource + @Lazy private MesProRouteProductBomService routeProductBomService; @Override public Long createRouteProduct(MesProRouteProductSaveReqVO createReqVO) { - // 1. 校验产品唯一性(一个产品只能关联一条工艺路线) + // 1.0 已启用的工艺路线,不允许操作 + routeService.validateRouteNotEnable(createReqVO.getRouteId()); + // 1.1 校验产品唯一性(一个产品只能关联一条工艺路线) validateItemUnique(null, createReqVO.getItemId()); // 2. 插入 @@ -45,6 +50,8 @@ public class MesProRouteProductServiceImpl implements MesProRouteProductService @Override public void updateRouteProduct(MesProRouteProductSaveReqVO updateReqVO) { + // 1.0 已启用的工艺路线,不允许操作 + routeService.validateRouteNotEnable(updateReqVO.getRouteId()); // 1.1 校验存在 validateRouteProductExists(updateReqVO.getId()); // 1.2 校验产品唯一性 @@ -58,9 +65,11 @@ public class MesProRouteProductServiceImpl implements MesProRouteProductService @Override @Transactional(rollbackFor = Exception.class) public void deleteRouteProduct(Long id) { - // 1. 校验存在 + // 1.1 校验存在 MesProRouteProductDO routeProduct = routeProductMapper.selectById(id); validateRouteProductExists(routeProduct); + // 1.2 已启用的工艺路线,不允许操作 + routeService.validateRouteNotEnable(routeProduct.getRouteId()); // 2.1 级联删除关联的 BOM routeProductBomService.deleteRouteProductBomByRouteIdAndProductId(routeProduct.getRouteId(), routeProduct.getItemId()); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteService.java index d879232..379809e 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteService.java @@ -53,4 +53,11 @@ public interface MesProRouteService { */ List getRouteListByStatus(Integer status); + /** + * 校验工艺路线未启用(已启用则抛异常) + * + * @param routeId 工艺路线编号 + */ + void validateRouteNotEnable(Long routeId); + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteServiceImpl.java index b0d6576..288bc4e 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteServiceImpl.java @@ -71,7 +71,7 @@ public class MesProRouteServiceImpl implements MesProRouteService { @Override public void updateRouteStatus(Long id, Integer status) { // 1.1 校验存在 - validateRouteExists(id); + MesProRouteDO route = validateRouteExists(id); // 1.2 启用时的校验 if (CommonStatusEnum.ENABLE.getStatus().equals(status)) { validateRouteEnable(id); @@ -84,8 +84,10 @@ public class MesProRouteServiceImpl implements MesProRouteService { @Override @Transactional(rollbackFor = Exception.class) public void deleteRoute(Long id) { - // 1. 校验存在 + // 1.1 校验存在 validateRouteExists(id); + // 1.2 已启用的工艺路线,不允许删除 + validateRouteNotEnable(id); // 2.1 级联删除 routeProcessService.deleteRouteProcessByRouteId(id); @@ -95,10 +97,12 @@ public class MesProRouteServiceImpl implements MesProRouteService { routeMapper.deleteById(id); } - private void validateRouteExists(Long id) { - if (routeMapper.selectById(id) == null) { + private MesProRouteDO validateRouteExists(Long id) { + MesProRouteDO route = routeMapper.selectById(id); + if (route == null) { throw exception(PRO_ROUTE_NOT_EXISTS); } + return route; } private void validateRouteCodeUnique(Long id, String code) { @@ -151,4 +155,12 @@ public class MesProRouteServiceImpl implements MesProRouteService { return routeMapper.selectListByStatus(status); } + @Override + public void validateRouteNotEnable(Long routeId) { + MesProRouteDO route = routeMapper.selectById(routeId); + if (route != null && CommonStatusEnum.ENABLE.getStatus().equals(route.getStatus())) { + throw exception(PRO_ROUTE_IS_ENABLE); + } + } + } -- libgit2 0.21.4