From ba63a661dd1d68a37759510babfe6682674ff25d Mon Sep 17 00:00:00 2001 From: zch Date: Fri, 25 Jul 2025 16:45:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(qms):=20=E4=BB=8E=20PDA=20=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E6=A3=80=E6=B5=8B=E7=BB=93=E6=9E=9C=E5=B9=B6=E7=94=9F?= =?UTF-8?q?=E6=88=90=E4=B8=8D=E5=90=88=E6=A0=BC=E8=AF=84=E5=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 IQcPDAService 接口中添加 submitInspection 方法 - 在 QcPDAController 中添加 submitInspection 控制器 - 在 QcPDAServiceImpl 中实现 submitInspection 方法的业务逻辑 - 如果 PDA不合格提交 ,需要生成不合格品评审单 - 新增不合格评审和不合格记录的插入逻辑 --- .../qms/controller/QcPDAController.java | 16 ++ .../dromara/qms/service/IQcPDAService.java | 5 + .../qms/service/impl/QcPDAServiceImpl.java | 141 +++++++++++++++++- 3 files changed, 159 insertions(+), 3 deletions(-) diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcPDAController.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcPDAController.java index 7bb0b52..8419dd4 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcPDAController.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcPDAController.java @@ -93,4 +93,20 @@ public class QcPDAController { return R.fail("生成质检任务失败"); } } + + /** + * 从PDA提交检测结果 + * 如果不合格,生成不合格评审 + */ + @PostMapping("/submitInspection") + public R submitInspection(@RequestBody @Valid QcInspectionMainBo bo) { + Boolean result = qcPDAService.submitInspection(bo); + if (result != null && result) { + return R.ok(true); + } else { + return R.fail("Submission failed"); + } + } + + } diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/IQcPDAService.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/IQcPDAService.java index 1c2bee8..5fb2249 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/IQcPDAService.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/IQcPDAService.java @@ -2,6 +2,7 @@ package org.dromara.qms.service; import org.dromara.pda.api.model.bo.GenerateInspectionTaskBo; +import org.dromara.qms.domain.bo.QcInspectionMainBo; /** * PDA接口Service接口 @@ -16,5 +17,9 @@ public interface IQcPDAService { */ Boolean generateInspectionTask(GenerateInspectionTaskBo bo); + /** + * 从PDA提交检测结果 + */ + Boolean submitInspection(QcInspectionMainBo bo); } diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcPDAServiceImpl.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcPDAServiceImpl.java index 2e59749..22bb289 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcPDAServiceImpl.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcPDAServiceImpl.java @@ -6,6 +6,8 @@ import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboService; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.core.utils.uuid.IdUtils; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.pda.api.RemotePdaMesApiService; import org.dromara.pda.api.model.ProdQmsPlanDetail; import org.dromara.pda.api.model.bo.GenerateInspectionTaskBo; @@ -17,11 +19,20 @@ import org.dromara.qms.domain.vo.QcInspectionTemplateVo; import org.dromara.qms.domain.vo.QcTemplateItemVo; import org.dromara.qms.service.*; import org.dromara.system.api.RemoteCodeRuleService; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.dromara.qms.domain.bo.QcInspectionMainBo; +import org.dromara.common.core.domain.R; import org.springframework.transaction.annotation.Transactional; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.qms.domain.bo.QcUnqualifiedReviewBo; +import org.dromara.qms.domain.bo.QcUnqualifiedRecordBo; +import org.dromara.qms.domain.vo.QcInspectionResultVo; +import org.dromara.common.core.utils.MapstructUtils; +import java.util.Date; import java.util.List; +import java.util.UUID; /** * PDA接口Service业务层处理 @@ -43,6 +54,11 @@ public class QcPDAServiceImpl implements IQcPDAService { private final IQcTemplateItemService qcTemplateItemService; + //不合格待审主表 + private final IQcUnqualifiedReviewService qcUnqualifiedReviewService; + //不合格记录子表 + private final IQcUnqualifiedRecordService qcUnqualifiedRecordService; + @DubboReference private final RemotePdaMesApiService remotePdaMesApiService; @@ -73,9 +89,7 @@ public class QcPDAServiceImpl implements IQcPDAService { String materialCode = planDetail.getMaterialCode(); QcInspectionTemplateBo templateBo = new QcInspectionTemplateBo(); templateBo.setMaterialCode(materialCode); - if (StringUtils.isNotEmpty(bo.getQcInspectionType())) { - templateBo.setQcInspectionType(bo.getQcInspectionType()); - } +// templateBo.setQcInspectionType(); List templateVos = qcInspectionTemplateService.queryList(templateBo); if (templateVos.size() != 1) { throw new ServiceException("此物料无可用检测模板!"); @@ -126,4 +140,125 @@ public class QcPDAServiceImpl implements IQcPDAService { } return true; } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean submitInspection(QcInspectionMainBo bo) { + // 根据传入的检验ID查询主记录信息 + QcInspectionMainVo main = qcInspectionMainService.queryById(bo.getInspectionId()); + if (main == null) { + // 如果未找到对应的主记录,抛出异常提示任务不存在 + throw new ServiceException("任务不存在!"); + } + + // 标记是否存在不合格项,默认为false(合格) + boolean isUnqualified = false; + // 遍历提交的所有检测结果 + for (QcInspectionResultBo resultBo : bo.getResults()) { + // 根据结果ID查询已有的结果详情 + QcInspectionResultVo existingResult = qcInspectionResultService.queryById(resultBo.getResultId()); + if (existingResult == null || !existingResult.getInspectionId().equals(bo.getInspectionId())) { + // 如果结果不存在或不属于当前检验任务,则视为无效ID,抛出异常 + throw new ServiceException("结果不存在或不属于当前检验任务!"); + } + // 将修改后的对象转换为BO并调用服务进行持久化更新 + qcInspectionResultService.updateByBo(resultBo); + + // 在循环中更新不合格检查 + // 如果该条结果是不合格('1'表示不合格) + if ("1".equals(resultBo.getDetectResult())) { + isUnqualified = true; + } + } + + // 更新状态和结果 + // 设置单据状态为完成('1') + bo.setStatus("1");//单据状态(0未处理/1完成) + // 设置质检结果:'1'表示不合格,'0'表示合格 + bo.setResult(isUnqualified ? "1" : "0"); + // 更新主记录 + qcInspectionMainService.updateByBo(bo); + + // 如果存在不合格项,则需要创建不合格评审流程及相关记录 + if (isUnqualified) { + // 构建一个新的不合格评审业务对象 + QcUnqualifiedReviewBo reviewBo = new QcUnqualifiedReviewBo(); + // 设置不合格检测单号 + reviewBo.setUnqualifiedReviewNo(IdUtils.fastSimpleUUID()); + // 关联原检验单号,质检单号 + reviewBo.setInspectionNo(main.getInspectionNo()); + BeanUtils.copyProperties(bo, reviewBo); + // 复制检验类型信息 + reviewBo.setInspectionType(main.getInspectionType()); + // 关联生产工单号 + reviewBo.setWorkOrderNo(main.getProductionOrder()); + // 复制工序名称 + reviewBo.setProcessName(main.getProcessName()); + // 复制物料名称 + reviewBo.setMaterialName(main.getMaterialName()); + // 复制物料编码 + reviewBo.setMaterialCode(main.getMaterialCode()); +// reviewBo.setMaterialSpec(main.getMaterialSpec()); + reviewBo.setSupplierName(main.getSupplierName()); + // 复制检验数量 + reviewBo.setInspectionQty(main.getInspectionQty()); + // 假设条形码作为批次号使用 + reviewBo.setBatchNo(main.getBarcode()); + // 设置当前登录用户的用户名作为检验员 + reviewBo.setInspector(LoginHelper.getUsername()); + // 设置当前用户的ID作为检验员ID + reviewBo.setInspectorId(LoginHelper.getUserId()); + // 记录当前日期为生产日期 + reviewBo.setProductionDate(new Date()); + // TODO: 可根据需求补充其他必要字段 + + // 插入不合格评审记录到数据库 + Boolean b = qcUnqualifiedReviewService.insertByBo(reviewBo); + + // 再次遍历所有检测结果,针对每个不合格项创建详细记录 + for (QcInspectionResultBo resultBo : bo.getResults()) { + if ("1".equals(resultBo.getDetectResult())) {//检测结果(0合格,1不合格,2未判定) + // 创建一条不合格明细记录对象 + QcUnqualifiedRecordBo recordBo = new QcUnqualifiedRecordBo(); + // 关联所属的评审ID + recordBo.setReviewId(reviewBo.getReviewId()); + BeanUtils.copyProperties(resultBo, recordBo); + // 设置项目编码 + recordBo.setItemCode(resultBo.getItemCode()); + // 设置项目名称 + recordBo.setItemName(resultBo.getItemName()); + // 设置检验位置 + recordBo.setInspectionPosition(resultBo.getInspectionPosition()); + // 转换分类名称为Long类型并设置 + recordBo.setCategoryName(Long.valueOf(resultBo.getCategoryName())); + // 设置类型ID + recordBo.setTypeId(resultBo.getTypeId()); + // recordBo.setInspectionMethod(); // 如果需要可补充检验方法字段 + // 设置检测类型 + recordBo.setDetectType(resultBo.getDetectType()); + // 设置检测结果(是否合格) + recordBo.setDetectResult(resultBo.getDetectResult()); + // 设置检测的具体数值 + recordBo.setDetectValue(resultBo.getDetectValue()); + // 设置上限标准值 + recordBo.setUpperLimit(resultBo.getUpperLimit()); + // 设置下限标准值 + recordBo.setLowerLimit(resultBo.getLowerLimit()); + // 调整规格名称作为特殊检验值存储 + recordBo.setSpecInspectionValue(resultBo.getSpecName()); // Adjust + // 设置规格上限 + recordBo.setSpecUpper(resultBo.getSpecUpper()); + // 设置规格下限 + recordBo.setSpecLower(resultBo.getSpecLower()); + // 设置相关描述信息 + recordBo.setDescription(resultBo.getDescription()); + + // 插入不合格明细记录到数据库 + qcUnqualifiedRecordService.insertByBo(recordBo); + } + } + } + // 方法执行成功返回true + return true; + } }