diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/andon/MesProAndonRecordController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/andon/MesProAndonRecordController.java index c7465d4..5e31947 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/andon/MesProAndonRecordController.java +++ b/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.*; import java.io.IOException; import java.util.*; +import java.util.stream.Stream; import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSetByFlatMap; @Tag(name = "管理后台 - MES 安灯呼叫记录") @RestController @@ -129,13 +131,8 @@ public class MesProAndonRecordController { convertSet(list, MesProAndonRecordDO::getWorkOrderId)); Map processMap = processService.getProcessMap( new ArrayList<>(convertSet(list, MesProAndonRecordDO::getProcessId))); - // 收集所有用户 ID(发起人 + 处置人) - // TODO @AI:可以使用 collutils 里,convert 去收集多个字段的 id; - Set userIds = new HashSet<>(); - userIds.addAll(convertSet(list, MesProAndonRecordDO::getUserId)); - userIds.addAll(convertSet(list, MesProAndonRecordDO::getHandlerUserId)); - userIds.remove(null); - Map userMap = adminUserApi.getUserMap(userIds); + Map userMap = adminUserApi.getUserMap(convertSetByFlatMap(list, + record -> Stream.of(record.getUserId(), record.getHandlerUserId()))); // 2. 拼接 VO return BeanUtils.toBean(list, MesProAndonRecordRespVO.class, vo -> { MapUtils.findAndThen(workstationMap, vo.getWorkstationId(), ws -> diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProFeedbackStatusEnum.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProFeedbackStatusEnum.java index ad92896..1f1bb26 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProFeedbackStatusEnum.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProFeedbackStatusEnum.java @@ -6,6 +6,7 @@ import lombok.Getter; import java.util.Arrays; +// TODO @AI:注释下,状态的流转,不要太复杂; /** * MES 生产报工状态枚举 * diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/andon/MesProAndonRecordServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/andon/MesProAndonRecordServiceImpl.java index 72f00de..0d1a72a 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/andon/MesProAndonRecordServiceImpl.java +++ b/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 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.andon.MesProAndonRecordDO; import cn.iocoder.yudao.module.mes.dal.mysql.pro.andon.MesProAndonRecordMapper; import cn.iocoder.yudao.module.mes.enums.pro.MesProAndonStatusEnum; +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.workorder.MesProWorkOrderService; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -29,11 +32,27 @@ public class MesProAndonRecordServiceImpl implements MesProAndonRecordService { @Resource private MesProAndonRecordMapper andonRecordMapper; + @Resource + private MesMdWorkstationService workstationService; + + @Resource + private MesProWorkOrderService workOrderService; + + @Resource + private MesProProcessService processService; + @Override public Long createAndonRecord(MesProAndonRecordSaveReqVO createReqVO) { - // TODO @AI:关联数据存在 + // 1. 校验关联数据存在 + workstationService.getWorkstation(createReqVO.getWorkstationId()); // 工作站必填,直接校验 + if (createReqVO.getWorkOrderId() != null) { + workOrderService.validateWorkOrderExists(createReqVO.getWorkOrderId()); + } + if (createReqVO.getProcessId() != null) { + processService.getProcess(createReqVO.getProcessId()); + } - // 插入 + // 2. 插入 MesProAndonRecordDO record = BeanUtils.toBean(createReqVO, MesProAndonRecordDO.class); record.setStatus(MesProAndonStatusEnum.ACTIVE.getStatus()); andonRecordMapper.insert(record); @@ -42,22 +61,16 @@ public class MesProAndonRecordServiceImpl implements MesProAndonRecordService { @Override public void deleteAndonRecord(Long id) { - // 校验存在 - validateAndonRecordExists(id); - // TODO @AI:已处理,不能删除。可以抽个方法,这样下面的 1.2 也可以服用; - - // 删除 + // 1. 校验存在 + 未处置 + validateAndonRecordNotHandled(id); + // 2. 删除 andonRecordMapper.deleteById(id); } @Override public void handleAndonRecord(MesProAndonRecordHandleReqVO handleReqVO) { - // 1.1 校验存在 - MesProAndonRecordDO record = validateAndonRecordExists(handleReqVO.getId()); - // 1.2 校验未处置 - if (ObjUtil.equal(record.getStatus(), MesProAndonStatusEnum.HANDLED.getStatus())) { - throw exception(PRO_ANDON_RECORD_ALREADY_HANDLED); - } + // 1. 校验存在 + 未处置 + validateAndonRecordNotHandled(handleReqVO.getId()); // 2. 更新为已处置 andonRecordMapper.updateById(new MesProAndonRecordDO().setId(handleReqVO.getId()) @@ -67,11 +80,20 @@ public class MesProAndonRecordServiceImpl implements MesProAndonRecordService { .setRemark(handleReqVO.getRemark())); } - private MesProAndonRecordDO validateAndonRecordExists(Long id) { + /** + * 校验安灯记录存在,且未处置 + * + * @param id 编号 + * @return 安灯记录 + */ + private MesProAndonRecordDO validateAndonRecordNotHandled(Long id) { MesProAndonRecordDO record = andonRecordMapper.selectById(id); if (record == null) { throw exception(PRO_ANDON_RECORD_NOT_EXISTS); } + if (ObjUtil.equal(record.getStatus(), MesProAndonStatusEnum.HANDLED.getStatus())) { + throw exception(PRO_ANDON_RECORD_ALREADY_HANDLED); + } return record; }