From 728eb76bc3321eef632c43d8a2d31ff60dcc15cd Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 15 Mar 2026 22:58:16 +0800 Subject: [PATCH] ✨ feat(mes): 添加生产任务编码字段,优化任务创建和更新逻辑 --- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/task/vo/MesProTaskSaveReqVO.java | 30 +++++------------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java | 3 ++- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteService.java | 8 ++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteServiceImpl.java | 3 ++- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java | 51 +++++++++++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 66 insertions(+), 29 deletions(-) diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/task/vo/MesProTaskSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/task/vo/MesProTaskSaveReqVO.java index a46402a..77fa325 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/task/vo/MesProTaskSaveReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/task/vo/MesProTaskSaveReqVO.java @@ -1,7 +1,8 @@ package cn.iocoder.yudao.module.mes.controller.admin.pro.task.vo; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -15,14 +16,6 @@ public class MesProTaskSaveReqVO { @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") private Long id; - @Schema(description = "任务编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "PT202503150001") - @NotEmpty(message = "任务编码不能为空") - private String code; - - @Schema(description = "任务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "注塑任务") - @NotEmpty(message = "任务名称不能为空") - private String name; - @Schema(description = "生产工单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @NotNull(message = "生产工单不能为空") private Long workOrderId; @@ -45,27 +38,14 @@ public class MesProTaskSaveReqVO { @Schema(description = "排产数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") @NotNull(message = "排产数量不能为空") + @DecimalMin(value = "0", inclusive = false, message = "排产数量必须大于 0") private BigDecimal quantity; - @Schema(description = "已生产数量", example = "0") - private BigDecimal producedQuantity; - - @Schema(description = "合格品数量", example = "0") - private BigDecimal qualifyQuantity; - - @Schema(description = "不良品数量", example = "0") - private BigDecimal unqualifyQuantity; - - @Schema(description = "调整数量", example = "0") - private BigDecimal changedQuantity; - - @Schema(description = "客户编号", example = "300") - private Long clientId; - @Schema(description = "开始生产时间") private LocalDateTime startTime; @Schema(description = "生产时长(工作日)", example = "3") + @Min(value = 1, message = "生产时长必须大于 0") private Integer duration; @Schema(description = "结束生产时间") @@ -77,4 +57,4 @@ public class MesProTaskSaveReqVO { @Schema(description = "备注", example = "备注") private String remark; - } +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java index c1bb864..b24723f 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java @@ -14,7 +14,8 @@ public enum MesMdAutoCodeRuleCodeEnum { SN_CODE("SN_CODE", "SN 码"), PACKAGE_CODE("PACKAGE_CODE", "装箱单编码"), - BATCH_CODE("BATCH_CODE", "批次编码"); + BATCH_CODE("BATCH_CODE", "批次编码"), + TASK_CODE("TASK_CODE", "生产任务编码"); /** * 规则代码 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 973c1a5..abdf44b 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 @@ -65,6 +65,14 @@ public interface MesProRouteService { void validateRouteNotEnable(Long routeId); /** + * 校验工艺路线存在 + * + * @param id 工艺路线编号 + * @return 工艺路线 + */ + MesProRouteDO validateRouteExists(Long id); + + /** * 获得工艺路线列表 * * @param ids 编号数组 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 e55b1c2..1764c50 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 @@ -99,7 +99,8 @@ public class MesProRouteServiceImpl implements MesProRouteService { routeMapper.deleteById(id); } - private MesProRouteDO validateRouteExists(Long id) { + @Override + public MesProRouteDO validateRouteExists(Long id) { MesProRouteDO route = routeMapper.selectById(id); if (route == null) { throw exception(PRO_ROUTE_NOT_EXISTS); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java index 670fd30..afc461f 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java @@ -5,10 +5,19 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.controller.admin.pro.task.vo.MesProTaskPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.pro.task.vo.MesProTaskSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO; import cn.iocoder.yudao.module.mes.dal.mysql.pro.task.MesProTaskMapper; +import cn.iocoder.yudao.module.mes.enums.md.autocode.MesMdAutoCodeRuleCodeEnum; import cn.iocoder.yudao.module.mes.enums.pro.MesProTaskStatusEnum; +import cn.iocoder.yudao.module.mes.service.md.autocode.MesMdAutoCodeRecordService; +import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; +import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; +import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessService; +import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteService; +import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; import jakarta.annotation.Resource; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -32,23 +41,61 @@ public class MesProTaskServiceImpl implements MesProTaskService { @Resource private MesProTaskMapper taskMapper; + @Resource + @Lazy + private MesProWorkOrderService workOrderService; + @Resource + private MesMdWorkstationService workstationService; + @Resource + private MesProProcessService processService; + @Resource + private MesMdItemService itemService; + @Resource + private MesProRouteService routeService; + @Resource + private MesMdAutoCodeRecordService autoCodeRecordService; + @Override public Long createTask(MesProTaskSaveReqVO createReqVO) { - MesProTaskDO task = BeanUtils.toBean(createReqVO, MesProTaskDO.class); + // 1. 校验关联数据存在 + workOrderService.validateWorkOrderExists(createReqVO.getWorkOrderId()); + workstationService.validateWorkstationExists(createReqVO.getWorkstationId()); + routeService.validateRouteExists(createReqVO.getRouteId()); + processService.validateProcessExists(createReqVO.getProcessId()); + MesMdItemDO item = itemService.validateItemExists(createReqVO.getItemId()); + + // 2.1 构建任务 DO + MesProTaskDO task = BeanUtils.toBean(createReqVO, MesProTaskDO.class) + .setName(item.getName() + "【" + createReqVO.getQuantity() + "】") + .setCode(autoCodeRecordService.generateAutoCode(MesMdAutoCodeRuleCodeEnum.TASK_CODE.getCode())) + .setStatus(MesProTaskStatusEnum.PREPARE.getStatus()); + // 2.2 插入 taskMapper.insert(task); return task.getId(); } @Override public void updateTask(MesProTaskSaveReqVO updateReqVO) { + // 1.1 校验存在 validateTaskExists(updateReqVO.getId()); - MesProTaskDO updateObj = BeanUtils.toBean(updateReqVO, MesProTaskDO.class); + // 1.2 校验关联数据存在 + workOrderService.validateWorkOrderExists(updateReqVO.getWorkOrderId()); + workstationService.validateWorkstationExists(updateReqVO.getWorkstationId()); + routeService.validateRouteExists(updateReqVO.getRouteId()); + processService.validateProcessExists(updateReqVO.getProcessId()); + MesMdItemDO item = itemService.validateItemExists(updateReqVO.getItemId()); + + // 2. 更新 + MesProTaskDO updateObj = BeanUtils.toBean(updateReqVO, MesProTaskDO.class) + .setName(item.getName() + "【" + updateReqVO.getQuantity() + "】"); taskMapper.updateById(updateObj); } @Override public void deleteTask(Long id) { + // 1. 校验存在 validateTaskExists(id); + // 2. 删除 taskMapper.deleteById(id); } -- libgit2 0.21.4