Browse Source

✨ feat(mes): 新增点检记录明细的项目类型字段及批量创建功能

新增项目类型字段到点检记录明细响应对象,并在控制器和服务层中实现批量创建点检记录明细的功能。此变更提升了点检记录的灵活性和可扩展性。
YunaiV 4 months ago
parent
commit
d7b33f00ed

+ 2 - 4
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dv/checkrecord/MesDvCheckRecordLineController.java

@@ -96,10 +96,8 @@ public class MesDvCheckRecordLineController {
         // 2. 拼接 VO
         return BeanUtils.toBean(list, MesDvCheckRecordLineRespVO.class, vo ->
                 MapUtils.findAndThen(subjectMap, vo.getSubjectId(), subject -> vo
-                        .setSubjectCode(subject.getCode())
-                        .setSubjectName(subject.getName())
-                        .setSubjectContent(subject.getContent())
-                        .setSubjectStandard(subject.getStandard())));
+                        .setSubjectCode(subject.getCode()).setSubjectName(subject.getName())
+                        .setSubjectType(subject.getType()).setSubjectContent(subject.getContent()).setSubjectStandard(subject.getStandard())));
     }
 
 }

+ 4 - 0
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dv/checkrecord/vo/line/MesDvCheckRecordLineRespVO.java

@@ -33,6 +33,10 @@ public class MesDvCheckRecordLineRespVO {
     @ExcelProperty("项目名称")
     private String subjectName;
 
+    @Schema(description = "项目类型", example = "1")
+    @ExcelProperty("项目类型")
+    private Integer subjectType;
+
     @Schema(description = "检查内容", example = "检查润滑油是否充足")
     @ExcelProperty("检查内容")
     private String subjectContent;

+ 7 - 0
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/checkrecord/MesDvCheckRecordLineService.java

@@ -44,6 +44,13 @@ public interface MesDvCheckRecordLineService {
      */
     void deleteByRecordId(Long recordId);
 
+    /**
+     * 批量创建点检记录明细
+     *
+     * @param lines 明细列表
+     */
+    void createCheckRecordLineList(List<MesDvCheckRecordLineDO> lines);
+
     /**
      * 校验点检记录明细存在
      *

+ 19 - 7
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/checkrecord/MesDvCheckRecordLineServiceImpl.java

@@ -34,8 +34,8 @@ public class MesDvCheckRecordLineServiceImpl implements MesDvCheckRecordLineServ
 
     @Override
     public Long createCheckRecordLine(MesDvCheckRecordLineSaveReqVO createReqVO) {
-        // 1. 校验点检记录存在
-        checkRecordService.validateCheckRecordExists(createReqVO.getRecordId());
+        // 1. 校验点检记录存在且为草稿状态
+        checkRecordService.validateCheckRecordDraft(createReqVO.getRecordId());
 
         // 2. 插入
         MesDvCheckRecordLineDO line = BeanUtils.toBean(createReqVO, MesDvCheckRecordLineDO.class);
@@ -47,8 +47,8 @@ public class MesDvCheckRecordLineServiceImpl implements MesDvCheckRecordLineServ
     public void updateCheckRecordLine(MesDvCheckRecordLineSaveReqVO updateReqVO) {
         // 1.1 校验行存在
         validateCheckRecordLineExists(updateReqVO.getId());
-        // 1.2 校验点检记录存在
-        checkRecordService.validateCheckRecordExists(updateReqVO.getRecordId());
+        // 1.2 校验点检记录存在且为草稿状态
+        checkRecordService.validateCheckRecordDraft(updateReqVO.getRecordId());
 
         // 2. 更新
         MesDvCheckRecordLineDO updateObj = BeanUtils.toBean(updateReqVO, MesDvCheckRecordLineDO.class);
@@ -57,9 +57,16 @@ public class MesDvCheckRecordLineServiceImpl implements MesDvCheckRecordLineServ
 
     @Override
     public void deleteCheckRecordLine(Long id) {
-        // 校验存在
-        validateCheckRecordLineExists(id);
-        // 删除
+        // 1. 校验存在
+        // TODO @AI:复用 validateCheckRecordLineExists 方法;
+        MesDvCheckRecordLineDO line = checkRecordLineMapper.selectById(id);
+        if (line == null) {
+            throw exception(DV_CHECK_RECORD_LINE_NOT_EXISTS);
+        }
+
+        // 2. 校验父记录为草稿状态
+        checkRecordService.validateCheckRecordDraft(line.getRecordId());
+        // 3. 删除
         checkRecordLineMapper.deleteById(id);
     }
 
@@ -68,6 +75,11 @@ public class MesDvCheckRecordLineServiceImpl implements MesDvCheckRecordLineServ
         checkRecordLineMapper.deleteByRecordId(recordId);
     }
 
+    @Override
+    public void createCheckRecordLineList(List<MesDvCheckRecordLineDO> lines) {
+        checkRecordLineMapper.insertBatch(lines);
+    }
+
     @Override
     public void validateCheckRecordLineExists(Long id) {
         if (checkRecordLineMapper.selectById(id) == null) {

+ 7 - 0
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/checkrecord/MesDvCheckRecordService.java

@@ -50,6 +50,13 @@ public interface MesDvCheckRecordService {
      */
     void validateCheckRecordExists(Long id);
 
+    /**
+     * 校验点检记录为草稿状态
+     *
+     * @param id 编号
+     */
+    void validateCheckRecordDraft(Long id);
+
     /**
      * 获得指定设备的点检记录数量
      *

+ 23 - 17
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/checkrecord/MesDvCheckRecordServiceImpl.java

@@ -11,12 +11,13 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.dv.checkrecord.MesDvCheckRecor
 import cn.iocoder.yudao.module.mes.dal.dataobject.dv.checkrecord.MesDvCheckRecordLineDO;
 import cn.iocoder.yudao.module.mes.enums.dv.MesDvCheckRecordStatusEnum;
 import cn.iocoder.yudao.module.mes.enums.dv.MesDvCheckResultEnum;
-import cn.iocoder.yudao.module.mes.dal.mysql.dv.checkrecord.MesDvCheckRecordLineMapper;
 import cn.iocoder.yudao.module.mes.dal.mysql.dv.checkrecord.MesDvCheckRecordMapper;
 import cn.iocoder.yudao.module.mes.service.dv.checkplan.MesDvCheckPlanService;
 import cn.iocoder.yudao.module.mes.service.dv.checkplan.MesDvCheckPlanSubjectService;
 import cn.iocoder.yudao.module.mes.service.dv.machinery.MesDvMachineryService;
+import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import jakarta.annotation.Resource;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -39,19 +40,22 @@ public class MesDvCheckRecordServiceImpl implements MesDvCheckRecordService {
     @Resource
     private MesDvCheckRecordMapper checkRecordMapper;
     @Resource
-    private MesDvCheckRecordLineMapper checkRecordLineMapper;
+    @Lazy
+    private MesDvCheckRecordLineService checkRecordLineService;
     @Resource
     private MesDvMachineryService machineryService;
     @Resource
     private MesDvCheckPlanService checkPlanService;
     @Resource
     private MesDvCheckPlanSubjectService checkPlanSubjectService;
+    @Resource
+    private AdminUserApi adminUserApi;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createCheckRecord(MesDvCheckRecordSaveReqVO createReqVO) {
         // 1. 校验关联数据
-        validateCheckRecordRelation(createReqVO);
+        validateCheckRecordSave(createReqVO);
 
         // 2. 插入主记录,状态默认为草稿
         MesDvCheckRecordDO checkRecord = BeanUtils.toBean(createReqVO, MesDvCheckRecordDO.class)
@@ -69,16 +73,17 @@ public class MesDvCheckRecordServiceImpl implements MesDvCheckRecordService {
     @Transactional(rollbackFor = Exception.class)
     public void updateCheckRecord(MesDvCheckRecordSaveReqVO updateReqVO) {
         // 1.1 校验存在 + 状态为草稿
-        MesDvCheckRecordDO existRecord = validateCheckRecordDraft(updateReqVO.getId());
+        validateCheckRecordDraft(updateReqVO.getId());
         // 1.2 校验关联数据
-        validateCheckRecordRelation(updateReqVO);
+        validateCheckRecordSave(updateReqVO);
 
         // 2. 如果计划变更,删除旧明细并重新生成
+        MesDvCheckRecordDO existRecord = checkRecordMapper.selectById(updateReqVO.getId());
         Long oldPlanId = existRecord.getPlanId();
         Long newPlanId = updateReqVO.getPlanId();
-        boolean planChanged = !java.util.Objects.equals(oldPlanId, newPlanId);
+        boolean planChanged = ObjUtil.notEqual(oldPlanId, newPlanId);
         if (planChanged) {
-            checkRecordLineMapper.deleteByRecordId(updateReqVO.getId());
+            checkRecordLineService.deleteByRecordId(updateReqVO.getId());
             if (newPlanId != null) {
                 generateCheckRecordLines(updateReqVO.getId(), newPlanId);
             }
@@ -94,7 +99,7 @@ public class MesDvCheckRecordServiceImpl implements MesDvCheckRecordService {
         // 1.1 校验状态为草稿
         validateCheckRecordDraft(id);
         // 1.2 校验至少有一条明细
-        List<MesDvCheckRecordLineDO> lines = checkRecordLineMapper.selectListByRecordId(id);
+        List<MesDvCheckRecordLineDO> lines = checkRecordLineService.getCheckRecordLineListByRecordId(id);
         if (CollUtil.isEmpty(lines)) {
             throw exception(DV_CHECK_RECORD_NO_LINE);
         }
@@ -114,7 +119,7 @@ public class MesDvCheckRecordServiceImpl implements MesDvCheckRecordService {
         // 2.1 删除主记录
         checkRecordMapper.deleteById(id);
         // 2.2 级联删除明细
-        checkRecordLineMapper.deleteByRecordId(id);
+        checkRecordLineService.deleteByRecordId(id);
     }
 
     @Override
@@ -139,12 +144,10 @@ public class MesDvCheckRecordServiceImpl implements MesDvCheckRecordService {
         return checkRecordMapper.selectPage(pageReqVO);
     }
 
-    // ==================== 私有方法 ====================
+    // ==================== 校验方法 ====================
 
-    /**
-     * 校验点检记录为草稿状态
-     */
-    private MesDvCheckRecordDO validateCheckRecordDraft(Long id) {
+    @Override
+    public void validateCheckRecordDraft(Long id) {
         MesDvCheckRecordDO record = checkRecordMapper.selectById(id);
         if (record == null) {
             throw exception(DV_CHECK_RECORD_NOT_EXISTS);
@@ -152,16 +155,19 @@ public class MesDvCheckRecordServiceImpl implements MesDvCheckRecordService {
         if (ObjUtil.notEqual(MesDvCheckRecordStatusEnum.DRAFT.getStatus(), record.getStatus())) {
             throw exception(DV_CHECK_RECORD_NOT_DRAFT);
         }
-        return record;
     }
 
-    private void validateCheckRecordRelation(MesDvCheckRecordSaveReqVO reqVO) {
+    private void validateCheckRecordSave(MesDvCheckRecordSaveReqVO reqVO) {
         // 校验设备是否存在
         machineryService.validateMachineryExists(reqVO.getMachineryId());
         // 校验点检计划是否存在
         if (reqVO.getPlanId() != null) {
             checkPlanService.validateCheckPlanExists(reqVO.getPlanId());
         }
+        // 校验点检人是否存在
+        if (reqVO.getUserId() != null) {
+            adminUserApi.validateUser(reqVO.getUserId());
+        }
     }
 
     /**
@@ -178,7 +184,7 @@ public class MesDvCheckRecordServiceImpl implements MesDvCheckRecordService {
                     .setRecordId(recordId).setSubjectId(planSubject.getSubjectId())
                     .setCheckStatus(MesDvCheckResultEnum.NORMAL.getResult()));
         }
-        checkRecordLineMapper.insertBatch(lines);
+        checkRecordLineService.createCheckRecordLineList(lines);
     }
 
 }