Commit 83fdaad4b3c74ca95f7e115fde3619dddedf91d4

Authored by YunaiV
1 parent d0bd4394

feat(mes): enhance defect record service and controller with IPQC, OQC, and RQC support

yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicatorresult/MesQcIndicatorResultController.java
... ... @@ -8,11 +8,17 @@ import cn.iocoder.yudao.module.mes.controller.admin.qc.indicatorresult.vo.*;
8 8 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicator.MesQcIndicatorDO;
9 9 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDO;
10 10 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDetailDO;
  11 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.ipqc.MesQcIpqcLineDO;
11 12 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.lqc.MesQcIqcLineDO;
  13 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.oqc.MesQcOqcLineDO;
  14 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.rqc.MesQcRqcLineDO;
12 15 import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum;
13 16 import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService;
14 17 import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcIndicatorResultService;
  18 +import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcLineService;
15 19 import cn.iocoder.yudao.module.mes.service.qc.lqc.MesQcIqcLineService;
  20 +import cn.iocoder.yudao.module.mes.service.qc.oqc.MesQcOqcLineService;
  21 +import cn.iocoder.yudao.module.mes.service.qc.rqc.MesQcRqcLineService;
16 22 import io.swagger.v3.oas.annotations.Operation;
17 23 import io.swagger.v3.oas.annotations.Parameter;
18 24 import io.swagger.v3.oas.annotations.Parameters;
... ... @@ -41,6 +47,12 @@ public class MesQcIndicatorResultController {
41 47 @Resource
42 48 private MesQcIqcLineService iqcLineService;
43 49 @Resource
  50 + private MesQcIpqcLineService ipqcLineService;
  51 + @Resource
  52 + private MesQcOqcLineService oqcLineService;
  53 + @Resource
  54 + private MesQcRqcLineService rqcLineService;
  55 + @Resource
44 56 private MesQcIndicatorService indicatorService;
45 57  
46 58 @PostMapping("/create")
... ... @@ -118,38 +130,50 @@ public class MesQcIndicatorResultController {
118 130 */
119 131 private List<MesQcIndicatorResultRespVO.Item> buildDetailItemList(
120 132 List<MesQcIndicatorResultDetailDO> details, Long qcId, Integer qcType) {
121   - // 1.1 获取检验单行列表(知道有哪些检测指标)
122   - List<MesQcIqcLineDO> lines;
  133 + // 1.1 获取检验单行的指标 ID 列表(知道有哪些检测指标)
  134 + List<Long> indicatorIds;
123 135 if (Objects.equals(qcType, MesQcTypeEnum.IQC.getType())) {
124   - lines = iqcLineService.getIqcLineListByIqcId(qcId);
  136 + List<MesQcIqcLineDO> lines = iqcLineService.getIqcLineListByIqcId(qcId);
  137 + indicatorIds = CollUtil.isEmpty(lines) ? Collections.emptyList()
  138 + : new ArrayList<>(convertSet(lines, MesQcIqcLineDO::getIndicatorId));
  139 + } else if (Objects.equals(qcType, MesQcTypeEnum.IPQC.getType())) {
  140 + List<MesQcIpqcLineDO> lines = ipqcLineService.selectListByIpqcId(qcId);
  141 + indicatorIds = CollUtil.isEmpty(lines) ? Collections.emptyList()
  142 + : new ArrayList<>(convertSet(lines, MesQcIpqcLineDO::getIndicatorId));
  143 + } else if (Objects.equals(qcType, MesQcTypeEnum.OQC.getType())) {
  144 + List<MesQcOqcLineDO> lines = oqcLineService.getOqcLineListByOqcId(qcId);
  145 + indicatorIds = CollUtil.isEmpty(lines) ? Collections.emptyList()
  146 + : new ArrayList<>(convertSet(lines, MesQcOqcLineDO::getIndicatorId));
  147 + } else if (Objects.equals(qcType, MesQcTypeEnum.RQC.getType())) {
  148 + List<MesQcRqcLineDO> lines = rqcLineService.getRqcLineListByRqcId(qcId);
  149 + indicatorIds = CollUtil.isEmpty(lines) ? Collections.emptyList()
  150 + : new ArrayList<>(convertSet(lines, MesQcRqcLineDO::getIndicatorId));
125 151 } else {
126   - // TODO @芋艿:IPQC/OQC/RQC 模块迁移后实现
127 152 throw new IllegalArgumentException("暂不支持 qcType=" + qcType);
128 153 }
129   - if (CollUtil.isEmpty(lines)) {
  154 + if (CollUtil.isEmpty(indicatorIds)) {
130 155 return Collections.emptyList();
131 156 }
132 157  
133 158 // 1.2 批量查询检测指标
134   - Map<Long, MesQcIndicatorDO> indicatorMap = indicatorService.getIndicatorMap(
135   - convertSet(lines, MesQcIqcLineDO::getIndicatorId));
  159 + Map<Long, MesQcIndicatorDO> indicatorMap = indicatorService.getIndicatorMap(new HashSet<>(indicatorIds));
136 160 // 1.3 构建已有明细 Map(按 indicatorId 索引)
137 161 Map<Long, MesQcIndicatorResultDetailDO> detailMap = CollUtil.isEmpty(details)
138 162 ? Collections.emptyMap()
139 163 : convertMap(details, MesQcIndicatorResultDetailDO::getIndicatorId);
140 164  
141   - // 2. 遍历行,组装 VO
142   - List<MesQcIndicatorResultRespVO.Item> voList = new ArrayList<>(lines.size());
143   - for (MesQcIqcLineDO line : lines) {
  165 + // 2. 遍历指标 ID,组装 VO
  166 + List<MesQcIndicatorResultRespVO.Item> voList = new ArrayList<>(indicatorIds.size());
  167 + for (Long indicatorId : indicatorIds) {
144 168 MesQcIndicatorResultRespVO.Item vo = new MesQcIndicatorResultRespVO.Item()
145   - .setIndicatorId(line.getIndicatorId());
  169 + .setIndicatorId(indicatorId);
146 170 // 来自 indicator
147   - findAndThen(indicatorMap, line.getIndicatorId(), indicator -> vo
  171 + findAndThen(indicatorMap, indicatorId, indicator -> vo
148 172 .setIndicatorName(indicator.getName())
149 173 .setValueType(indicator.getResultType())
150 174 .setValueSpecification(indicator.getResultSpecification()));
151 175 // 来自已有结果明细(如有)
152   - findAndThen(detailMap, line.getIndicatorId(), detail -> vo
  176 + findAndThen(detailMap, indicatorId, detail -> vo
153 177 .setId(detail.getId()).setResultId(detail.getResultId())
154 178 .setValue(detail.getValue()).setRemark(detail.getRemark()));
155 179 voList.add(vo);
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/defectrecord/MesQcDefectRecordServiceImpl.java
... ... @@ -7,8 +7,14 @@ import cn.iocoder.yudao.module.mes.controller.admin.qc.defectrecord.vo.MesQcDefe
7 7 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.defectrecord.MesQcDefectRecordDO;
8 8 import cn.iocoder.yudao.module.mes.dal.mysql.qc.defectrecord.MesQcDefectRecordMapper;
9 9 import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum;
  10 +import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcLineService;
  11 +import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcService;
10 12 import cn.iocoder.yudao.module.mes.service.qc.lqc.MesQcIqcLineService;
11 13 import cn.iocoder.yudao.module.mes.service.qc.lqc.MesQcIqcService;
  14 +import cn.iocoder.yudao.module.mes.service.qc.oqc.MesQcOqcLineService;
  15 +import cn.iocoder.yudao.module.mes.service.qc.oqc.MesQcOqcService;
  16 +import cn.iocoder.yudao.module.mes.service.qc.rqc.MesQcRqcLineService;
  17 +import cn.iocoder.yudao.module.mes.service.qc.rqc.MesQcRqcService;
12 18 import jakarta.annotation.Resource;
13 19 import org.springframework.context.annotation.Lazy;
14 20 import org.springframework.stereotype.Service;
... ... @@ -40,6 +46,27 @@ public class MesQcDefectRecordServiceImpl implements MesQcDefectRecordService {
40 46 @Lazy
41 47 private MesQcIqcLineService iqcLineService;
42 48  
  49 + @Resource
  50 + @Lazy
  51 + private MesQcIpqcService ipqcService;
  52 + @Resource
  53 + @Lazy
  54 + private MesQcIpqcLineService ipqcLineService;
  55 +
  56 + @Resource
  57 + @Lazy
  58 + private MesQcOqcService oqcService;
  59 + @Resource
  60 + @Lazy
  61 + private MesQcOqcLineService oqcLineService;
  62 +
  63 + @Resource
  64 + @Lazy
  65 + private MesQcRqcService rqcService;
  66 + @Resource
  67 + @Lazy
  68 + private MesQcRqcLineService rqcLineService;
  69 +
43 70 @Override
44 71 @Transactional(rollbackFor = Exception.class)
45 72 public Long createDefectRecord(MesQcDefectRecordSaveReqVO createReqVO) {
... ... @@ -98,8 +125,16 @@ public class MesQcDefectRecordServiceImpl implements MesQcDefectRecordService {
98 125 if (Objects.equals(qcType, MesQcTypeEnum.IQC.getType())) {
99 126 iqcService.validateIqcExists(qcId);
100 127 iqcLineService.validateIqcLineExists(lineId);
  128 + } else if (Objects.equals(qcType, MesQcTypeEnum.IPQC.getType())) {
  129 + ipqcService.validateIpqcExists(qcId);
  130 + ipqcLineService.validateIpqcLineExists(lineId);
  131 + } else if (Objects.equals(qcType, MesQcTypeEnum.OQC.getType())) {
  132 + oqcService.validateOqcExists(qcId);
  133 + oqcLineService.validateOqcLineExists(lineId);
  134 + } else if (Objects.equals(qcType, MesQcTypeEnum.RQC.getType())) {
  135 + rqcService.validateRqcExists(qcId);
  136 + rqcLineService.validateRqcLineExists(lineId);
101 137 } else {
102   - // 后续扩展:IPQC、OQC、RQC
103 138 throw exception(QC_DEFECT_RECORD_QC_TYPE_UNSUPPORTED);
104 139 }
105 140 }
... ... @@ -124,8 +159,13 @@ public class MesQcDefectRecordServiceImpl implements MesQcDefectRecordService {
124 159 List<MesQcDefectRecordDO> records = defectRecordMapper.selectListByQcTypeAndQcId(qcType, qcId);
125 160 if (Objects.equals(qcType, MesQcTypeEnum.IQC.getType())) {
126 161 iqcService.recalculateDefectStats(qcId, records);
  162 + } else if (Objects.equals(qcType, MesQcTypeEnum.IPQC.getType())) {
  163 + ipqcService.recalculateDefectStats(qcId, records);
  164 + } else if (Objects.equals(qcType, MesQcTypeEnum.OQC.getType())) {
  165 + oqcService.recalculateDefectStats(qcId, records);
  166 + } else if (Objects.equals(qcType, MesQcTypeEnum.RQC.getType())) {
  167 + rqcService.recalculateDefectStats(qcId, records);
127 168 } else {
128   - // 后续扩展:IPQC、OQC、RQC
129 169 throw exception(QC_DEFECT_RECORD_QC_TYPE_UNSUPPORTED);
130 170 }
131 171 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultServiceImpl.java
... ... @@ -9,9 +9,16 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndica
9 9 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDetailDO;
10 10 import cn.iocoder.yudao.module.mes.dal.mysql.qc.indicatorresult.MesQcIndicatorResultDetailMapper;
11 11 import cn.iocoder.yudao.module.mes.dal.mysql.qc.indicatorresult.MesQcIndicatorResultMapper;
  12 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.ipqc.MesQcIpqcDO;
  13 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.oqc.MesQcOqcDO;
  14 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.rqc.MesQcRqcDO;
12 15 import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum;
  16 +import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcService;
13 17 import cn.iocoder.yudao.module.mes.service.qc.lqc.MesQcIqcService;
  18 +import cn.iocoder.yudao.module.mes.service.qc.oqc.MesQcOqcService;
  19 +import cn.iocoder.yudao.module.mes.service.qc.rqc.MesQcRqcService;
14 20 import jakarta.annotation.Resource;
  21 +import org.springframework.context.annotation.Lazy;
15 22 import org.springframework.stereotype.Service;
16 23 import org.springframework.transaction.annotation.Transactional;
17 24 import org.springframework.validation.annotation.Validated;
... ... @@ -39,6 +46,15 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ
39 46  
40 47 @Resource
41 48 private MesQcIqcService iqcService;
  49 + @Resource
  50 + @Lazy
  51 + private MesQcIpqcService ipqcService;
  52 + @Resource
  53 + @Lazy
  54 + private MesQcOqcService oqcService;
  55 + @Resource
  56 + @Lazy
  57 + private MesQcRqcService rqcService;
42 58  
43 59 @Override
44 60 @Transactional(rollbackFor = Exception.class)
... ... @@ -117,8 +133,16 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ
117 133 if (Objects.equals(qcType, MesQcTypeEnum.IQC.getType())) {
118 134 MesQcIqcDO iqc = iqcService.validateIqcExists(qcId);
119 135 return iqc.getItemId();
  136 + } else if (Objects.equals(qcType, MesQcTypeEnum.IPQC.getType())) {
  137 + MesQcIpqcDO ipqc = ipqcService.validateIpqcExists(qcId);
  138 + return ipqc.getItemId();
  139 + } else if (Objects.equals(qcType, MesQcTypeEnum.OQC.getType())) {
  140 + MesQcOqcDO oqc = oqcService.validateOqcExists(qcId);
  141 + return oqc.getItemId();
  142 + } else if (Objects.equals(qcType, MesQcTypeEnum.RQC.getType())) {
  143 + MesQcRqcDO rqc = rqcService.validateRqcExists(qcId);
  144 + return rqc.getItemId();
120 145 }
121   - // TODO @芋艿:IPQC/OQC/RQC 模块迁移后实现
122 146 throw new IllegalArgumentException("暂不支持 qcType=" + qcType);
123 147 }
124 148  
... ...