Commit 83fdaad4b3c74ca95f7e115fde3619dddedf91d4
1 parent
d0bd4394
feat(mes): enhance defect record service and controller with IPQC, OQC, and RQC support
Showing
3 changed files
with
104 additions
and
16 deletions
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 | ... | ... |