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; + } + /** * 修改检验任务主 */