|
@@ -1,21 +1,23 @@
|
|
package com.qmth.distributed.print.business.service.impl;
|
|
package com.qmth.distributed.print.business.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
+import com.qmth.boot.api.exception.ApiException;
|
|
|
|
+import com.qmth.distributed.print.business.bean.result.FlowTaskResult;
|
|
import com.qmth.distributed.print.business.entity.ExamTask;
|
|
import com.qmth.distributed.print.business.entity.ExamTask;
|
|
import com.qmth.distributed.print.business.entity.TFFlowApprove;
|
|
import com.qmth.distributed.print.business.entity.TFFlowApprove;
|
|
|
|
+import com.qmth.distributed.print.business.entity.TFFlowApproveLog;
|
|
import com.qmth.distributed.print.business.entity.TFFlowLog;
|
|
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.distributed.print.business.enums.ExamStatusEnum;
|
|
|
|
+import com.qmth.distributed.print.business.service.*;
|
|
import com.qmth.teachcloud.common.contant.SpringContextHolder;
|
|
import com.qmth.teachcloud.common.contant.SpringContextHolder;
|
|
import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
import com.qmth.teachcloud.common.entity.SysUser;
|
|
import com.qmth.teachcloud.common.entity.SysUser;
|
|
import com.qmth.teachcloud.common.enums.*;
|
|
import com.qmth.teachcloud.common.enums.*;
|
|
|
|
+import com.qmth.teachcloud.common.util.RedisUtil;
|
|
|
|
+import com.qmth.teachcloud.common.util.ResultUtil;
|
|
import com.qmth.teachcloud.common.util.ServletUtil;
|
|
import com.qmth.teachcloud.common.util.ServletUtil;
|
|
-import org.activiti.bpmn.model.BpmnModel;
|
|
|
|
-import org.activiti.bpmn.model.FlowNode;
|
|
|
|
-import org.activiti.bpmn.model.UserTask;
|
|
|
|
|
|
+import org.activiti.bpmn.model.Process;
|
|
|
|
+import org.activiti.bpmn.model.*;
|
|
import org.activiti.engine.HistoryService;
|
|
import org.activiti.engine.HistoryService;
|
|
import org.activiti.engine.RepositoryService;
|
|
import org.activiti.engine.RepositoryService;
|
|
import org.activiti.engine.RuntimeService;
|
|
import org.activiti.engine.RuntimeService;
|
|
@@ -34,10 +36,7 @@ import org.springframework.web.multipart.MultipartFile;
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
import java.io.File;
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
-import java.util.HashMap;
|
|
|
|
-import java.util.List;
|
|
|
|
-import java.util.Map;
|
|
|
|
-import java.util.Objects;
|
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @Description: activiti service impl
|
|
* @Description: activiti service impl
|
|
@@ -51,13 +50,13 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
private final static Logger log = LoggerFactory.getLogger(ActivitiServiceImpl.class);
|
|
private final static Logger log = LoggerFactory.getLogger(ActivitiServiceImpl.class);
|
|
|
|
|
|
@Resource
|
|
@Resource
|
|
- private RuntimeService runtimeService;
|
|
|
|
|
|
+ RuntimeService runtimeService;
|
|
|
|
|
|
@Resource
|
|
@Resource
|
|
- private TaskService taskService;
|
|
|
|
|
|
+ TaskService taskService;
|
|
|
|
|
|
@Resource
|
|
@Resource
|
|
- private RepositoryService repositoryService;
|
|
|
|
|
|
+ RepositoryService repositoryService;
|
|
|
|
|
|
@Resource
|
|
@Resource
|
|
TFFlowApproveService tfFlowApproveService;
|
|
TFFlowApproveService tfFlowApproveService;
|
|
@@ -71,6 +70,12 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
@Resource
|
|
@Resource
|
|
ExamTaskService examTaskService;
|
|
ExamTaskService examTaskService;
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ TFFlowApproveLogService tfFlowApproveLogService;
|
|
|
|
+
|
|
|
|
+ @Resource
|
|
|
|
+ RedisUtil redisUtil;
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 注册流程
|
|
* 注册流程
|
|
*
|
|
*
|
|
@@ -169,8 +174,77 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
* @param flowId
|
|
* @param flowId
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public void deleteProcessInstance(String flowId) {
|
|
|
|
- runtimeService.deleteProcessInstance(flowId, "结束");
|
|
|
|
|
|
+ @Transactional
|
|
|
|
+ public void flowEnd(String flowId) {
|
|
|
|
+ Task task = taskService.createTaskQuery().processInstanceId(flowId).singleResult();
|
|
|
|
+ SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
|
|
|
|
+ runtimeService.deleteProcessInstance(flowId, FlowGdykdxApproveSetupEnum.END.getTitle());
|
|
|
|
+ //流程审批
|
|
|
|
+ QueryWrapper<TFFlowApprove> tfFlowApproveQueryWrapper = new QueryWrapper<>();
|
|
|
|
+ tfFlowApproveQueryWrapper.lambda().eq(TFFlowApprove::getFlowId, Long.parseLong(flowId));
|
|
|
|
+ TFFlowApprove tfFlowApprove = tfFlowApproveService.getOne(tfFlowApproveQueryWrapper);
|
|
|
|
+ if (Objects.isNull(tfFlowApprove)) {
|
|
|
|
+ tfFlowApprove = new TFFlowApprove(sysUser.getSchoolId(), sysUser.getOrgId(), Long.parseLong(flowId), sysUser.getId(), FlowStatusEnum.END, sysUser.getId());
|
|
|
|
+ } else {
|
|
|
|
+ tfFlowApprove.setStatus(FlowStatusEnum.END);
|
|
|
|
+ tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.END.getSetup());
|
|
|
|
+ tfFlowApprove.updateInfo(sysUser.getId());
|
|
|
|
+ }
|
|
|
|
+ tfFlowApproveService.saveOrUpdate(tfFlowApprove);
|
|
|
|
+
|
|
|
|
+ //流程流水日志
|
|
|
|
+ QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
|
|
|
|
+ examTaskQueryWrapper.lambda().eq(ExamTask::getFlowId, Long.parseLong(flowId));
|
|
|
|
+ ExamTask examTask = examTaskService.getOne(examTaskQueryWrapper);
|
|
|
|
+ TFFlowLog tfFlowLog = new TFFlowLog(sysUser.getSchoolId(), sysUser.getOrgId(), Long.parseLong(flowId), examTask.getId(), sysUser.getId(), sysUser.getId(), FlowGdykdxApproveSetupEnum.END.getTitle());
|
|
|
|
+ tfFlowLog.setApproveOperation(FlowApproveOperationEnum.END);
|
|
|
|
+ tfFlowLog.setApproveSetup(FlowGdykdxApproveSetupEnum.END.getSetup());
|
|
|
|
+ tfFlowLogService.save(tfFlowLog);
|
|
|
|
+
|
|
|
|
+ if (Objects.nonNull(task)) {
|
|
|
|
+ String processDefinitionId = historyService.createHistoricProcessInstanceQuery().processInstanceId(flowId).singleResult().getProcessDefinitionId();
|
|
|
|
+ ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processDefinitionId);
|
|
|
|
+ //获取当前流程节点
|
|
|
|
+ String currActivityId = task.getTaskDefinitionKey();
|
|
|
|
+ BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
|
|
|
|
+ FlowNode currFlow = (FlowNode) bpmnModel.getMainProcess().getFlowElement(currActivityId);
|
|
|
|
+ if (currFlow instanceof UserTask) {
|
|
|
|
+ UserTask userTask = (UserTask) currFlow;
|
|
|
|
+ //广东医科大学流程
|
|
|
|
+ if (Objects.nonNull(processDefinitionEntity) && processDefinitionEntity.getKey().contains(SystemConstant.GDYKDX_FLOW_KEY)) {
|
|
|
|
+ //流程审批记录
|
|
|
|
+ QueryWrapper<TFFlowApproveLog> tfFlowApproveLogQueryWrapper = new QueryWrapper<>();
|
|
|
|
+ tfFlowApproveLogQueryWrapper.lambda().eq(TFFlowApproveLog::getFlowId, Long.parseLong(flowId))
|
|
|
|
+ .eq(TFFlowApproveLog::getTaskId, examTask.getId());
|
|
|
|
+ TFFlowApproveLog tfFlowApproveLog = tfFlowApproveLogService.getOne(tfFlowApproveLogQueryWrapper);
|
|
|
|
+ if (Objects.isNull(tfFlowApproveLog)) {
|
|
|
|
+ tfFlowApproveLog = new TFFlowApproveLog(sysUser.getSchoolId(), sysUser.getOrgId(), Long.parseLong(flowId), examTask.getId(), sysUser.getId(), sysUser.getId());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ FlowGdykdxApproveSetupEnum setupEnum = FlowGdykdxApproveSetupEnum.convertToInstance(userTask.getId());
|
|
|
|
+ if (setupEnum == FlowGdykdxApproveSetupEnum.SUBMIT) {//命题
|
|
|
|
+ tfFlowApproveLog.setStartId(sysUser.getId());
|
|
|
|
+ tfFlowApproveLog.setRemark(FlowGdykdxApproveSetupEnum.SUBMIT.getTitle() + FlowApproveOperationEnum.END.getTitle());
|
|
|
|
+ } else if (setupEnum == FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE) {//主任
|
|
|
|
+ tfFlowApproveLog.setPrimaryApproveId(sysUser.getId());
|
|
|
|
+ tfFlowApproveLog.setPrimaryApproveOperation(FlowApproveOperationEnum.END);
|
|
|
|
+ tfFlowApproveLog.setPrimaryApproveRemark(FlowApproveOperationEnum.END.getTitle());
|
|
|
|
+ } else if (setupEnum == FlowGdykdxApproveSetupEnum.SECOND_APPROVE) {//院长
|
|
|
|
+ tfFlowApproveLog.setSecondApproveId(sysUser.getId());
|
|
|
|
+ tfFlowApproveLog.setSecondApproveOperation(FlowApproveOperationEnum.END);
|
|
|
|
+ tfFlowApproveLog.setSecondApproveRemark(FlowApproveOperationEnum.END.getTitle());
|
|
|
|
+ }
|
|
|
|
+ tfFlowApproveLog.updateInfo(sysUser.getId());
|
|
|
|
+ tfFlowApproveLogService.saveOrUpdate(tfFlowApproveLog);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //命题任务修改
|
|
|
|
+ examTask.setFlowId(null);
|
|
|
|
+ examTask.setStatus(ExamStatusEnum.DRAFT);
|
|
|
|
+ examTask.updateInfo(sysUser.getId());
|
|
|
|
+ examTaskService.updateById(examTask);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -194,7 +268,7 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
FlowStatusEnum flowStatusEnum = (FlowStatusEnum) map.get(SystemConstant.FLOW_STATUS);
|
|
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;
|
|
Long approveId = Objects.nonNull(map.get(SystemConstant.APPROVE_ID)) ? Long.parseLong(String.valueOf(map.get(SystemConstant.APPROVE_ID))) : null;
|
|
- tfFlowApproveService.save(new TFFlowApprove(flowId, approveId, flowStatusEnum, sysUser.getId()));
|
|
|
|
|
|
+ tfFlowApproveService.save(new TFFlowApprove(sysUser.getSchoolId(), sysUser.getOrgId(), flowId, approveId, flowStatusEnum, sysUser.getId()));
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -205,118 +279,194 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
public void taskApprove(Map<String, Object> map) {
|
|
public void taskApprove(Map<String, Object> map) {
|
|
- SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
|
|
|
|
- if (Objects.isNull(map.get(SystemConstant.FLOW_TASK_ID))) {
|
|
|
|
- throw ExceptionResultEnum.ERROR.exception("流程任务id不能为空");
|
|
|
|
- }
|
|
|
|
- String flowTaskId = (String) map.get(SystemConstant.FLOW_TASK_ID);
|
|
|
|
- Task task = taskService.createTaskQuery().taskId(flowTaskId).singleResult();
|
|
|
|
- if (Objects.isNull(task)) {
|
|
|
|
- throw ExceptionResultEnum.ERROR.exception("流程任务为空");
|
|
|
|
- }
|
|
|
|
- String processInstanceId = task.getProcessInstanceId();
|
|
|
|
- QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
|
|
|
|
- examTaskQueryWrapper.lambda().eq(ExamTask::getFlowId, Long.parseLong(processInstanceId));
|
|
|
|
- ExamTask examTask = examTaskService.getOne(examTaskQueryWrapper);
|
|
|
|
|
|
+ String flowTaskId = null;
|
|
|
|
+ try {
|
|
|
|
+ SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
|
|
|
|
+ if (Objects.isNull(map.get(SystemConstant.FLOW_TASK_ID))) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("流程任务id不能为空");
|
|
|
|
+ }
|
|
|
|
+ flowTaskId = (String) map.get(SystemConstant.FLOW_TASK_ID);
|
|
|
|
+ if (redisUtil.lock(SystemConstant.REDIS_LOCK_FLOW_TASK_PREFIX + flowTaskId, SystemConstant.REDIS_LOCK_FLOW_TASK_TIME_OUT)) {
|
|
|
|
+ Task task = taskService.createTaskQuery().taskId(flowTaskId).singleResult();
|
|
|
|
+ if (Objects.isNull(task)) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("流程任务为空");
|
|
|
|
+ }
|
|
|
|
+ String processInstanceId = task.getProcessInstanceId();
|
|
|
|
+ QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
|
|
|
|
+ examTaskQueryWrapper.lambda().eq(ExamTask::getFlowId, Long.parseLong(task.getProcessInstanceId()));
|
|
|
|
+ ExamTask examTask = examTaskService.getOne(examTaskQueryWrapper);
|
|
|
|
|
|
- String processDefinitionId = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().getProcessDefinitionId();
|
|
|
|
- ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processDefinitionId);
|
|
|
|
- String currActivityId = task.getTaskDefinitionKey();
|
|
|
|
- BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
|
|
|
|
- FlowNode currFlow = (FlowNode) bpmnModel.getMainProcess().getFlowElement(currActivityId);
|
|
|
|
- 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) {//命题提交
|
|
|
|
- Task taskUser = taskService.createTaskQuery().taskId(flowTaskId).taskAssignee(String.valueOf(sysUser.getId())).singleResult();
|
|
|
|
- if (Objects.isNull(taskUser)) {
|
|
|
|
- throw ExceptionResultEnum.ERROR.exception("不能提交他人的任务");
|
|
|
|
- }
|
|
|
|
- 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) {//主任提交
|
|
|
|
- Task taskUser = taskService.createTaskQuery().taskId(flowTaskId).taskCandidateUser(String.valueOf(sysUser.getId())).singleResult();
|
|
|
|
- if (Objects.isNull(taskUser)) {
|
|
|
|
- throw ExceptionResultEnum.ERROR.exception("不能提交他人的任务");
|
|
|
|
- }
|
|
|
|
- if (Objects.isNull(map.get(SystemConstant.APPROVE_OPERATION))) {
|
|
|
|
- throw ExceptionResultEnum.ERROR.exception("流程审核操作不能为空");
|
|
|
|
- }
|
|
|
|
- FlowApprovePassEnum approvePass = (FlowApprovePassEnum) map.get(SystemConstant.APPROVE_OPERATION);
|
|
|
|
- String approve = approvePass == FlowApprovePassEnum.PASS ? "1" : "0";
|
|
|
|
- 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 {
|
|
|
|
- throw ExceptionResultEnum.ERROR.exception("流程变量值错误");
|
|
|
|
- }
|
|
|
|
- map.computeIfAbsent(SystemConstant.APPROVE, v -> approve);
|
|
|
|
- } else if (setupEnum == FlowGdykdxApproveSetupEnum.SECOND_APPROVE) {//院长提交
|
|
|
|
- Task taskUser = taskService.createTaskQuery().taskId(flowTaskId).taskCandidateUser(String.valueOf(sysUser.getId())).singleResult();
|
|
|
|
- if (Objects.isNull(taskUser)) {
|
|
|
|
- throw ExceptionResultEnum.ERROR.exception("不能提交他人的任务");
|
|
|
|
- }
|
|
|
|
- if (Objects.isNull(map.get(SystemConstant.APPROVE_OPERATION))) {
|
|
|
|
- throw ExceptionResultEnum.ERROR.exception("流程审核操作不能为空");
|
|
|
|
- }
|
|
|
|
- FlowApprovePassEnum approvePass = (FlowApprovePassEnum) map.get(SystemConstant.APPROVE_OPERATION);
|
|
|
|
- String approve = null;
|
|
|
|
- if (approvePass == FlowApprovePassEnum.PASS) {
|
|
|
|
- approve = "2";
|
|
|
|
- } else {
|
|
|
|
- if (Objects.isNull(map.get(SystemConstant.APPROVE_SETUP))) {
|
|
|
|
- throw ExceptionResultEnum.ERROR.exception("流程驳回节点不能为空");
|
|
|
|
- }
|
|
|
|
- Integer setup = Integer.parseInt(map.get(SystemConstant.APPROVE_SETUP).toString());
|
|
|
|
- if (setup.intValue() < FlowGdykdxApproveSetupEnum.SUBMIT.getSetup() || setup.intValue() >= FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup()) {
|
|
|
|
- throw ExceptionResultEnum.ERROR.exception("流程驳回节点有误");
|
|
|
|
|
|
+ String processDefinitionId = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().getProcessDefinitionId();
|
|
|
|
+ ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processDefinitionId);
|
|
|
|
+ //获取当前流程节点
|
|
|
|
+ String currActivityId = task.getTaskDefinitionKey();
|
|
|
|
+ BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
|
|
|
|
+ FlowNode currFlow = (FlowNode) bpmnModel.getMainProcess().getFlowElement(currActivityId);
|
|
|
|
+
|
|
|
|
+ //流程审批
|
|
|
|
+ QueryWrapper<TFFlowApprove> tfFlowApproveQueryWrapper = new QueryWrapper<>();
|
|
|
|
+ tfFlowApproveQueryWrapper.lambda().eq(TFFlowApprove::getFlowId, Long.parseLong(processInstanceId));
|
|
|
|
+ TFFlowApprove tfFlowApprove = tfFlowApproveService.getOne(tfFlowApproveQueryWrapper);
|
|
|
|
+
|
|
|
|
+ //流程审批记录
|
|
|
|
+ QueryWrapper<TFFlowApproveLog> tfFlowApproveLogQueryWrapper = new QueryWrapper<>();
|
|
|
|
+ tfFlowApproveLogQueryWrapper.lambda().eq(TFFlowApproveLog::getFlowId, Long.parseLong(processInstanceId))
|
|
|
|
+ .eq(TFFlowApproveLog::getTaskId, examTask.getId());
|
|
|
|
+ TFFlowApproveLog tfFlowApproveLog = tfFlowApproveLogService.getOne(tfFlowApproveLogQueryWrapper);
|
|
|
|
+
|
|
|
|
+ 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(sysUser.getSchoolId(), sysUser.getOrgId(), Long.parseLong(processInstanceId), examTask.getId(), sysUser.getId(), sysUser.getId(), remark);
|
|
|
|
+ FlowGdykdxApproveSetupEnum setupEnum = FlowGdykdxApproveSetupEnum.convertToInstance(userTask.getId());
|
|
|
|
+ if (setupEnum == FlowGdykdxApproveSetupEnum.SUBMIT) {//命题提交
|
|
|
|
+ Task taskUser = taskService.createTaskQuery().taskId(flowTaskId).taskAssignee(String.valueOf(sysUser.getId())).singleResult();
|
|
|
|
+ if (Objects.isNull(taskUser)) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("不能提交他人的任务");
|
|
|
|
+ }
|
|
|
|
+ if (Objects.isNull(tfFlowApproveLog)) {
|
|
|
|
+ tfFlowApproveLog = new TFFlowApproveLog(sysUser.getSchoolId(), sysUser.getOrgId(), Long.parseLong(processInstanceId), examTask.getId(), sysUser.getId(), sysUser.getId());
|
|
|
|
+ }
|
|
|
|
+ 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) {//主任提交
|
|
|
|
+ Task taskUser = taskService.createTaskQuery().taskId(flowTaskId).taskCandidateUser(String.valueOf(sysUser.getId())).singleResult();
|
|
|
|
+ if (Objects.isNull(taskUser)) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("不能提交他人的任务");
|
|
|
|
+ }
|
|
|
|
+ if (Objects.isNull(map.get(SystemConstant.APPROVE_OPERATION))) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("流程审核操作不能为空");
|
|
|
|
+ }
|
|
|
|
+ FlowApprovePassEnum approvePass = (FlowApprovePassEnum) map.get(SystemConstant.APPROVE_OPERATION);
|
|
|
|
+ FlowApproveVariableEnum approve = approvePass == FlowApprovePassEnum.PASS ? FlowApproveVariableEnum.PRIMARY_APPROVE : FlowApproveVariableEnum.PRIMARY_REJECT;
|
|
|
|
+ tfFlowLog.setApproveSetup(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup());
|
|
|
|
+ tfFlowApproveLog.setPrimaryApproveId(sysUser.getId());
|
|
|
|
+ tfFlowApproveLog.setPrimaryApproveRemark(remark);
|
|
|
|
+ if (approve == FlowApproveVariableEnum.PRIMARY_REJECT) {//驳回命题
|
|
|
|
+ tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
|
|
|
|
+ tfFlowApproveLog.setPrimaryApproveOperation(FlowApproveOperationEnum.REJECT);
|
|
|
|
+ tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
|
|
|
|
+ tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup());
|
|
|
|
+ } else if (approve == FlowApproveVariableEnum.PRIMARY_APPROVE) {//提交
|
|
|
|
+ tfFlowLog.setApproveOperation(FlowApproveOperationEnum.APPROVE);
|
|
|
|
+ tfFlowApproveLog.setPrimaryApproveOperation(FlowApproveOperationEnum.APPROVE);
|
|
|
|
+ tfFlowApprove.setStatus(FlowStatusEnum.AUDITING);
|
|
|
|
+ tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup());
|
|
|
|
+ } else {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("流程变量值错误");
|
|
|
|
+ }
|
|
|
|
+ map.computeIfAbsent(SystemConstant.APPROVE, v -> approve.getId());
|
|
|
|
+ } else if (setupEnum == FlowGdykdxApproveSetupEnum.SECOND_APPROVE) {//院长提交
|
|
|
|
+ Task taskUser = taskService.createTaskQuery().taskId(flowTaskId).taskCandidateUser(String.valueOf(sysUser.getId())).singleResult();
|
|
|
|
+ if (Objects.isNull(taskUser)) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("不能提交他人的任务");
|
|
|
|
+ }
|
|
|
|
+ if (Objects.isNull(map.get(SystemConstant.APPROVE_OPERATION))) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("流程审核操作不能为空");
|
|
|
|
+ }
|
|
|
|
+ FlowApprovePassEnum approvePass = (FlowApprovePassEnum) map.get(SystemConstant.APPROVE_OPERATION);
|
|
|
|
+ FlowApproveVariableEnum approve = null;
|
|
|
|
+ tfFlowApproveLog.setSecondApproveId(sysUser.getId());
|
|
|
|
+ tfFlowApproveLog.setSecondApproveRemark(remark);
|
|
|
|
+ if (approvePass == FlowApprovePassEnum.PASS) {
|
|
|
|
+ approve = FlowApproveVariableEnum.SECOND_APPROVE;
|
|
|
|
+ } else {
|
|
|
|
+ if (Objects.isNull(map.get(SystemConstant.APPROVE_SETUP))) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("流程驳回节点不能为空");
|
|
|
|
+ }
|
|
|
|
+ Integer setup = Integer.parseInt(map.get(SystemConstant.APPROVE_SETUP).toString());
|
|
|
|
+ if (setup.intValue() < FlowGdykdxApproveSetupEnum.SUBMIT.getSetup() || setup.intValue() >= FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup()) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("流程驳回节点有误");
|
|
|
|
+ }
|
|
|
|
+ approve = setup.intValue() == 1 ? FlowApproveVariableEnum.SECOND_REJECT_ONE : FlowApproveVariableEnum.SECOND_REJECT_TWO;
|
|
|
|
+ }
|
|
|
|
+ tfFlowLog.setApproveSetup(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup());
|
|
|
|
+ if (approve == FlowApproveVariableEnum.SECOND_REJECT_ONE) {//驳回命题
|
|
|
|
+ tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
|
|
|
|
+ tfFlowApproveLog.setSecondApproveOperation(FlowApproveOperationEnum.REJECT);
|
|
|
|
+ tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
|
|
|
|
+ tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup());
|
|
|
|
+ } else if (approve == FlowApproveVariableEnum.SECOND_REJECT_TWO) {//驳回主任
|
|
|
|
+ tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
|
|
|
|
+ tfFlowApproveLog.setSecondApproveOperation(FlowApproveOperationEnum.REJECT);
|
|
|
|
+ tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
|
|
|
|
+ tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup());
|
|
|
|
+ } else if (approve == FlowApproveVariableEnum.SECOND_APPROVE) {//提交
|
|
|
|
+ tfFlowLog.setApproveOperation(FlowApproveOperationEnum.APPROVE);
|
|
|
|
+ tfFlowApproveLog.setSecondApproveOperation(FlowApproveOperationEnum.APPROVE);
|
|
|
|
+ tfFlowApprove.setStatus(FlowStatusEnum.FINISH);
|
|
|
|
+ tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.FINISH.getSetup());
|
|
|
|
+ } else {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("流程变量值错误");
|
|
|
|
+ }
|
|
|
|
+ FlowApproveVariableEnum finalApprove = approve;
|
|
|
|
+ map.computeIfAbsent(SystemConstant.APPROVE, v -> finalApprove.getId());
|
|
}
|
|
}
|
|
- approve = setup.intValue() == 1 ? "0" : "1";
|
|
|
|
|
|
+ tfFlowApprove.updateInfo(sysUser.getId());
|
|
|
|
+ tfFlowApproveLog.updateInfo(sysUser.getId());
|
|
}
|
|
}
|
|
- 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 {
|
|
|
|
- throw ExceptionResultEnum.ERROR.exception("流程变量值错误");
|
|
|
|
- }
|
|
|
|
- String finalApprove = approve;
|
|
|
|
- map.computeIfAbsent(SystemConstant.APPROVE, v -> finalApprove);
|
|
|
|
}
|
|
}
|
|
- tfFlowApprove.updateInfo(sysUser.getId());
|
|
|
|
|
|
+ tfFlowApprove.setApproveId(sysUser.getId());
|
|
|
|
+ //当前实例的执行到哪个节点
|
|
|
|
+ taskService.complete(String.valueOf(flowTaskId), map);
|
|
|
|
+ tfFlowApproveService.saveOrUpdate(tfFlowApprove);
|
|
|
|
+ if (Objects.nonNull(tfFlowLog)) {
|
|
|
|
+ tfFlowLogService.save(tfFlowLog);
|
|
|
|
+ }
|
|
|
|
+ if (Objects.nonNull(tfFlowApproveLog)) {
|
|
|
|
+ tfFlowApproveLogService.saveOrUpdate(tfFlowApproveLog);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("正在审批中,请稍候再试!");
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("请求出错", e);
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ if (e instanceof ApiException) {
|
|
|
|
+ ResultUtil.error((ApiException) e, e.getMessage());
|
|
|
|
+ } else {
|
|
|
|
+ ResultUtil.error(e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ } finally {
|
|
|
|
+ if (Objects.nonNull(flowTaskId)) {
|
|
|
|
+ redisUtil.releaseLock(SystemConstant.REDIS_LOCK_FLOW_TASK_PREFIX + flowTaskId);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- tfFlowApprove.setApproveId(sysUser.getId());
|
|
|
|
- //当前实例的执行到哪个节点
|
|
|
|
- taskService.complete(String.valueOf(flowTaskId), map);
|
|
|
|
- tfFlowApproveService.saveOrUpdate(tfFlowApprove);
|
|
|
|
- if (Objects.nonNull(tfFlowLog)) {
|
|
|
|
- tfFlowLogService.save(tfFlowLog);
|
|
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取所有流程节点
|
|
|
|
+ *
|
|
|
|
+ * @param flowId
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public List<FlowTaskResult> getTaskAll(String flowId) {
|
|
|
|
+ String processDefinitionId = historyService.createHistoricProcessInstanceQuery().processInstanceId(flowId).singleResult().getProcessDefinitionId();
|
|
|
|
+ ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processDefinitionId);
|
|
|
|
+ BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
|
|
|
|
+ Process process = bpmnModel.getProcessById(processDefinitionEntity.getKey());
|
|
|
|
+ Collection<FlowElement> flowElements = process.getFlowElements();
|
|
|
|
+ List<FlowTaskResult> flowTaskResultList = new ArrayList<>();
|
|
|
|
+ for (FlowElement flowElement : flowElements) {
|
|
|
|
+ //假设是任务节点
|
|
|
|
+ if (flowElement instanceof UserTask) {
|
|
|
|
+ UserTask userTask = (UserTask) flowElement;
|
|
|
|
+ if (Objects.nonNull(userTask)) {
|
|
|
|
+ //广东医科大学流程
|
|
|
|
+ if (Objects.nonNull(processDefinitionEntity) && processDefinitionEntity.getKey().contains(SystemConstant.GDYKDX_FLOW_KEY)) {
|
|
|
|
+ FlowGdykdxApproveSetupEnum flowGdykdxApproveSetupEnum = FlowGdykdxApproveSetupEnum.convertToInstance(userTask.getId());
|
|
|
|
+ flowTaskResultList.add(new FlowTaskResult(Long.parseLong(flowId), userTask.getName(), flowGdykdxApproveSetupEnum.getId(), flowGdykdxApproveSetupEnum.getSetup()));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+ return flowTaskResultList;
|
|
}
|
|
}
|
|
}
|
|
}
|