From 74e5bd66a4becd40fee40dc00fb63171035a97d6 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Sat, 16 May 2026 10:05:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(qc):=20=E6=96=B0=E5=A2=9E=E6=A3=80?= =?UTF-8?q?=E9=AA=8C=E4=BB=BB=E5=8A=A1=E5=90=AB=E6=98=8E=E7=BB=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 IQcInspectionTaskService 中添加 insertByBoWithItems 方法接口 - 在 QcInspectionTaskController 中新增 addWithItems 接口支持检验任务含明细创建 - 在 QcInspectionTaskServiceImpl 中实现完整的检验任务含明细创建逻辑 - 集成检验方案模板查询、待检项明细获取、任务主表及明细批量保存功能 - 添加事务管理确保数据一致性,并增加详细的日志记录和异常处理机制 --- .../QcInspectionTaskController.java | 10 ++ .../qc/service/IQcInspectionTaskService.java | 5 + .../impl/QcInspectionTaskServiceImpl.java | 108 ++++++++++++++++++ 3 files changed, 123 insertions(+) diff --git a/klp-mes/src/main/java/com/klp/mes/qc/controller/QcInspectionTaskController.java b/klp-mes/src/main/java/com/klp/mes/qc/controller/QcInspectionTaskController.java index d62e9c02..d33dbce0 100644 --- a/klp-mes/src/main/java/com/klp/mes/qc/controller/QcInspectionTaskController.java +++ b/klp-mes/src/main/java/com/klp/mes/qc/controller/QcInspectionTaskController.java @@ -75,6 +75,16 @@ public class QcInspectionTaskController extends BaseController { return toAjax(iQcInspectionTaskService.insertByBo(bo)); } + /** + * 新增检验任务(包含明细) + */ + @Log(title = "新增检验任务含明细", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/addWithItems") + public R addWithItems(@Validated(AddGroup.class) @RequestBody QcInspectionTaskBo bo) { + return toAjax(iQcInspectionTaskService.insertByBoWithItems(bo)); + } + /** * 修改检验任务主 */ diff --git a/klp-mes/src/main/java/com/klp/mes/qc/service/IQcInspectionTaskService.java b/klp-mes/src/main/java/com/klp/mes/qc/service/IQcInspectionTaskService.java index 9d517534..b758b57b 100644 --- a/klp-mes/src/main/java/com/klp/mes/qc/service/IQcInspectionTaskService.java +++ b/klp-mes/src/main/java/com/klp/mes/qc/service/IQcInspectionTaskService.java @@ -37,6 +37,11 @@ public interface IQcInspectionTaskService { */ Boolean insertByBo(QcInspectionTaskBo bo); + /** + * 新增检验任务(包含明细) + */ + Boolean insertByBoWithItems(QcInspectionTaskBo bo); + /** * 修改检验任务主 */ diff --git a/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcInspectionTaskServiceImpl.java b/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcInspectionTaskServiceImpl.java index 40b0958e..836f9e12 100644 --- a/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcInspectionTaskServiceImpl.java +++ b/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcInspectionTaskServiceImpl.java @@ -8,16 +8,26 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.klp.common.utils.StringUtils; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import com.klp.mes.qc.domain.bo.QcInspectionTaskBo; import com.klp.mes.qc.domain.vo.QcInspectionTaskVo; import com.klp.mes.qc.domain.QcInspectionTask; +import com.klp.mes.qc.domain.QcInspectionItem; import com.klp.mes.qc.mapper.QcInspectionTaskMapper; +import com.klp.mes.qc.mapper.QcInspectionItemMapper; +import com.klp.mes.qc.mapper.WmsCheckItemMapper; import com.klp.mes.qc.service.IQcInspectionTaskService; +import com.klp.mes.qc.domain.vo.WmsCheckItemVo; +import com.klp.mes.qc.domain.WmsInspectionItemTemplate; +import com.klp.mes.qc.mapper.WmsInspectionItemTemplateMapper; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.ArrayList; +import java.util.Date; /** * 检验任务主Service业务层处理 @@ -25,11 +35,15 @@ import java.util.Collection; * @author klp * @date 2026-05-15 */ +@Slf4j @RequiredArgsConstructor @Service public class QcInspectionTaskServiceImpl implements IQcInspectionTaskService { private final QcInspectionTaskMapper baseMapper; + private final QcInspectionItemMapper inspectionItemMapper; + private final WmsCheckItemMapper checkItemMapper; + private final WmsInspectionItemTemplateMapper templateMapper; /** * 查询检验任务主 @@ -91,6 +105,100 @@ public class QcInspectionTaskServiceImpl implements IQcInspectionTaskService { return flag; } + /** + * 新增检验任务(包含明细) + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBoWithItems(QcInspectionTaskBo bo) { + // 1. 校验schemeId + if (bo.getSchemeId() == null) { + log.error("检验方案ID不能为空"); + throw new IllegalArgumentException("检验方案ID不能为空"); + } + + // 2. 根据schemeId查询模板信息 + WmsInspectionItemTemplate template = templateMapper.selectById(bo.getSchemeId()); + if (template == null) { + log.error("未找到检验方案,schemeId: {}", bo.getSchemeId()); + throw new IllegalArgumentException("未找到检验方案"); + } + + // 3. 获取模板中的inspection_item(逗号分隔的ID字符串) + String inspectionItemIds = template.getInspectionItem(); + if (StringUtils.isBlank(inspectionItemIds)) { + log.warn("检验方案中未配置待检项,schemeId: {}", bo.getSchemeId()); + throw new IllegalArgumentException("检验方案中未配置待检项"); + } + + // 4. 拆分ID并转换为Long类型 + String[] itemIdArray = inspectionItemIds.split(","); + List itemIds = new ArrayList<>(); + for (String id : itemIdArray) { + if (StringUtils.isNotBlank(id)) { + try { + itemIds.add(Long.valueOf(id.trim())); + } catch (NumberFormatException e) { + log.warn("无效的待检项ID: {}", id); + } + } + } + + // 5. 如果没有有效的ID,抛出异常 + if (itemIds.isEmpty()) { + log.error("检验方案中没有有效的待检项ID"); + throw new IllegalArgumentException("检验方案中没有有效的待检项ID"); + } + + // 6. 批量查询所有待检项信息 + List checkItems = checkItemMapper.selectVoListByIds(itemIds); + + if (checkItems == null || checkItems.isEmpty()) { + log.error("未找到待检项明细信息"); + throw new IllegalArgumentException("未找到待检项明细信息"); + } + + // 7. 保存检验任务主表 + QcInspectionTask task = BeanUtil.toBean(bo, QcInspectionTask.class); + validEntityBeforeSave(task); + boolean flag = baseMapper.insert(task) > 0; + if (!flag) { + log.error("检验任务主表保存失败"); + throw new RuntimeException("检验任务主表保存失败"); + } + + // 8. 根据待检项明细创建检验任务明细 + Long taskId = task.getTaskId(); + List inspectionItems = new ArrayList<>(); + Date now = new Date(); + + for (WmsCheckItemVo checkItem : checkItems) { + QcInspectionItem item = new QcInspectionItem(); + item.setTaskId(taskId); + item.setItemName(checkItem.getItemName()); + item.setStandardValue(checkItem.getStandardTarget() != null ? checkItem.getStandardTarget().toString() : null); + item.setUpperLimit(checkItem.getTargetUpper()); + item.setLowerLimit(checkItem.getTargetLower()); + item.setUnit(checkItem.getUnit()); + item.setItemType(checkItem.getQualitativeQuantitative() != null && checkItem.getQualitativeQuantitative() == 1 ? "定量" : "定性"); + item.setInspectUser(task.getInspectUser()); + item.setDelFlag(0); + item.setCreateTime(now); + item.setCreateBy(task.getCreateBy()); + inspectionItems.add(item); + } + + // 9. 批量插入检验任务明细 + if (!inspectionItems.isEmpty()) { + for (QcInspectionItem item : inspectionItems) { + inspectionItemMapper.insert(item); + } + } + + log.info("检验任务创建成功,taskId: {}, 明细数量: {}", taskId, inspectionItems.size()); + return true; + } + /** * 修改检验任务主 */