Bläddra i källkod

✨ feat(mes): 新增检验结果明细服务接口及实现

YunaiV 2 månader sedan
förälder
incheckning
63239ca1fc

+ 43 - 0
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultDetailService.java

@@ -0,0 +1,43 @@
+package cn.iocoder.yudao.module.mes.service.qc.indicatorresult;
+
+import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDetailDO;
+
+import java.util.List;
+
+/**
+ * MES 检验结果明细 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface MesQcIndicatorResultDetailService {
+
+    /**
+     * 批量创建检验结果明细
+     *
+     * @param details 明细列表
+     */
+    void createDetailList(List<MesQcIndicatorResultDetailDO> details);
+
+    /**
+     * 批量新增或更新检验结果明细
+     *
+     * @param details 明细列表
+     */
+    void createOrUpdateDetailList(List<MesQcIndicatorResultDetailDO> details);
+
+    /**
+     * 根据检验结果 ID 获取明细列表
+     *
+     * @param resultId 检验结果 ID
+     * @return 明细列表
+     */
+    List<MesQcIndicatorResultDetailDO> getDetailListByResultId(Long resultId);
+
+    /**
+     * 根据检验结果 ID 删除所有明细
+     *
+     * @param resultId 检验结果 ID
+     */
+    void deleteDetailByResultId(Long resultId);
+
+}

+ 45 - 0
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultDetailServiceImpl.java

@@ -0,0 +1,45 @@
+package cn.iocoder.yudao.module.mes.service.qc.indicatorresult;
+
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDetailDO;
+import cn.iocoder.yudao.module.mes.dal.mysql.qc.indicatorresult.MesQcIndicatorResultDetailMapper;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+/**
+ * MES 检验结果明细 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class MesQcIndicatorResultDetailServiceImpl implements MesQcIndicatorResultDetailService {
+
+    @Resource
+    private MesQcIndicatorResultDetailMapper detailMapper;
+
+    @Override
+    public void createDetailList(List<MesQcIndicatorResultDetailDO> details) {
+        detailMapper.insertBatch(details);
+    }
+
+    @Override
+    public void createOrUpdateDetailList(List<MesQcIndicatorResultDetailDO> details) {
+        detailMapper.insertOrUpdate(details);
+    }
+
+    @Override
+    public List<MesQcIndicatorResultDetailDO> getDetailListByResultId(Long resultId) {
+        return detailMapper.selectListByResultId(resultId);
+    }
+
+    @Override
+    public void deleteDetailByResultId(Long resultId) {
+        detailMapper.delete(new LambdaQueryWrapperX<MesQcIndicatorResultDetailDO>()
+                .eq(MesQcIndicatorResultDetailDO::getResultId, resultId));
+    }
+
+}

+ 31 - 10
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultServiceImpl.java

@@ -1,18 +1,20 @@
 package cn.iocoder.yudao.module.mes.service.qc.indicatorresult;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.mes.controller.admin.qc.indicatorresult.vo.MesQcIndicatorResultPageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.qc.indicatorresult.vo.MesQcIndicatorResultSaveReqVO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.qc.iqc.MesQcIqcDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicator.MesQcIndicatorDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDetailDO;
-import cn.iocoder.yudao.module.mes.dal.mysql.qc.indicatorresult.MesQcIndicatorResultDetailMapper;
-import cn.iocoder.yudao.module.mes.dal.mysql.qc.indicatorresult.MesQcIndicatorResultMapper;
+import cn.iocoder.yudao.module.mes.dal.dataobject.qc.iqc.MesQcIqcDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.ipqc.MesQcIpqcDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.oqc.MesQcOqcDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.rqc.MesQcRqcDO;
+import cn.iocoder.yudao.module.mes.dal.mysql.qc.indicatorresult.MesQcIndicatorResultMapper;
 import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum;
+import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService;
 import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcService;
 import cn.iocoder.yudao.module.mes.service.qc.iqc.MesQcIqcService;
 import cn.iocoder.yudao.module.mes.service.qc.oqc.MesQcOqcService;
@@ -26,7 +28,6 @@ import org.springframework.validation.annotation.Validated;
 import java.util.*;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
 
@@ -42,8 +43,10 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ
     @Resource
     private MesQcIndicatorResultMapper resultMapper;
     @Resource
-    private MesQcIndicatorResultDetailMapper resultDetailMapper;
+    private MesQcIndicatorResultDetailService resultDetailService;
 
+    @Resource
+    private MesQcIndicatorService indicatorService;
     @Resource
     private MesQcIqcService iqcService;
     @Resource
@@ -59,8 +62,10 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createIndicatorResult(MesQcIndicatorResultSaveReqVO createReqVO) {
-        // 1. 根据 qcType 查询源质检单,获取 itemId
+        // 1.1 根据 qcType 查询源质检单,获取 itemId
         Long itemId = getItemIdFromQcDoc(createReqVO.getQcId(), createReqVO.getQcType());
+        // 1.2 校验所有明细的 indicatorId 是否存在
+        validateIndicatorIds(createReqVO.getItems());
 
         // 2.1 插入主表
         MesQcIndicatorResultDO result = BeanUtils.toBean(createReqVO, MesQcIndicatorResultDO.class);
@@ -70,7 +75,7 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ
         List<MesQcIndicatorResultDetailDO> details = BeanUtils.toBean(createReqVO.getItems(),
                 MesQcIndicatorResultDetailDO.class);
         details.forEach(detail -> detail.setResultId(result.getId()));
-        resultDetailMapper.insertBatch(details);
+        resultDetailService.createDetailList(details);
         return result.getId();
     }
 
@@ -86,7 +91,7 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ
         // 2.2 批量更新明细
         List<MesQcIndicatorResultDetailDO> details = BeanUtils.toBean(updateReqVO.getItems(),
                 MesQcIndicatorResultDetailDO.class);
-        resultDetailMapper.insertOrUpdate(details);
+        resultDetailService.createOrUpdateDetailList(details);
     }
 
     @Override
@@ -96,7 +101,7 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ
         validateIndicatorResultExists(id);
 
         // 2.1 级联删除明细
-        resultDetailMapper.deleteByResultId(id);
+        resultDetailService.deleteDetailByResultId(id);
         // 2.2 删除主表
         resultMapper.deleteById(id);
     }
@@ -113,7 +118,7 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ
 
     @Override
     public List<MesQcIndicatorResultDetailDO> getIndicatorResultDetailListByResultId(Long resultId) {
-        return resultDetailMapper.selectListByResultId(resultId);
+        return resultDetailService.getDetailListByResultId(resultId);
     }
 
     // ==================== 私有方法 ====================
@@ -126,6 +131,22 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ
         return result;
     }
 
+    /**
+     * 校验所有明细的 indicatorId 是否存在
+     */
+    private void validateIndicatorIds(List<MesQcIndicatorResultSaveReqVO.Item> items) {
+        if (CollUtil.isEmpty(items)) {
+            return;
+        }
+        Set<Long> indicatorIds = convertSet(items, MesQcIndicatorResultSaveReqVO.Item::getIndicatorId);
+        List<MesQcIndicatorDO> indicators = indicatorService.getIndicatorList(indicatorIds);
+        if (indicators.size() != indicatorIds.size()) {
+            Set<Long> existIds = convertSet(indicators, MesQcIndicatorDO::getId);
+            indicatorIds.removeAll(existIds);
+            throw exception(QC_INDICATOR_NOT_EXISTS);
+        }
+    }
+
     /**
      * 根据 qcType 查询源质检单,获取 itemId
      */