Commit 91455c2d5bfd57e4716c22457d9a18c3903ea9a0

Authored by YunaiV
1 parent 63bccf89

✨ feat(mes): 优化生产任务保存请求和验证逻辑

调整生产任务保存请求的字段为可选,简化编辑时的请求参数。更新任务验证逻辑,确保在更新时只校验存在的字段,提升用户体验和代码可维护性。同时,新增甘特图编辑页面,支持批量保存任务修改。
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/task/vo/MesProTaskSaveReqVO.java
@@ -16,30 +16,24 @@ public class MesProTaskSaveReqVO { @@ -16,30 +16,24 @@ public class MesProTaskSaveReqVO {
16 @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") 16 @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
17 private Long id; 17 private Long id;
18 18
19 - @Schema(description = "生产工单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")  
20 - @NotNull(message = "生产工单不能为空")  
21 - private Long workOrderId; 19 + @Schema(description = "生产工单编号", example = "1")
  20 + private Long workOrderId; // 编辑时,可不传递
22 21
23 - @Schema(description = "工作站编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")  
24 - @NotNull(message = "工作站不能为空")  
25 - private Long workstationId; 22 + @Schema(description = "工作站编号", example = "1")
  23 + private Long workstationId; // 编辑时,可不传递
26 24
27 - @Schema(description = "工艺路线编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")  
28 - @NotNull(message = "工艺路线不能为空")  
29 - private Long routeId; 25 + @Schema(description = "工艺路线编号", example = "1")
  26 + private Long routeId; // 编辑时,可不传递
30 27
31 - @Schema(description = "工序编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")  
32 - @NotNull(message = "工序不能为空")  
33 - private Long processId; 28 + @Schema(description = "工序编号", example = "1")
  29 + private Long processId; // 编辑时,可不传递
34 30
35 - @Schema(description = "产品物料编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")  
36 - @NotNull(message = "产品不能为空")  
37 - private Long itemId; 31 + @Schema(description = "产品物料编号", example = "100")
  32 + private Long itemId; // 编辑时,可不传递
38 33
39 - @Schema(description = "排产数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00")  
40 - @NotNull(message = "排产数量不能为空") 34 + @Schema(description = "排产数量", example = "100.00")
41 @DecimalMin(value = "0", inclusive = false, message = "排产数量必须大于 0") 35 @DecimalMin(value = "0", inclusive = false, message = "排产数量必须大于 0")
42 - private BigDecimal quantity; 36 + private BigDecimal quantity; // 编辑时,可不传递
43 37
44 @Schema(description = "开始生产时间") 38 @Schema(description = "开始生产时间")
45 private LocalDateTime startTime; 39 private LocalDateTime startTime;
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskService.java
@@ -77,8 +77,9 @@ public interface MesProTaskService { @@ -77,8 +77,9 @@ public interface MesProTaskService {
77 * 校验任务是否存在 77 * 校验任务是否存在
78 * 78 *
79 * @param id 编号 79 * @param id 编号
  80 + * @return 生产任务
80 */ 81 */
81 - void validateTaskExists(Long id); 82 + MesProTaskDO validateTaskExists(Long id);
82 83
83 /** 84 /**
84 * 获得生产任务列表 85 * 获得生产任务列表
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java
@@ -78,13 +78,26 @@ public class MesProTaskServiceImpl implements MesProTaskService { @@ -78,13 +78,26 @@ public class MesProTaskServiceImpl implements MesProTaskService {
78 @Override 78 @Override
79 public void updateTask(MesProTaskSaveReqVO updateReqVO) { 79 public void updateTask(MesProTaskSaveReqVO updateReqVO) {
80 // 1.1 校验存在 80 // 1.1 校验存在
81 - validateTaskExists(updateReqVO.getId()); 81 + MesProTaskDO task = validateTaskExists(updateReqVO.getId());
82 // 1.2 校验关联数据存在 82 // 1.2 校验关联数据存在
83 - workOrderService.validateWorkOrderExists(updateReqVO.getWorkOrderId());  
84 - workstationService.validateWorkstationExists(updateReqVO.getWorkstationId());  
85 - routeService.validateRouteExists(updateReqVO.getRouteId());  
86 - processService.validateProcessExists(updateReqVO.getProcessId());  
87 - MesMdItemDO item = itemService.validateItemExists(updateReqVO.getItemId()); 83 + if (updateReqVO.getWorkOrderId() != null) {
  84 + workOrderService.validateWorkOrderExists(updateReqVO.getWorkOrderId());
  85 + }
  86 + if (updateReqVO.getWorkstationId() != null) {
  87 + workstationService.validateWorkstationExists(updateReqVO.getWorkstationId());
  88 + }
  89 + if (updateReqVO.getRouteId() != null) {
  90 + routeService.validateRouteExists(updateReqVO.getRouteId());
  91 + }
  92 + if (updateReqVO.getProcessId() != null) {
  93 + processService.validateProcessExists(updateReqVO.getProcessId());
  94 + }
  95 + MesMdItemDO item;
  96 + if (updateReqVO.getItemId() != null) {
  97 + item = itemService.validateItemExists(updateReqVO.getItemId());
  98 + } else {
  99 + item = itemService.validateItemExists(task.getItemId());
  100 + }
88 101
89 // 2. 更新 102 // 2. 更新
90 MesProTaskDO updateObj = BeanUtils.toBean(updateReqVO, MesProTaskDO.class) 103 MesProTaskDO updateObj = BeanUtils.toBean(updateReqVO, MesProTaskDO.class)
@@ -124,10 +137,12 @@ public class MesProTaskServiceImpl implements MesProTaskService { @@ -124,10 +137,12 @@ public class MesProTaskServiceImpl implements MesProTaskService {
124 } 137 }
125 138
126 @Override 139 @Override
127 - public void validateTaskExists(Long id) {  
128 - if (taskMapper.selectById(id) == null) { 140 + public MesProTaskDO validateTaskExists(Long id) {
  141 + MesProTaskDO task = taskMapper.selectById(id);
  142 + if (task == null) {
129 throw exception(PRO_TASK_NOT_EXISTS); 143 throw exception(PRO_TASK_NOT_EXISTS);
130 } 144 }
  145 + return task;
131 } 146 }
132 147
133 @Override 148 @Override