Commit c2d93bafba0d1f63ba80e9e536c65ac846c4b034

Authored by YunaiV
1 parent 391d2531

feat(mes): 添加设备保养记录提交功能,新增状态枚举及相关校验

Showing 18 changed files with 239 additions and 52 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dv/maintenrecord/MesDvMaintenRecordController.java
... ... @@ -113,7 +113,14 @@ public class MesDvMaintenRecordController {
113 113 buildMaintenRecordRespVOList(list));
114 114 }
115 115  
116   - // TODO @AI:submitMaintenRecord 缺少;
  116 + @PutMapping("/submit")
  117 + @Operation(summary = "提交设备保养记录(草稿→已提交)")
  118 + @Parameter(name = "id", description = "编号", required = true)
  119 + @PreAuthorize("@ss.hasPermission('mes:dv-mainten-record:update')")
  120 + public CommonResult<Boolean> submitMaintenRecord(@RequestParam("id") Long id) {
  121 + maintenRecordService.submitMaintenRecord(id);
  122 + return success(true);
  123 + }
117 124  
118 125 // ==================== 拼接 VO ====================
119 126  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dv/maintenrecord/vo/MesDvMaintenRecordSaveReqVO.java
... ... @@ -27,10 +27,6 @@ public class MesDvMaintenRecordSaveReqVO {
27 27 @Schema(description = "用户编号", example = "1")
28 28 private Long userId;
29 29  
30   - // TODO @AI:这个字段,不允许提交
31   - @Schema(description = "状态", example = "10")
32   - private Integer status;
33   -
34 30 @Schema(description = "备注", example = "测试备注")
35 31 private String remark;
36 32  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dv/repair/MesDvRepairController.java
... ... @@ -32,10 +32,12 @@ import java.util.Collections;
32 32 import java.util.List;
33 33 import java.util.Map;
34 34 import java.util.Set;
  35 +import java.util.stream.Stream;
35 36  
36 37 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
37 38 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
38 39 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
  40 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSetByFlatMap;
39 41  
40 42 @Tag(name = "管理后台 - MES 维修工单")
41 43 @RestController
... ... @@ -119,10 +121,8 @@ public class MesDvRepairController {
119 121 Map<Long, MesDvMachineryDO> machineryMap = machineryService.getMachineryMap(
120 122 convertSet(list, MesDvRepairDO::getMachineryId));
121 123 // 1.2 收集所有用户 ID(维修人 + 验收人)
122   - // TODO @AI:CollUtils 里面,有多字段的处理,你研究下;
123   - Set<Long> userIds = convertSet(list, MesDvRepairDO::getAcceptedUserId);
124   - userIds.addAll(convertSet(list, MesDvRepairDO::getConfirmUserId));
125   - Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds);
  124 + Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertSetByFlatMap(list,
  125 + repair -> Stream.of(repair.getAcceptedUserId(), repair.getConfirmUserId())));
126 126 // 2. 拼接 VO
127 127 return BeanUtils.toBean(list, MesDvRepairRespVO.class, vo -> {
128 128 MapUtils.findAndThen(machineryMap, vo.getMachineryId(), machinery -> vo
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dv/repair/vo/MesDvRepairPageReqVO.java
... ... @@ -23,6 +23,9 @@ public class MesDvRepairPageReqVO extends PageParam {
23 23 @Schema(description = "维修工单名称", example = "注塑机维修")
24 24 private String name;
25 25  
  26 + @Schema(description = "维修结果", example = "1")
  27 + private Integer result;
  28 +
26 29 @Schema(description = "状态", example = "10")
27 30 private Integer status;
28 31  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dv/repair/vo/MesDvRepairSaveReqVO.java
... ... @@ -52,10 +52,6 @@ public class MesDvRepairSaveReqVO {
52 52 @Schema(description = "来源单据编码", example = "DOC001")
53 53 private String sourceDocCode;
54 54  
55   - // TODO @AI:这个字段,不允许提交
56   - @Schema(description = "状态", example = "10")
57   - private Integer status;
58   -
59 55 @Schema(description = "备注", example = "测试备注")
60 56 private String remark;
61 57  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/dv/maintenrecord/MesDvMaintenRecordDO.java
... ... @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.mes.dal.dataobject.dv.maintenrecord;
3 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
4 4 import cn.iocoder.yudao.module.mes.dal.dataobject.dv.checkplan.MesDvCheckPlanDO;
5 5 import cn.iocoder.yudao.module.mes.dal.dataobject.dv.machinery.MesDvMachineryDO;
  6 +import cn.iocoder.yudao.module.mes.enums.dv.MesDvMaintenRecordStatusEnum;
6 7 import com.baomidou.mybatisplus.annotation.KeySequence;
7 8 import com.baomidou.mybatisplus.annotation.TableId;
8 9 import com.baomidou.mybatisplus.annotation.TableName;
... ... @@ -52,11 +53,10 @@ public class MesDvMaintenRecordDO extends BaseDO {
52 53 * 关联 AdminUserDO#getId()
53 54 */
54 55 private Long userId;
55   - // TODO @AI:搞个枚举类,关联下;
56   - // TODO @AI:mes_mainten_record_status,需要在 dict contants 美剧侠,然后 @关联下;
57 56 /**
58 57 * 状态
59 58 *
  59 + * 枚举 {@link MesDvMaintenRecordStatusEnum}
60 60 * 字典类型 mes_mainten_record_status
61 61 */
62 62 private Integer status;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/dv/maintenrecord/MesDvMaintenRecordLineDO.java
... ... @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.mes.dal.dataobject.dv.maintenrecord;
2 2  
3 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
4 4 import cn.iocoder.yudao.module.mes.dal.dataobject.dv.subject.MesDvSubjectDO;
  5 +import cn.iocoder.yudao.module.mes.enums.dv.MesDvMaintenStatusEnum;
5 6 import com.baomidou.mybatisplus.annotation.KeySequence;
6 7 import com.baomidou.mybatisplus.annotation.TableId;
7 8 import com.baomidou.mybatisplus.annotation.TableName;
... ... @@ -39,11 +40,10 @@ public class MesDvMaintenRecordLineDO extends BaseDO {
39 40 * 关联 {@link MesDvSubjectDO#getId()}
40 41 */
41 42 private Long subjectId;
42   - // TODO @AI:搞个枚举类,关联下;
43   - // TODO @AI:mes_mainten_status,需要在 dict contants 美剧侠,然后 @关联下;
44 43 /**
45 44 * 保养结果
46 45 *
  46 + * 枚举 {@link MesDvMaintenStatusEnum}
47 47 * 字典类型 mes_mainten_status
48 48 */
49 49 private Integer status;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/dv/repair/MesDvRepairDO.java
... ... @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.mes.dal.dataobject.dv.repair;
2 2  
3 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
4 4 import cn.iocoder.yudao.module.mes.dal.dataobject.dv.machinery.MesDvMachineryDO;
  5 +import cn.iocoder.yudao.module.mes.enums.dv.MesDvRepairResultEnum;
  6 +import cn.iocoder.yudao.module.mes.enums.dv.MesDvRepairStatusEnum;
5 7 import com.baomidou.mybatisplus.annotation.KeySequence;
6 8 import com.baomidou.mybatisplus.annotation.TableId;
7 9 import com.baomidou.mybatisplus.annotation.TableName;
... ... @@ -55,11 +57,10 @@ public class MesDvRepairDO extends BaseDO {
55 57 * 验收日期
56 58 */
57 59 private LocalDateTime confirmDate;
58   - // TODO @AI:枚举类;
59   - // TODO @AI:字典,需要在 dict constants;
60 60 /**
61 61 * 维修结果
62 62 *
  63 + * 枚举 {@link MesDvRepairResultEnum}
63 64 * 字典类型 mes_dv_repair_result
64 65 */
65 66 private Integer result;
... ... @@ -88,11 +89,10 @@ public class MesDvRepairDO extends BaseDO {
88 89 * 来源单据编码
89 90 */
90 91 private String sourceDocCode;
91   - // TODO @AI:枚举类;
92   - // TODO @AI:字典,需要在 dict constants;
93 92 /**
94 93 * 状态
95 94 *
  95 + * 枚举 {@link MesDvRepairStatusEnum}
96 96 * 字典类型 mes_dv_repair_status
97 97 */
98 98 private Integer status;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/dv/repair/MesDvRepairMapper.java
... ... @@ -19,6 +19,7 @@ public interface MesDvRepairMapper extends BaseMapperX&lt;MesDvRepairDO&gt; {
19 19 return selectPage(reqVO, new LambdaQueryWrapperX<MesDvRepairDO>()
20 20 .likeIfPresent(MesDvRepairDO::getCode, reqVO.getCode())
21 21 .likeIfPresent(MesDvRepairDO::getName, reqVO.getName())
  22 + .eqIfPresent(MesDvRepairDO::getResult, reqVO.getResult())
22 23 .eqIfPresent(MesDvRepairDO::getStatus, reqVO.getStatus())
23 24 .betweenIfPresent(MesDvRepairDO::getRequireDate, reqVO.getRequireDate())
24 25 .orderByDesc(MesDvRepairDO::getId));
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
... ... @@ -137,11 +137,14 @@ public interface ErrorCodeConstants {
137 137  
138 138 // ========== MES 设备管理-维修工单(1-040-303-000) ==========
139 139 ErrorCode DV_REPAIR_NOT_EXISTS = new ErrorCode(1_040_303_000, "维修工单不存在");
  140 + ErrorCode DV_REPAIR_NOT_DRAFT = new ErrorCode(1_040_303_001, "维修工单已确认,不允许修改或删除");
140 141 // ========== MES 设备管理-维修工单行(1-040-303-100) ==========
141 142 ErrorCode DV_REPAIR_LINE_NOT_EXISTS = new ErrorCode(1_040_303_100, "维修工单行不存在");
142 143  
143 144 // ========== MES 设备管理-保养记录(1-040-305-000) ==========
144 145 ErrorCode MAINTEN_RECORD_NOT_EXISTS = new ErrorCode(1_040_305_000, "设备保养记录不存在");
  146 + ErrorCode MAINTEN_RECORD_NOT_DRAFT = new ErrorCode(1_040_305_001, "设备保养记录已提交,不允许修改或删除");
  147 + ErrorCode MAINTEN_RECORD_NO_LINE = new ErrorCode(1_040_305_002, "提交保养记录时,至少需要一条保养项目");
145 148 // ========== MES 设备管理-保养记录明细(1-040-305-100) ==========
146 149 ErrorCode MAINTEN_RECORD_LINE_NOT_EXISTS = new ErrorCode(1_040_305_100, "设备保养记录明细不存在");
147 150  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/dv/MesDvMaintenStatusEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.enums.dv;
  2 +
  3 +import cn.iocoder.yudao.framework.common.core.ArrayValuable;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Getter;
  6 +
  7 +import java.util.Arrays;
  8 +
  9 +/**
  10 + * MES 设备保养明细结果枚举
  11 + *
  12 + * @author 芋道源码
  13 + */
  14 +@Getter
  15 +@AllArgsConstructor
  16 +public enum MesDvMaintenStatusEnum implements ArrayValuable<Integer> {
  17 +
  18 + NORMAL(1, "正常"),
  19 + ABNORMAL(2, "异常");
  20 +
  21 + public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesDvMaintenStatusEnum::getStatus).toArray(Integer[]::new);
  22 +
  23 + /**
  24 + * 状态值
  25 + */
  26 + private final Integer status;
  27 + /**
  28 + * 状态名
  29 + */
  30 + private final String name;
  31 +
  32 + @Override
  33 + public Integer[] array() {
  34 + return ARRAYS;
  35 + }
  36 +
  37 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/dv/MesDvRepairResultEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.enums.dv;
  2 +
  3 +import cn.iocoder.yudao.framework.common.core.ArrayValuable;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Getter;
  6 +
  7 +import java.util.Arrays;
  8 +
  9 +/**
  10 + * MES 维修结果枚举
  11 + *
  12 + * @author 芋道源码
  13 + */
  14 +@Getter
  15 +@AllArgsConstructor
  16 +public enum MesDvRepairResultEnum implements ArrayValuable<Integer> {
  17 +
  18 + PASS(1, "通过"),
  19 + FAIL(2, "不通过");
  20 +
  21 + public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesDvRepairResultEnum::getResult).toArray(Integer[]::new);
  22 +
  23 + /**
  24 + * 结果值
  25 + */
  26 + private final Integer result;
  27 + /**
  28 + * 结果名
  29 + */
  30 + private final String name;
  31 +
  32 + @Override
  33 + public Integer[] array() {
  34 + return ARRAYS;
  35 + }
  36 +
  37 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/dv/MesDvRepairStatusEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.enums.dv;
  2 +
  3 +import cn.iocoder.yudao.framework.common.core.ArrayValuable;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Getter;
  6 +
  7 +import java.util.Arrays;
  8 +
  9 +/**
  10 + * MES 维修工单状态枚举
  11 + *
  12 + * @author 芋道源码
  13 + */
  14 +@Getter
  15 +@AllArgsConstructor
  16 +public enum MesDvRepairStatusEnum implements ArrayValuable<Integer> {
  17 +
  18 + DRAFT(10, "草稿"),
  19 + CONFIRMED(20, "已确认");
  20 +
  21 + public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesDvRepairStatusEnum::getStatus).toArray(Integer[]::new);
  22 +
  23 + /**
  24 + * 状态值
  25 + */
  26 + private final Integer status;
  27 + /**
  28 + * 状态名
  29 + */
  30 + private final String name;
  31 +
  32 + @Override
  33 + public Integer[] array() {
  34 + return ARRAYS;
  35 + }
  36 +
  37 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/maintenrecord/MesDvMaintenRecordLineServiceImpl.java
... ... @@ -29,7 +29,7 @@ public class MesDvMaintenRecordLineServiceImpl implements MesDvMaintenRecordLine
29 29  
30 30 @Resource
31 31 @Lazy
32   - private MesDvMaintenRecordService maintenRecordService;
  32 + private MesDvMaintenRecordServiceImpl maintenRecordService;
33 33 @Resource
34 34 private MesDvSubjectService subjectService;
35 35  
... ... @@ -37,7 +37,6 @@ public class MesDvMaintenRecordLineServiceImpl implements MesDvMaintenRecordLine
37 37 public Long createMaintenRecordLine(MesDvMaintenRecordLineSaveReqVO createReqVO) {
38 38 // 1. 校验关联数据
39 39 validateMaintenRecordLineRelation(createReqVO);
40   - // TODO @AI:已提交时,不允许编辑(最好对方提供一个通用方法)
41 40  
42 41 // 2. 插入
43 42 MesDvMaintenRecordLineDO maintenRecordLine = BeanUtils.toBean(createReqVO, MesDvMaintenRecordLineDO.class);
... ... @@ -59,25 +58,28 @@ public class MesDvMaintenRecordLineServiceImpl implements MesDvMaintenRecordLine
59 58  
60 59 @Override
61 60 public void deleteMaintenRecordLine(Long id) {
62   - // 1. 校验存在
63   - validateMaintenRecordLineExists(id);
64   - // TODO @AI:已提交时,不允许删除;(最好对方提供一个通用方法)
  61 + // 1.1 校验存在
  62 + MesDvMaintenRecordLineDO line = validateMaintenRecordLineExists(id);
  63 + // 1.2 校验保养记录为草稿状态
  64 + maintenRecordService.validateMaintenRecordDraft(line.getRecordId());
65 65  
66 66 // 2. 删除
67 67 maintenRecordLineMapper.deleteById(id);
68 68 }
69 69  
70 70 private void validateMaintenRecordLineRelation(MesDvMaintenRecordLineSaveReqVO reqVO) {
71   - // 校验设备保养记录是否存在
72   - maintenRecordService.validateMaintenRecordExists(reqVO.getRecordId());
  71 + // 校验保养记录为草稿状态
  72 + maintenRecordService.validateMaintenRecordDraft(reqVO.getRecordId());
73 73 // 校验保养项目是否存在
74 74 subjectService.validateSubjectExists(reqVO.getSubjectId());
75 75 }
76 76  
77   - private void validateMaintenRecordLineExists(Long id) {
  77 + private MesDvMaintenRecordLineDO validateMaintenRecordLineExists(Long id) {
  78 + MesDvMaintenRecordLineDO maintenRecordLine = maintenRecordLineMapper.selectById(id);
78 79 if (maintenRecordLineMapper.selectById(id) == null) {
79 80 throw exception(MAINTEN_RECORD_LINE_NOT_EXISTS);
80 81 }
  82 + return maintenRecordLine;
81 83 }
82 84  
83 85 @Override
... ... @@ -90,4 +92,4 @@ public class MesDvMaintenRecordLineServiceImpl implements MesDvMaintenRecordLine
90 92 return maintenRecordLineMapper.selectPage(pageReqVO);
91 93 }
92 94  
93   -}
94 95 \ No newline at end of file
  96 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/maintenrecord/MesDvMaintenRecordService.java
... ... @@ -30,6 +30,13 @@ public interface MesDvMaintenRecordService {
30 30 void updateMaintenRecord(@Valid MesDvMaintenRecordSaveReqVO updateReqVO);
31 31  
32 32 /**
  33 + * 提交设备保养记录(草稿→已提交)
  34 + *
  35 + * @param id 编号
  36 + */
  37 + void submitMaintenRecord(Long id);
  38 +
  39 + /**
33 40 * 删除设备保养记录
34 41 *
35 42 * @param id 编号
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/maintenrecord/MesDvMaintenRecordServiceImpl.java
1 1 package cn.iocoder.yudao.module.mes.service.dv.maintenrecord;
2 2  
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.util.ObjUtil;
3 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
5 7 import cn.iocoder.yudao.module.mes.controller.admin.dv.maintenrecord.vo.MesDvMaintenRecordPageReqVO;
6 8 import cn.iocoder.yudao.module.mes.controller.admin.dv.maintenrecord.vo.MesDvMaintenRecordSaveReqVO;
7 9 import cn.iocoder.yudao.module.mes.dal.dataobject.dv.maintenrecord.MesDvMaintenRecordDO;
  10 +import cn.iocoder.yudao.module.mes.dal.dataobject.dv.maintenrecord.MesDvMaintenRecordLineDO;
8 11 import cn.iocoder.yudao.module.mes.dal.mysql.dv.maintenrecord.MesDvMaintenRecordLineMapper;
9 12 import cn.iocoder.yudao.module.mes.dal.mysql.dv.maintenrecord.MesDvMaintenRecordMapper;
  13 +import cn.iocoder.yudao.module.mes.enums.dv.MesDvMaintenRecordStatusEnum;
10 14 import cn.iocoder.yudao.module.mes.service.dv.checkplan.MesDvCheckPlanService;
11 15 import cn.iocoder.yudao.module.mes.service.dv.machinery.MesDvMachineryService;
12 16 import jakarta.annotation.Resource;
... ... @@ -14,6 +18,8 @@ import org.springframework.stereotype.Service;
14 18 import org.springframework.transaction.annotation.Transactional;
15 19 import org.springframework.validation.annotation.Validated;
16 20  
  21 +import java.util.List;
  22 +
17 23 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
18 24 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
19 25  
... ... @@ -42,31 +48,45 @@ public class MesDvMaintenRecordServiceImpl implements MesDvMaintenRecordService
42 48  
43 49 // 2. 插入
44 50 MesDvMaintenRecordDO maintenRecord = BeanUtils.toBean(createReqVO, MesDvMaintenRecordDO.class);
45   - // TODO @AI:设置下默认状态;
  51 + maintenRecord.setStatus(MesDvMaintenRecordStatusEnum.PREPARE.getStatus());
46 52 maintenRecordMapper.insert(maintenRecord);
47 53 return maintenRecord.getId();
48 54 }
49 55  
50 56 @Override
51 57 public void updateMaintenRecord(MesDvMaintenRecordSaveReqVO updateReqVO) {
52   - // 1.1 校验存在
53   - validateMaintenRecordExists(updateReqVO.getId());
  58 + // 1.1 校验存在,且状态为草稿
  59 + validateMaintenRecordDraft(updateReqVO.getId());
54 60 // 1.2 校验关联数据
55 61 validateMaintenRecordRelation(updateReqVO);
56   - // TODO @AI:已提交时,不允许编辑
57 62  
58 63 // 2. 更新
59 64 MesDvMaintenRecordDO updateObj = BeanUtils.toBean(updateReqVO, MesDvMaintenRecordDO.class);
60   - // TODO 设置为空,避免更新;
  65 + maintenRecordMapper.updateById(updateObj);
  66 + }
  67 +
  68 + @Override
  69 + public void submitMaintenRecord(Long id) {
  70 + // 1.1 校验状态为草稿
  71 + validateMaintenRecordDraft(id);
  72 + // 1.2 校验至少有一条明细
  73 + List<MesDvMaintenRecordLineDO> lines = maintenRecordLineMapper.selectListByRecordId(id);
  74 + if (CollUtil.isEmpty(lines)) {
  75 + throw exception(MAINTEN_RECORD_NO_LINE);
  76 + }
  77 +
  78 + // 2. 状态改为已提交
  79 + MesDvMaintenRecordDO updateObj = new MesDvMaintenRecordDO();
  80 + updateObj.setId(id);
  81 + updateObj.setStatus(MesDvMaintenRecordStatusEnum.SUBMITTED.getStatus());
61 82 maintenRecordMapper.updateById(updateObj);
62 83 }
63 84  
64 85 @Override
65 86 @Transactional(rollbackFor = Exception.class)
66 87 public void deleteMaintenRecord(Long id) {
67   - // 校验存在
68   - validateMaintenRecordExists(id);
69   - // TODO @AI:已提交时,不允许删除
  88 + // 校验存在,且状态为草稿
  89 + validateMaintenRecordDraft(id);
70 90  
71 91 // 删除
72 92 maintenRecordMapper.deleteById(id);
... ... @@ -90,6 +110,23 @@ public class MesDvMaintenRecordServiceImpl implements MesDvMaintenRecordService
90 110 }
91 111 }
92 112  
  113 + /**
  114 + * 校验设备保养记录是否为草稿状态
  115 + *
  116 + * @param id 编号
  117 + * @return 保养记录
  118 + */
  119 + public MesDvMaintenRecordDO validateMaintenRecordDraft(Long id) {
  120 + MesDvMaintenRecordDO record = maintenRecordMapper.selectById(id);
  121 + if (record == null) {
  122 + throw exception(MAINTEN_RECORD_NOT_EXISTS);
  123 + }
  124 + if (ObjUtil.notEqual(MesDvMaintenRecordStatusEnum.PREPARE.getStatus(), record.getStatus())) {
  125 + throw exception(MAINTEN_RECORD_NOT_DRAFT);
  126 + }
  127 + return record;
  128 + }
  129 +
93 130 @Override
94 131 public MesDvMaintenRecordDO getMaintenRecord(Long id) {
95 132 return maintenRecordMapper.selectById(id);
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/repair/MesDvRepairLineServiceImpl.java
... ... @@ -29,15 +29,16 @@ public class MesDvRepairLineServiceImpl implements MesDvRepairLineService {
29 29  
30 30 @Resource
31 31 @Lazy
32   - private MesDvRepairService repairService;
  32 + private MesDvRepairServiceImpl repairService;
33 33 @Resource
34 34 private MesDvSubjectService subjectService;
35 35  
36 36 @Override
37 37 public Long createRepairLine(MesDvRepairLineSaveReqVO createReqVO) {
38   - // 1. 校验关联数据
  38 + // 1.1 校验关联数据
39 39 validateRepairLineRelation(createReqVO);
40   - // TODO @AI:关联数据的状态的校验(最好对方提供的方法)
  40 + // 1.2 校验维修工单为草稿状态
  41 + repairService.validateRepairDraft(createReqVO.getRepairId());
41 42  
42 43 // 2. 插入
43 44 MesDvRepairLineDO repairLine = BeanUtils.toBean(createReqVO, MesDvRepairLineDO.class);
... ... @@ -51,7 +52,8 @@ public class MesDvRepairLineServiceImpl implements MesDvRepairLineService {
51 52 validateRepairLineExists(updateReqVO.getId());
52 53 // 1.2 校验关联数据
53 54 validateRepairLineRelation(updateReqVO);
54   - // TODO @AI:关联数据的状态的校验(最好对方提供的方法)
  55 + // 1.3 校验维修工单为草稿状态
  56 + repairService.validateRepairDraft(updateReqVO.getRepairId());
55 57  
56 58 // 2. 更新
57 59 MesDvRepairLineDO updateObj = BeanUtils.toBean(updateReqVO, MesDvRepairLineDO.class);
... ... @@ -60,11 +62,15 @@ public class MesDvRepairLineServiceImpl implements MesDvRepairLineService {
60 62  
61 63 @Override
62 64 public void deleteRepairLine(Long id) {
63   - // 校验存在
64   - validateRepairLineExists(id);
65   - // TODO @AI:关联数据的状态的校验(最好对方提供的方法)
  65 + // 1.1 校验存在
  66 + MesDvRepairLineDO line = repairLineMapper.selectById(id);
  67 + if (line == null) {
  68 + throw exception(DV_REPAIR_LINE_NOT_EXISTS);
  69 + }
  70 + // 1.2 校验维修工单为草稿状态
  71 + repairService.validateRepairDraft(line.getRepairId());
66 72  
67   - // 删除
  73 + // 2. 删除
68 74 repairLineMapper.deleteById(id);
69 75 }
70 76  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/repair/MesDvRepairServiceImpl.java
1 1 package cn.iocoder.yudao.module.mes.service.dv.repair;
2 2  
  3 +import cn.hutool.core.util.ObjUtil;
3 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
5 6 import cn.iocoder.yudao.module.mes.controller.admin.dv.repair.vo.MesDvRepairPageReqVO;
... ... @@ -7,6 +8,7 @@ import cn.iocoder.yudao.module.mes.controller.admin.dv.repair.vo.MesDvRepairSave
7 8 import cn.iocoder.yudao.module.mes.dal.dataobject.dv.repair.MesDvRepairDO;
8 9 import cn.iocoder.yudao.module.mes.dal.mysql.dv.repair.MesDvRepairLineMapper;
9 10 import cn.iocoder.yudao.module.mes.dal.mysql.dv.repair.MesDvRepairMapper;
  11 +import cn.iocoder.yudao.module.mes.enums.dv.MesDvRepairStatusEnum;
10 12 import cn.iocoder.yudao.module.mes.service.dv.machinery.MesDvMachineryService;
11 13 import jakarta.annotation.Resource;
12 14 import org.springframework.stereotype.Service;
... ... @@ -39,29 +41,28 @@ public class MesDvRepairServiceImpl implements MesDvRepairService {
39 41  
40 42 // 2. 插入
41 43 MesDvRepairDO repair = BeanUtils.toBean(createReqVO, MesDvRepairDO.class);
42   - // TODO @AI:status
  44 + repair.setStatus(MesDvRepairStatusEnum.DRAFT.getStatus());
43 45 repairMapper.insert(repair);
44 46 return repair.getId();
45 47 }
46 48  
47 49 @Override
48 50 public void updateRepair(MesDvRepairSaveReqVO updateReqVO) {
49   - // 1.1 校验存在
50   - validateRepairExists(updateReqVO.getId());
  51 + // 1.1 校验存在,且状态为草稿
  52 + validateRepairDraft(updateReqVO.getId());
51 53 // 1.2 校验关联数据
52 54 validateRepairRelation(updateReqVO);
53 55  
54 56 // 2. 更新
55 57 MesDvRepairDO updateObj = BeanUtils.toBean(updateReqVO, MesDvRepairDO.class);
56   - // TODO @AI:status
57 58 repairMapper.updateById(updateObj);
58 59 }
59 60  
60 61 @Override
61 62 @Transactional(rollbackFor = Exception.class)
62 63 public void deleteRepair(Long id) {
63   - // 校验存在
64   - validateRepairExists(id);
  64 + // 校验存在,且状态为草稿
  65 + validateRepairDraft(id);
65 66  
66 67 // 删除
67 68 repairMapper.deleteById(id);
... ... @@ -81,6 +82,23 @@ public class MesDvRepairServiceImpl implements MesDvRepairService {
81 82 }
82 83 }
83 84  
  85 + /**
  86 + * 校验维修工单是否为草稿状态
  87 + *
  88 + * @param id 编号
  89 + * @return 维修工单
  90 + */
  91 + public MesDvRepairDO validateRepairDraft(Long id) {
  92 + MesDvRepairDO repair = repairMapper.selectById(id);
  93 + if (repair == null) {
  94 + throw exception(DV_REPAIR_NOT_EXISTS);
  95 + }
  96 + if (ObjUtil.notEqual(MesDvRepairStatusEnum.DRAFT.getStatus(), repair.getStatus())) {
  97 + throw exception(DV_REPAIR_NOT_DRAFT);
  98 + }
  99 + return repair;
  100 + }
  101 +
84 102 @Override
85 103 public MesDvRepairDO getRepair(Long id) {
86 104 return repairMapper.selectById(id);
... ...