|
@@ -1,32 +1,33 @@
|
|
|
package com.qmth.distributed.print.business.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.qmth.distributed.print.business.entity.ExamTask;
|
|
|
import com.qmth.distributed.print.business.entity.TFFlowApprove;
|
|
|
import com.qmth.distributed.print.business.entity.TFFlowLog;
|
|
|
import com.qmth.distributed.print.business.service.ActivitiService;
|
|
|
+import com.qmth.distributed.print.business.service.ExamTaskService;
|
|
|
import com.qmth.distributed.print.business.service.TFFlowApproveService;
|
|
|
import com.qmth.distributed.print.business.service.TFFlowLogService;
|
|
|
import com.qmth.teachcloud.common.contant.SpringContextHolder;
|
|
|
import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
|
import com.qmth.teachcloud.common.entity.SysUser;
|
|
|
import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
|
|
|
+import com.qmth.teachcloud.common.enums.FlowApproveOperationEnum;
|
|
|
import com.qmth.teachcloud.common.enums.FlowGdykdxApproveSetupEnum;
|
|
|
import com.qmth.teachcloud.common.enums.FlowStatusEnum;
|
|
|
import com.qmth.teachcloud.common.util.ServletUtil;
|
|
|
-import org.activiti.bpmn.model.*;
|
|
|
-import org.activiti.bpmn.model.Process;
|
|
|
+import org.activiti.bpmn.model.BpmnModel;
|
|
|
+import org.activiti.bpmn.model.FlowNode;
|
|
|
+import org.activiti.bpmn.model.UserTask;
|
|
|
import org.activiti.engine.HistoryService;
|
|
|
import org.activiti.engine.RepositoryService;
|
|
|
import org.activiti.engine.RuntimeService;
|
|
|
import org.activiti.engine.TaskService;
|
|
|
import org.activiti.engine.impl.RepositoryServiceImpl;
|
|
|
-import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
|
|
|
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
|
|
|
-import org.activiti.engine.impl.persistence.entity.TaskEntity;
|
|
|
import org.activiti.engine.repository.DeploymentBuilder;
|
|
|
import org.activiti.engine.runtime.ProcessInstance;
|
|
|
import org.activiti.engine.task.Task;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -36,7 +37,10 @@ import org.springframework.web.multipart.MultipartFile;
|
|
|
import javax.annotation.Resource;
|
|
|
import java.io.File;
|
|
|
import java.io.IOException;
|
|
|
-import java.util.*;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
|
|
|
/**
|
|
|
* @Description: activiti service impl
|
|
@@ -67,6 +71,9 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
@Resource
|
|
|
HistoryService historyService;
|
|
|
|
|
|
+ @Resource
|
|
|
+ ExamTaskService examTaskService;
|
|
|
+
|
|
|
/**
|
|
|
* 注册流程
|
|
|
*
|
|
@@ -139,7 +146,7 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
log.info("流程id:{},processInstanceId:{},processDefinitionId:{},processDefinitionKey:{}", processInstance.getId(), processInstance.getProcessInstanceId(), processInstance.getProcessDefinitionId(), processInstance.getProcessDefinitionKey());
|
|
|
ProcessInstance finalProcessInstance = processInstance;
|
|
|
map.computeIfAbsent(SystemConstant.FLOW_ID, v -> finalProcessInstance.getId());
|
|
|
- map.computeIfAbsent(SystemConstant.FLOW_STATUS, v -> FlowStatusEnum.TO_BE_SUBMIT);
|
|
|
+ map.computeIfAbsent(SystemConstant.FLOW_STATUS, v -> FlowStatusEnum.START);
|
|
|
ActivitiService activitiService = SpringContextHolder.getBean(ActivitiService.class);
|
|
|
activitiService.flowStart(map);
|
|
|
return processInstance;
|
|
@@ -182,7 +189,7 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
if (Objects.isNull(map.get(SystemConstant.FLOW_ID))) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("流程id不能为空");
|
|
|
}
|
|
|
- Long flowId = (Long) map.get(SystemConstant.FLOW_ID);
|
|
|
+ Long flowId = Long.parseLong(map.get(SystemConstant.FLOW_ID).toString());
|
|
|
|
|
|
if (Objects.isNull(map.get(SystemConstant.FLOW_STATUS))) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("流程状态不能为空");
|
|
@@ -193,37 +200,6 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
tfFlowApproveService.save(new TFFlowApprove(flowId, approveId, flowStatusEnum, sysUser.getId()));
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 记录流程日志
|
|
|
- *
|
|
|
- * @param map
|
|
|
- */
|
|
|
- @Override
|
|
|
- @Transactional
|
|
|
- public void flowLog(Map<String, Object> map) {
|
|
|
- SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
|
|
|
-
|
|
|
- if (Objects.isNull(map.get(SystemConstant.FLOW_ID))) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("流程id不能为空");
|
|
|
- }
|
|
|
- Long flowId = (Long) map.get(SystemConstant.FLOW_ID);
|
|
|
-
|
|
|
- Long taskId = null;
|
|
|
- if (Objects.nonNull(map.get(SystemConstant.TASK_ID))) {
|
|
|
- taskId = (Long) map.get(SystemConstant.TASK_ID);
|
|
|
- }
|
|
|
-
|
|
|
- if (Objects.isNull(map.get(SystemConstant.FLOW_STATUS))) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("流程状态不能为空");
|
|
|
- }
|
|
|
- FlowStatusEnum flowStatusEnum = (FlowStatusEnum) map.get(SystemConstant.FLOW_STATUS);
|
|
|
-
|
|
|
- Long approveId = Objects.nonNull(map.get(SystemConstant.APPROVE_ID)) ? Long.parseLong(String.valueOf(map.get(SystemConstant.APPROVE_ID))) : null;
|
|
|
- //增加流水
|
|
|
- ActivitiService activitiService = SpringContextHolder.getBean(ActivitiService.class);
|
|
|
- TFFlowLog tfFlowLog = new TFFlowLog(flowId, taskId, approveId, sysUser.getId());
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 审批任务
|
|
|
*
|
|
@@ -239,6 +215,10 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
String flowTaskId = (String) map.get(SystemConstant.FLOW_TASK_ID);
|
|
|
Task task = taskService.createTaskQuery().taskId(flowTaskId).singleResult();
|
|
|
String processInstanceId = task.getProcessInstanceId();
|
|
|
+ QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
|
|
|
+ examTaskQueryWrapper.lambda().eq(ExamTask::getFlowId, Long.parseLong(processInstanceId));
|
|
|
+ ExamTask examTask = examTaskService.getOne(examTaskQueryWrapper);
|
|
|
+
|
|
|
String processDefinitionId = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().getProcessDefinitionId();
|
|
|
ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processDefinitionId);
|
|
|
String currActivityId = task.getTaskDefinitionKey();
|
|
@@ -247,12 +227,17 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
QueryWrapper<TFFlowApprove> tfFlowApproveQueryWrapper = new QueryWrapper<>();
|
|
|
tfFlowApproveQueryWrapper.lambda().eq(TFFlowApprove::getFlowId, processInstanceId);
|
|
|
TFFlowApprove tfFlowApprove = tfFlowApproveService.getOne(tfFlowApproveQueryWrapper);
|
|
|
+ TFFlowLog tfFlowLog = null;
|
|
|
if (currFlow instanceof UserTask) {
|
|
|
UserTask userTask = (UserTask) currFlow;
|
|
|
//广东医科大学流程
|
|
|
if (Objects.nonNull(processDefinitionEntity) && processDefinitionEntity.getKey().contains(SystemConstant.GDYKDX_FLOW_KEY)) {
|
|
|
+ String remark = Objects.nonNull(map.get(SystemConstant.APPROVE_REMARK)) ? map.get(SystemConstant.APPROVE_REMARK).toString() : null;
|
|
|
+ tfFlowLog = new TFFlowLog(Long.parseLong(processInstanceId), examTask.getId(), sysUser.getId(), sysUser.getId(), remark);
|
|
|
FlowGdykdxApproveSetupEnum setupEnum = FlowGdykdxApproveSetupEnum.convertToInstance(userTask.getId());
|
|
|
if (setupEnum == FlowGdykdxApproveSetupEnum.SUBMIT) {//命题提交
|
|
|
+ tfFlowLog.setApproveSetup(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup());
|
|
|
+ tfFlowLog.setApproveOperation(FlowApproveOperationEnum.SUBMIT);
|
|
|
tfFlowApprove.setStatus(FlowStatusEnum.AUDITING);
|
|
|
tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup());
|
|
|
} else if (setupEnum == FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE) {//主任提交
|
|
@@ -260,10 +245,13 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
throw ExceptionResultEnum.ERROR.exception("流程变量不能为空");
|
|
|
}
|
|
|
String approve = map.get(SystemConstant.APPROVE).toString();
|
|
|
+ tfFlowLog.setApproveSetup(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup());
|
|
|
if (Objects.equals(approve, "0")) {//驳回命题
|
|
|
+ tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
|
|
|
tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
|
|
|
tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup());
|
|
|
} else if (Objects.equals(approve, "1")) {//提交
|
|
|
+ tfFlowLog.setApproveOperation(FlowApproveOperationEnum.APPROVE);
|
|
|
tfFlowApprove.setStatus(FlowStatusEnum.AUDITING);
|
|
|
tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup());
|
|
|
} else {
|
|
@@ -274,13 +262,17 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
throw ExceptionResultEnum.ERROR.exception("流程变量不能为空");
|
|
|
}
|
|
|
String approve = map.get(SystemConstant.APPROVE).toString();
|
|
|
+ tfFlowLog.setApproveSetup(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup());
|
|
|
if (Objects.equals(approve, "0")) {//驳回命题
|
|
|
+ tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
|
|
|
tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
|
|
|
tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup());
|
|
|
} else if (Objects.equals(approve, "1")) {//驳回主任
|
|
|
+ tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
|
|
|
tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
|
|
|
tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup());
|
|
|
} else if (Objects.equals(approve, "2")) {//提交
|
|
|
+ tfFlowLog.setApproveOperation(FlowApproveOperationEnum.APPROVE);
|
|
|
tfFlowApprove.setStatus(FlowStatusEnum.FINISH);
|
|
|
tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.END.getSetup());
|
|
|
} else {
|
|
@@ -290,10 +282,12 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
tfFlowApprove.updateInfo(sysUser.getId());
|
|
|
}
|
|
|
}
|
|
|
+ tfFlowApprove.setApproveId(sysUser.getId());
|
|
|
//当前实例的执行到哪个节点
|
|
|
taskService.complete(String.valueOf(flowTaskId), map);
|
|
|
tfFlowApproveService.saveOrUpdate(tfFlowApprove);
|
|
|
-// ActivitiService activitiService = SpringContextHolder.getBean(ActivitiService.class);
|
|
|
-// activitiService.flowLog(map);
|
|
|
+ if (Objects.nonNull(tfFlowLog)) {
|
|
|
+ tfFlowLogService.save(tfFlowLog);
|
|
|
+ }
|
|
|
}
|
|
|
}
|