feat(qms): 从 PDA 提交检测结果并生成不合格评审

- 在 IQcPDAService 接口中添加 submitInspection 方法
- 在 QcPDAController 中添加 submitInspection 控制器
- 在 QcPDAServiceImpl 中实现 submitInspection 方法的业务逻辑
- 如果 PDA不合格提交 ,需要生成不合格品评审单
- 新增不合格评审和不合格记录的插入逻辑
master
zch 6 days ago
parent c2a00cbbf9
commit ba63a661dd

@ -93,4 +93,20 @@ public class QcPDAController {
return R.fail("生成质检任务失败");
}
}
/**
* PDA
*
*/
@PostMapping("/submitInspection")
public R<Boolean> submitInspection(@RequestBody @Valid QcInspectionMainBo bo) {
Boolean result = qcPDAService.submitInspection(bo);
if (result != null && result) {
return R.ok(true);
} else {
return R.fail("Submission failed");
}
}
}

@ -2,6 +2,7 @@ package org.dromara.qms.service;
import org.dromara.pda.api.model.bo.GenerateInspectionTaskBo;
import org.dromara.qms.domain.bo.QcInspectionMainBo;
/**
* PDAService
@ -16,5 +17,9 @@ public interface IQcPDAService {
*/
Boolean generateInspectionTask(GenerateInspectionTaskBo bo);
/**
* PDA
*/
Boolean submitInspection(QcInspectionMainBo bo);
}

@ -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;
/**
* PDAService
@ -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<QcInspectionTemplateVo> 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;
}
}

Loading…
Cancel
Save