Commit 63239ca1fc5ed470943c196b94cf1642de3db966

Authored by YunaiV
1 parent 4d091839

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

yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultDetailService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.qc.indicatorresult;
  2 +
  3 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDetailDO;
  4 +
  5 +import java.util.List;
  6 +
  7 +/**
  8 + * MES 检验结果明细 Service 接口
  9 + *
  10 + * @author 芋道源码
  11 + */
  12 +public interface MesQcIndicatorResultDetailService {
  13 +
  14 + /**
  15 + * 批量创建检验结果明细
  16 + *
  17 + * @param details 明细列表
  18 + */
  19 + void createDetailList(List<MesQcIndicatorResultDetailDO> details);
  20 +
  21 + /**
  22 + * 批量新增或更新检验结果明细
  23 + *
  24 + * @param details 明细列表
  25 + */
  26 + void createOrUpdateDetailList(List<MesQcIndicatorResultDetailDO> details);
  27 +
  28 + /**
  29 + * 根据检验结果 ID 获取明细列表
  30 + *
  31 + * @param resultId 检验结果 ID
  32 + * @return 明细列表
  33 + */
  34 + List<MesQcIndicatorResultDetailDO> getDetailListByResultId(Long resultId);
  35 +
  36 + /**
  37 + * 根据检验结果 ID 删除所有明细
  38 + *
  39 + * @param resultId 检验结果 ID
  40 + */
  41 + void deleteDetailByResultId(Long resultId);
  42 +
  43 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultDetailServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.qc.indicatorresult;
  2 +
  3 +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  4 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDetailDO;
  5 +import cn.iocoder.yudao.module.mes.dal.mysql.qc.indicatorresult.MesQcIndicatorResultDetailMapper;
  6 +import jakarta.annotation.Resource;
  7 +import org.springframework.stereotype.Service;
  8 +import org.springframework.validation.annotation.Validated;
  9 +
  10 +import java.util.List;
  11 +
  12 +/**
  13 + * MES 检验结果明细 Service 实现类
  14 + *
  15 + * @author 芋道源码
  16 + */
  17 +@Service
  18 +@Validated
  19 +public class MesQcIndicatorResultDetailServiceImpl implements MesQcIndicatorResultDetailService {
  20 +
  21 + @Resource
  22 + private MesQcIndicatorResultDetailMapper detailMapper;
  23 +
  24 + @Override
  25 + public void createDetailList(List<MesQcIndicatorResultDetailDO> details) {
  26 + detailMapper.insertBatch(details);
  27 + }
  28 +
  29 + @Override
  30 + public void createOrUpdateDetailList(List<MesQcIndicatorResultDetailDO> details) {
  31 + detailMapper.insertOrUpdate(details);
  32 + }
  33 +
  34 + @Override
  35 + public List<MesQcIndicatorResultDetailDO> getDetailListByResultId(Long resultId) {
  36 + return detailMapper.selectListByResultId(resultId);
  37 + }
  38 +
  39 + @Override
  40 + public void deleteDetailByResultId(Long resultId) {
  41 + detailMapper.delete(new LambdaQueryWrapperX<MesQcIndicatorResultDetailDO>()
  42 + .eq(MesQcIndicatorResultDetailDO::getResultId, resultId));
  43 + }
  44 +
  45 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultServiceImpl.java
1 package cn.iocoder.yudao.module.mes.service.qc.indicatorresult; 1 package cn.iocoder.yudao.module.mes.service.qc.indicatorresult;
2 2
  3 +import cn.hutool.core.collection.CollUtil;
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
5 import cn.iocoder.yudao.module.mes.controller.admin.qc.indicatorresult.vo.MesQcIndicatorResultPageReqVO; 6 import cn.iocoder.yudao.module.mes.controller.admin.qc.indicatorresult.vo.MesQcIndicatorResultPageReqVO;
6 import cn.iocoder.yudao.module.mes.controller.admin.qc.indicatorresult.vo.MesQcIndicatorResultSaveReqVO; 7 import cn.iocoder.yudao.module.mes.controller.admin.qc.indicatorresult.vo.MesQcIndicatorResultSaveReqVO;
7 -import cn.iocoder.yudao.module.mes.dal.dataobject.qc.iqc.MesQcIqcDO; 8 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicator.MesQcIndicatorDO;
8 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDO; 9 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDO;
9 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDetailDO; 10 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDetailDO;
10 -import cn.iocoder.yudao.module.mes.dal.mysql.qc.indicatorresult.MesQcIndicatorResultDetailMapper;  
11 -import cn.iocoder.yudao.module.mes.dal.mysql.qc.indicatorresult.MesQcIndicatorResultMapper; 11 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.iqc.MesQcIqcDO;
12 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.ipqc.MesQcIpqcDO; 12 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.ipqc.MesQcIpqcDO;
13 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.oqc.MesQcOqcDO; 13 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.oqc.MesQcOqcDO;
14 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.rqc.MesQcRqcDO; 14 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.rqc.MesQcRqcDO;
  15 +import cn.iocoder.yudao.module.mes.dal.mysql.qc.indicatorresult.MesQcIndicatorResultMapper;
15 import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum; 16 import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum;
  17 +import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService;
16 import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcService; 18 import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcService;
17 import cn.iocoder.yudao.module.mes.service.qc.iqc.MesQcIqcService; 19 import cn.iocoder.yudao.module.mes.service.qc.iqc.MesQcIqcService;
18 import cn.iocoder.yudao.module.mes.service.qc.oqc.MesQcOqcService; 20 import cn.iocoder.yudao.module.mes.service.qc.oqc.MesQcOqcService;
@@ -26,7 +28,6 @@ import org.springframework.validation.annotation.Validated; @@ -26,7 +28,6 @@ import org.springframework.validation.annotation.Validated;
26 import java.util.*; 28 import java.util.*;
27 29
28 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 30 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
29 -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;  
30 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; 31 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
31 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; 32 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
32 33
@@ -42,9 +43,11 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ @@ -42,9 +43,11 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ
42 @Resource 43 @Resource
43 private MesQcIndicatorResultMapper resultMapper; 44 private MesQcIndicatorResultMapper resultMapper;
44 @Resource 45 @Resource
45 - private MesQcIndicatorResultDetailMapper resultDetailMapper; 46 + private MesQcIndicatorResultDetailService resultDetailService;
46 47
47 @Resource 48 @Resource
  49 + private MesQcIndicatorService indicatorService;
  50 + @Resource
48 private MesQcIqcService iqcService; 51 private MesQcIqcService iqcService;
49 @Resource 52 @Resource
50 @Lazy 53 @Lazy
@@ -59,8 +62,10 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ @@ -59,8 +62,10 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ
59 @Override 62 @Override
60 @Transactional(rollbackFor = Exception.class) 63 @Transactional(rollbackFor = Exception.class)
61 public Long createIndicatorResult(MesQcIndicatorResultSaveReqVO createReqVO) { 64 public Long createIndicatorResult(MesQcIndicatorResultSaveReqVO createReqVO) {
62 - // 1. 根据 qcType 查询源质检单,获取 itemId 65 + // 1.1 根据 qcType 查询源质检单,获取 itemId
63 Long itemId = getItemIdFromQcDoc(createReqVO.getQcId(), createReqVO.getQcType()); 66 Long itemId = getItemIdFromQcDoc(createReqVO.getQcId(), createReqVO.getQcType());
  67 + // 1.2 校验所有明细的 indicatorId 是否存在
  68 + validateIndicatorIds(createReqVO.getItems());
64 69
65 // 2.1 插入主表 70 // 2.1 插入主表
66 MesQcIndicatorResultDO result = BeanUtils.toBean(createReqVO, MesQcIndicatorResultDO.class); 71 MesQcIndicatorResultDO result = BeanUtils.toBean(createReqVO, MesQcIndicatorResultDO.class);
@@ -70,7 +75,7 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ @@ -70,7 +75,7 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ
70 List<MesQcIndicatorResultDetailDO> details = BeanUtils.toBean(createReqVO.getItems(), 75 List<MesQcIndicatorResultDetailDO> details = BeanUtils.toBean(createReqVO.getItems(),
71 MesQcIndicatorResultDetailDO.class); 76 MesQcIndicatorResultDetailDO.class);
72 details.forEach(detail -> detail.setResultId(result.getId())); 77 details.forEach(detail -> detail.setResultId(result.getId()));
73 - resultDetailMapper.insertBatch(details); 78 + resultDetailService.createDetailList(details);
74 return result.getId(); 79 return result.getId();
75 } 80 }
76 81
@@ -86,7 +91,7 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ @@ -86,7 +91,7 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ
86 // 2.2 批量更新明细 91 // 2.2 批量更新明细
87 List<MesQcIndicatorResultDetailDO> details = BeanUtils.toBean(updateReqVO.getItems(), 92 List<MesQcIndicatorResultDetailDO> details = BeanUtils.toBean(updateReqVO.getItems(),
88 MesQcIndicatorResultDetailDO.class); 93 MesQcIndicatorResultDetailDO.class);
89 - resultDetailMapper.insertOrUpdate(details); 94 + resultDetailService.createOrUpdateDetailList(details);
90 } 95 }
91 96
92 @Override 97 @Override
@@ -96,7 +101,7 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ @@ -96,7 +101,7 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ
96 validateIndicatorResultExists(id); 101 validateIndicatorResultExists(id);
97 102
98 // 2.1 级联删除明细 103 // 2.1 级联删除明细
99 - resultDetailMapper.deleteByResultId(id); 104 + resultDetailService.deleteDetailByResultId(id);
100 // 2.2 删除主表 105 // 2.2 删除主表
101 resultMapper.deleteById(id); 106 resultMapper.deleteById(id);
102 } 107 }
@@ -113,7 +118,7 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ @@ -113,7 +118,7 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ
113 118
114 @Override 119 @Override
115 public List<MesQcIndicatorResultDetailDO> getIndicatorResultDetailListByResultId(Long resultId) { 120 public List<MesQcIndicatorResultDetailDO> getIndicatorResultDetailListByResultId(Long resultId) {
116 - return resultDetailMapper.selectListByResultId(resultId); 121 + return resultDetailService.getDetailListByResultId(resultId);
117 } 122 }
118 123
119 // ==================== 私有方法 ==================== 124 // ==================== 私有方法 ====================
@@ -127,6 +132,22 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ @@ -127,6 +132,22 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ
127 } 132 }
128 133
129 /** 134 /**
  135 + * 校验所有明细的 indicatorId 是否存在
  136 + */
  137 + private void validateIndicatorIds(List<MesQcIndicatorResultSaveReqVO.Item> items) {
  138 + if (CollUtil.isEmpty(items)) {
  139 + return;
  140 + }
  141 + Set<Long> indicatorIds = convertSet(items, MesQcIndicatorResultSaveReqVO.Item::getIndicatorId);
  142 + List<MesQcIndicatorDO> indicators = indicatorService.getIndicatorList(indicatorIds);
  143 + if (indicators.size() != indicatorIds.size()) {
  144 + Set<Long> existIds = convertSet(indicators, MesQcIndicatorDO::getId);
  145 + indicatorIds.removeAll(existIds);
  146 + throw exception(QC_INDICATOR_NOT_EXISTS);
  147 + }
  148 + }
  149 +
  150 + /**
130 * 根据 qcType 查询源质检单,获取 itemId 151 * 根据 qcType 查询源质检单,获取 itemId
131 */ 152 */
132 private Long getItemIdFromQcDoc(Long qcId, Integer qcType) { 153 private Long getItemIdFromQcDoc(Long qcId, Integer qcType) {