|
|
|
@ -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<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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|