From 63239ca1fc5ed470943c196b94cf1642de3db966 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 5 Apr 2026 00:24:43 +0800 Subject: [PATCH] ✨ feat(mes): 新增检验结果明细服务接口及实现 --- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultDetailService.java | 43 +++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultDetailServiceImpl.java | 45 +++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultServiceImpl.java | 41 +++++++++++++++++++++++++++++++---------- 3 files changed, 119 insertions(+), 10 deletions(-) create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultDetailService.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultDetailServiceImpl.java diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultDetailService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultDetailService.java new file mode 100644 index 0000000..680ab66 --- /dev/null +++ b/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 details); + + /** + * 批量新增或更新检验结果明细 + * + * @param details 明细列表 + */ + void createOrUpdateDetailList(List details); + + /** + * 根据检验结果 ID 获取明细列表 + * + * @param resultId 检验结果 ID + * @return 明细列表 + */ + List getDetailListByResultId(Long resultId); + + /** + * 根据检验结果 ID 删除所有明细 + * + * @param resultId 检验结果 ID + */ + void deleteDetailByResultId(Long resultId); + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultDetailServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultDetailServiceImpl.java new file mode 100644 index 0000000..f32af86 --- /dev/null +++ b/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 details) { + detailMapper.insertBatch(details); + } + + @Override + public void createOrUpdateDetailList(List details) { + detailMapper.insertOrUpdate(details); + } + + @Override + public List getDetailListByResultId(Long resultId) { + return detailMapper.selectListByResultId(resultId); + } + + @Override + public void deleteDetailByResultId(Long resultId) { + detailMapper.delete(new LambdaQueryWrapperX() + .eq(MesQcIndicatorResultDetailDO::getResultId, resultId)); + } + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultServiceImpl.java index f6c3c1d..3791a98 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcIndicatorResultServiceImpl.java +++ b/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,9 +43,11 @@ 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 @Lazy @@ -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 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 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 getIndicatorResultDetailListByResultId(Long resultId) { - return resultDetailMapper.selectListByResultId(resultId); + return resultDetailService.getDetailListByResultId(resultId); } // ==================== 私有方法 ==================== @@ -127,6 +132,22 @@ public class MesQcIndicatorResultServiceImpl implements MesQcIndicatorResultServ } /** + * 校验所有明细的 indicatorId 是否存在 + */ + private void validateIndicatorIds(List items) { + if (CollUtil.isEmpty(items)) { + return; + } + Set indicatorIds = convertSet(items, MesQcIndicatorResultSaveReqVO.Item::getIndicatorId); + List indicators = indicatorService.getIndicatorList(indicatorIds); + if (indicators.size() != indicatorIds.size()) { + Set existIds = convertSet(indicators, MesQcIndicatorDO::getId); + indicatorIds.removeAll(existIds); + throw exception(QC_INDICATOR_NOT_EXISTS); + } + } + + /** * 根据 qcType 查询源质检单,获取 itemId */ private Long getItemIdFromQcDoc(Long qcId, Integer qcType) { -- libgit2 0.21.4