|
|
|
|
@ -1,38 +1,33 @@
|
|
|
|
|
package org.dromara.qms.service.impl;
|
|
|
|
|
|
|
|
|
|
import com.alibaba.ttl.TtlRunnable;
|
|
|
|
|
import io.seata.spring.annotation.GlobalTransactional;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
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.DateUtils;
|
|
|
|
|
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;
|
|
|
|
|
import org.dromara.qms.domain.bo.QcInspectionResultBo;
|
|
|
|
|
import org.dromara.qms.domain.bo.QcInspectionTemplateBo;
|
|
|
|
|
import org.dromara.qms.domain.bo.QcTemplateItemBo;
|
|
|
|
|
import org.dromara.qms.domain.bo.*;
|
|
|
|
|
import org.dromara.qms.domain.vo.*;
|
|
|
|
|
import org.dromara.qms.service.*;
|
|
|
|
|
import org.dromara.system.api.RemoteCodeRuleService;
|
|
|
|
|
import org.dromara.workflow.api.RemoteWorkflowService;
|
|
|
|
|
import org.dromara.workflow.api.domain.RemoteCompleteTask;
|
|
|
|
|
import org.dromara.workflow.api.domain.RemoteStartProcess;
|
|
|
|
|
import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
|
|
|
|
|
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.common.core.utils.MapstructUtils;
|
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* PDA接口Service业务层处理
|
|
|
|
|
@ -40,11 +35,13 @@ import java.util.UUID;
|
|
|
|
|
* @author YinQ
|
|
|
|
|
* @date 2025-07-24
|
|
|
|
|
*/
|
|
|
|
|
@Slf4j
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
|
@Service
|
|
|
|
|
@DubboService
|
|
|
|
|
public class QcPDAServiceImpl implements IQcPDAService {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final IQcInspectionMainService qcInspectionMainService;
|
|
|
|
|
|
|
|
|
|
//质检结果子表
|
|
|
|
|
@ -59,12 +56,19 @@ public class QcPDAServiceImpl implements IQcPDAService {
|
|
|
|
|
//不合格记录子表
|
|
|
|
|
private final IQcUnqualifiedRecordService qcUnqualifiedRecordService;
|
|
|
|
|
|
|
|
|
|
private final IQcInspectionMainFileRelationService qcInspectionMainFileRelationService;
|
|
|
|
|
|
|
|
|
|
@DubboReference
|
|
|
|
|
private final RemotePdaMesApiService remotePdaMesApiService;
|
|
|
|
|
|
|
|
|
|
@DubboReference
|
|
|
|
|
private final RemoteCodeRuleService remoteCodeRuleService;
|
|
|
|
|
|
|
|
|
|
//WARM-FLOW工作流
|
|
|
|
|
@DubboReference(timeout = 30000)
|
|
|
|
|
private final RemoteWorkflowService remoteWorkflowService;
|
|
|
|
|
private static final String UNQUALIFIED_REVIEW_FLOW_CODE = "unqualified_review";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 通过planDetailId和processId生成质检任务
|
|
|
|
|
@ -145,6 +149,17 @@ public class QcPDAServiceImpl implements IQcPDAService {
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public Boolean submitInspection(QcInspectionMainBo bo) {
|
|
|
|
|
|
|
|
|
|
// 保存文件
|
|
|
|
|
List<Long> ossIds = bo.getOssIds();
|
|
|
|
|
for (Long ossId : ossIds){
|
|
|
|
|
QcInspectionMainFileRelationBo relation = new QcInspectionMainFileRelationBo();
|
|
|
|
|
relation.setInspectionId(bo.getInspectionId());
|
|
|
|
|
relation.setOssId(ossId);
|
|
|
|
|
qcInspectionMainFileRelationService.insertByBo(relation);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 根据传入的检验ID查询主记录信息
|
|
|
|
|
Long inspectionId = bo.getInspectionId();
|
|
|
|
|
Date nowDate = DateUtils.getNowDate();
|
|
|
|
|
@ -303,6 +318,7 @@ public class QcPDAServiceImpl implements IQcPDAService {
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@GlobalTransactional(rollbackFor = Exception.class)
|
|
|
|
|
public Boolean handleUnqualified(String dispositionType, Long[] reviewIds) {
|
|
|
|
|
for (Long reviewId : reviewIds) {
|
|
|
|
|
QcUnqualifiedReviewVo reviewVo = qcUnqualifiedReviewService.queryById(reviewId);
|
|
|
|
|
@ -312,13 +328,58 @@ public class QcPDAServiceImpl implements IQcPDAService {
|
|
|
|
|
if (StringUtils.isNotEmpty(reviewVo.getReviewResult()) ) {
|
|
|
|
|
throw new ServiceException("此不合格评审单已评审");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//集成工作流
|
|
|
|
|
RemoteStartProcess startProcess = new RemoteStartProcess();
|
|
|
|
|
startProcess.setBusinessId(String.valueOf(reviewId));
|
|
|
|
|
startProcess.setFlowCode(UNQUALIFIED_REVIEW_FLOW_CODE);
|
|
|
|
|
RemoteStartProcessReturn remoteStartProcessReturn = remoteWorkflowService.startWorkFlow(startProcess);
|
|
|
|
|
Long processInstanceId = remoteStartProcessReturn.getProcessInstanceId();
|
|
|
|
|
Long taskId = remoteStartProcessReturn.getTaskId();
|
|
|
|
|
|
|
|
|
|
// 更新数据
|
|
|
|
|
QcUnqualifiedReviewBo reviewBo = new QcUnqualifiedReviewBo();
|
|
|
|
|
reviewBo.setReviewId(reviewId);
|
|
|
|
|
reviewBo.setReviewResult(dispositionType);
|
|
|
|
|
reviewBo.setReviewer(LoginHelper.getUsername());
|
|
|
|
|
reviewBo.setReviewStartTime(new Date());
|
|
|
|
|
reviewBo.setProcessInstanceId(processInstanceId);// 流程实例ID
|
|
|
|
|
qcUnqualifiedReviewService.updateByBo(reviewBo);
|
|
|
|
|
//集成工作流
|
|
|
|
|
|
|
|
|
|
//异步推动流程
|
|
|
|
|
final Long finalTaskId = taskId;
|
|
|
|
|
CompletableFuture.runAsync(TtlRunnable.get(() -> {
|
|
|
|
|
RemoteCompleteTask completeTask = new RemoteCompleteTask();
|
|
|
|
|
completeTask.setTaskId(finalTaskId);
|
|
|
|
|
completeTask.setMessage("启动不合格评审,处置类型: " + dispositionType);
|
|
|
|
|
|
|
|
|
|
// 设置消息类型
|
|
|
|
|
List<String> messageTypes = new ArrayList<>();
|
|
|
|
|
messageTypes.add("1"); // 站内信
|
|
|
|
|
completeTask.setMessageType(messageTypes);
|
|
|
|
|
|
|
|
|
|
// 设置流程变量
|
|
|
|
|
Map<String, Object> variables = new HashMap<>();
|
|
|
|
|
variables.put("reviewResult", dispositionType);
|
|
|
|
|
completeTask.setVariables(variables);
|
|
|
|
|
|
|
|
|
|
remoteWorkflowService.completeTask(completeTask);
|
|
|
|
|
}));
|
|
|
|
|
// RemoteCompleteTask completeTask = new RemoteCompleteTask();
|
|
|
|
|
// completeTask.setTaskId(finalTaskId);
|
|
|
|
|
// completeTask.setMessage("启动不合格评审,处置类型: " + dispositionType);
|
|
|
|
|
//
|
|
|
|
|
// // 设置消息类型
|
|
|
|
|
// List<String> messageTypes = new ArrayList<>();
|
|
|
|
|
// messageTypes.add("1"); // 站内信
|
|
|
|
|
// completeTask.setMessageType(messageTypes);
|
|
|
|
|
//
|
|
|
|
|
// // 设置流程变量
|
|
|
|
|
// Map<String, Object> variables = new HashMap<>();
|
|
|
|
|
// variables.put("reviewResult", dispositionType);
|
|
|
|
|
// completeTask.setVariables(variables);
|
|
|
|
|
//
|
|
|
|
|
// remoteWorkflowService.completeTask(completeTask);
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|