Commit b92c8e1a18a93d294dcf46db17cc6baea78dc8bf

Authored by YunaiV
1 parent a347943b

feat(mes): 重构安灯相关组件,优化导入路径,增加注释以提升可读性

yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/andon/MesProAndonRecordController.java
@@ -34,10 +34,12 @@ import org.springframework.web.bind.annotation.*; @@ -34,10 +34,12 @@ import org.springframework.web.bind.annotation.*;
34 34
35 import java.io.IOException; 35 import java.io.IOException;
36 import java.util.*; 36 import java.util.*;
  37 +import java.util.stream.Stream;
37 38
38 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; 39 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
39 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 40 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
40 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; 41 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
  42 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSetByFlatMap;
41 43
42 @Tag(name = "管理后台 - MES 安灯呼叫记录") 44 @Tag(name = "管理后台 - MES 安灯呼叫记录")
43 @RestController 45 @RestController
@@ -129,13 +131,8 @@ public class MesProAndonRecordController { @@ -129,13 +131,8 @@ public class MesProAndonRecordController {
129 convertSet(list, MesProAndonRecordDO::getWorkOrderId)); 131 convertSet(list, MesProAndonRecordDO::getWorkOrderId));
130 Map<Long, MesProProcessDO> processMap = processService.getProcessMap( 132 Map<Long, MesProProcessDO> processMap = processService.getProcessMap(
131 new ArrayList<>(convertSet(list, MesProAndonRecordDO::getProcessId))); 133 new ArrayList<>(convertSet(list, MesProAndonRecordDO::getProcessId)));
132 - // 收集所有用户 ID(发起人 + 处置人)  
133 - // TODO @AI:可以使用 collutils 里,convert 去收集多个字段的 id;  
134 - Set<Long> userIds = new HashSet<>();  
135 - userIds.addAll(convertSet(list, MesProAndonRecordDO::getUserId));  
136 - userIds.addAll(convertSet(list, MesProAndonRecordDO::getHandlerUserId));  
137 - userIds.remove(null);  
138 - Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds); 134 + Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertSetByFlatMap(list,
  135 + record -> Stream.of(record.getUserId(), record.getHandlerUserId())));
139 // 2. 拼接 VO 136 // 2. 拼接 VO
140 return BeanUtils.toBean(list, MesProAndonRecordRespVO.class, vo -> { 137 return BeanUtils.toBean(list, MesProAndonRecordRespVO.class, vo -> {
141 MapUtils.findAndThen(workstationMap, vo.getWorkstationId(), ws -> 138 MapUtils.findAndThen(workstationMap, vo.getWorkstationId(), ws ->
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProFeedbackStatusEnum.java
@@ -6,6 +6,7 @@ import lombok.Getter; @@ -6,6 +6,7 @@ import lombok.Getter;
6 6
7 import java.util.Arrays; 7 import java.util.Arrays;
8 8
  9 +// TODO @AI:注释下,状态的流转,不要太复杂;
9 /** 10 /**
10 * MES 生产报工状态枚举 11 * MES 生产报工状态枚举
11 * 12 *
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/andon/MesProAndonRecordServiceImpl.java
@@ -9,6 +9,9 @@ import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record.MesProAn @@ -9,6 +9,9 @@ import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record.MesProAn
9 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.andon.MesProAndonRecordDO; 9 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.andon.MesProAndonRecordDO;
10 import cn.iocoder.yudao.module.mes.dal.mysql.pro.andon.MesProAndonRecordMapper; 10 import cn.iocoder.yudao.module.mes.dal.mysql.pro.andon.MesProAndonRecordMapper;
11 import cn.iocoder.yudao.module.mes.enums.pro.MesProAndonStatusEnum; 11 import cn.iocoder.yudao.module.mes.enums.pro.MesProAndonStatusEnum;
  12 +import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService;
  13 +import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessService;
  14 +import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
12 import jakarta.annotation.Resource; 15 import jakarta.annotation.Resource;
13 import org.springframework.stereotype.Service; 16 import org.springframework.stereotype.Service;
14 import org.springframework.validation.annotation.Validated; 17 import org.springframework.validation.annotation.Validated;
@@ -29,11 +32,27 @@ public class MesProAndonRecordServiceImpl implements MesProAndonRecordService { @@ -29,11 +32,27 @@ public class MesProAndonRecordServiceImpl implements MesProAndonRecordService {
29 @Resource 32 @Resource
30 private MesProAndonRecordMapper andonRecordMapper; 33 private MesProAndonRecordMapper andonRecordMapper;
31 34
  35 + @Resource
  36 + private MesMdWorkstationService workstationService;
  37 +
  38 + @Resource
  39 + private MesProWorkOrderService workOrderService;
  40 +
  41 + @Resource
  42 + private MesProProcessService processService;
  43 +
32 @Override 44 @Override
33 public Long createAndonRecord(MesProAndonRecordSaveReqVO createReqVO) { 45 public Long createAndonRecord(MesProAndonRecordSaveReqVO createReqVO) {
34 - // TODO @AI:关联数据存在 46 + // 1. 校验关联数据存在
  47 + workstationService.getWorkstation(createReqVO.getWorkstationId()); // 工作站必填,直接校验
  48 + if (createReqVO.getWorkOrderId() != null) {
  49 + workOrderService.validateWorkOrderExists(createReqVO.getWorkOrderId());
  50 + }
  51 + if (createReqVO.getProcessId() != null) {
  52 + processService.getProcess(createReqVO.getProcessId());
  53 + }
35 54
36 - // 插入 55 + // 2. 插入
37 MesProAndonRecordDO record = BeanUtils.toBean(createReqVO, MesProAndonRecordDO.class); 56 MesProAndonRecordDO record = BeanUtils.toBean(createReqVO, MesProAndonRecordDO.class);
38 record.setStatus(MesProAndonStatusEnum.ACTIVE.getStatus()); 57 record.setStatus(MesProAndonStatusEnum.ACTIVE.getStatus());
39 andonRecordMapper.insert(record); 58 andonRecordMapper.insert(record);
@@ -42,22 +61,16 @@ public class MesProAndonRecordServiceImpl implements MesProAndonRecordService { @@ -42,22 +61,16 @@ public class MesProAndonRecordServiceImpl implements MesProAndonRecordService {
42 61
43 @Override 62 @Override
44 public void deleteAndonRecord(Long id) { 63 public void deleteAndonRecord(Long id) {
45 - // 校验存在  
46 - validateAndonRecordExists(id);  
47 - // TODO @AI:已处理,不能删除。可以抽个方法,这样下面的 1.2 也可以服用;  
48 -  
49 - // 删除 64 + // 1. 校验存在 + 未处置
  65 + validateAndonRecordNotHandled(id);
  66 + // 2. 删除
50 andonRecordMapper.deleteById(id); 67 andonRecordMapper.deleteById(id);
51 } 68 }
52 69
53 @Override 70 @Override
54 public void handleAndonRecord(MesProAndonRecordHandleReqVO handleReqVO) { 71 public void handleAndonRecord(MesProAndonRecordHandleReqVO handleReqVO) {
55 - // 1.1 校验存在  
56 - MesProAndonRecordDO record = validateAndonRecordExists(handleReqVO.getId());  
57 - // 1.2 校验未处置  
58 - if (ObjUtil.equal(record.getStatus(), MesProAndonStatusEnum.HANDLED.getStatus())) {  
59 - throw exception(PRO_ANDON_RECORD_ALREADY_HANDLED);  
60 - } 72 + // 1. 校验存在 + 未处置
  73 + validateAndonRecordNotHandled(handleReqVO.getId());
61 74
62 // 2. 更新为已处置 75 // 2. 更新为已处置
63 andonRecordMapper.updateById(new MesProAndonRecordDO().setId(handleReqVO.getId()) 76 andonRecordMapper.updateById(new MesProAndonRecordDO().setId(handleReqVO.getId())
@@ -67,11 +80,20 @@ public class MesProAndonRecordServiceImpl implements MesProAndonRecordService { @@ -67,11 +80,20 @@ public class MesProAndonRecordServiceImpl implements MesProAndonRecordService {
67 .setRemark(handleReqVO.getRemark())); 80 .setRemark(handleReqVO.getRemark()));
68 } 81 }
69 82
70 - private MesProAndonRecordDO validateAndonRecordExists(Long id) { 83 + /**
  84 + * 校验安灯记录存在,且未处置
  85 + *
  86 + * @param id 编号
  87 + * @return 安灯记录
  88 + */
  89 + private MesProAndonRecordDO validateAndonRecordNotHandled(Long id) {
71 MesProAndonRecordDO record = andonRecordMapper.selectById(id); 90 MesProAndonRecordDO record = andonRecordMapper.selectById(id);
72 if (record == null) { 91 if (record == null) {
73 throw exception(PRO_ANDON_RECORD_NOT_EXISTS); 92 throw exception(PRO_ANDON_RECORD_NOT_EXISTS);
74 } 93 }
  94 + if (ObjUtil.equal(record.getStatus(), MesProAndonStatusEnum.HANDLED.getStatus())) {
  95 + throw exception(PRO_ANDON_RECORD_ALREADY_HANDLED);
  96 + }
75 return record; 97 return record;
76 } 98 }
77 99