|
@@ -1,25 +1,36 @@
|
|
|
package com.qmth.distributed.print.business.activiti.custom.listener;
|
|
|
|
|
|
+import com.google.gson.Gson;
|
|
|
+import com.google.gson.reflect.TypeToken;
|
|
|
import com.qmth.distributed.print.business.entity.ExamTask;
|
|
|
import com.qmth.distributed.print.business.entity.TFFlowLog;
|
|
|
+import com.qmth.distributed.print.business.enums.CustomFlowMultipleUserApproveTypeEnum;
|
|
|
+import com.qmth.distributed.print.business.enums.MessageEnum;
|
|
|
import com.qmth.distributed.print.business.enums.TFCustomTypeEnum;
|
|
|
+import com.qmth.distributed.print.business.service.BasicMessageService;
|
|
|
import com.qmth.distributed.print.business.service.ExamTaskService;
|
|
|
import com.qmth.distributed.print.business.service.PrintCommonService;
|
|
|
+import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
|
|
|
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.service.SysUserService;
|
|
|
+import com.qmth.teachcloud.common.util.JacksonUtil;
|
|
|
import org.activiti.engine.HistoryService;
|
|
|
+import org.activiti.engine.TaskService;
|
|
|
import org.activiti.engine.delegate.event.ActivitiEvent;
|
|
|
import org.activiti.engine.delegate.event.ActivitiEventListener;
|
|
|
import org.activiti.engine.history.HistoricVariableInstance;
|
|
|
+import org.activiti.engine.task.Task;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.io.Serializable;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Objects;
|
|
|
import java.util.Optional;
|
|
@@ -45,6 +56,7 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
|
|
|
case PROCESS_COMPLETED:
|
|
|
// 流程结束
|
|
|
log.info("流程结束_PROCESS_COMPLETED:ProcessInstanceId:{},ExecutionId:{},ProcessDefinitionId:{}", event.getProcessInstanceId(), event.getExecutionId(), event.getProcessDefinitionId());
|
|
|
+ TaskService taskService = SpringContextHolder.getBean(TaskService.class);
|
|
|
HistoryService historyService = SpringContextHolder.getBean(HistoryService.class);
|
|
|
SysUserService sysUserService = SpringContextHolder.getBean(SysUserService.class);
|
|
|
ExamTaskService examTaskService = SpringContextHolder.getBean(ExamTaskService.class);
|
|
@@ -164,6 +176,53 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
|
|
|
case TASK_COMPLETED:
|
|
|
// 任务被完成了。它会在ENTITY_DELETE事件之前触发。当任务是流程一部分时,事件会在流程继续运行之前, 后续事件将是ACTIVITY_COMPLETE,对应着完成任务的节点。
|
|
|
log.info("流程任务完成_TASK_COMPLETED:ProcessInstanceId:{},ExecutionId:{},ProcessDefinitionId:{}", event.getProcessInstanceId(), event.getExecutionId(), event.getProcessDefinitionId());
|
|
|
+ taskService = SpringContextHolder.getBean(TaskService.class);
|
|
|
+ sysUserService = SpringContextHolder.getBean(SysUserService.class);
|
|
|
+ examTaskService = SpringContextHolder.getBean(ExamTaskService.class);
|
|
|
+ BasicMessageService basicMessageService = SpringContextHolder.getBean(BasicMessageService.class);
|
|
|
+
|
|
|
+ Task task = taskService.createTaskQuery().executionId(event.getExecutionId()).singleResult();
|
|
|
+ if (Objects.nonNull(task)) {
|
|
|
+ TFFlowLog tfFlowLog = (TFFlowLog) taskService.getVariable(task.getId(), SystemConstant.APPROVE_TF_FLOW_LOG);
|
|
|
+ Object o = null;
|
|
|
+ if (Objects.nonNull(tfFlowLog.getObjectTable()) && Objects.equals(tfFlowLog.getObjectTable(), TFCustomTypeEnum.ELECTRON_FLOW.getTable())) {
|
|
|
+ o = examTaskService.getById(tfFlowLog.getObjectId());
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(tfFlowLog) && (tfFlowLog.getApproveOperation() != FlowApproveOperationEnum.SUBMIT
|
|
|
+ && tfFlowLog.getApproveOperation() != FlowApproveOperationEnum.END
|
|
|
+ && tfFlowLog.getApproveOperation() != FlowApproveOperationEnum.FINISH)) {
|
|
|
+ if (Objects.nonNull(tfFlowLog.getPendApproveId())) {
|
|
|
+ String[] strs = tfFlowLog.getPendApproveId().split(",");
|
|
|
+ List<Long> userIds = new ArrayList<>();
|
|
|
+ for (String s : strs) {
|
|
|
+ userIds.add(SystemConstant.convertIdToLong(s.trim()));
|
|
|
+ }
|
|
|
+ List<SysUser> sysUsers = sysUserService.listByIds(userIds);
|
|
|
+ List<ApproveUserResult> sysUserList = new Gson().fromJson(JacksonUtil.parseJson(sysUsers), new TypeToken<List<ApproveUserResult>>() {
|
|
|
+ }.getType());
|
|
|
+
|
|
|
+ List<ApproveUserResult> nextApproverPeopleList = new ArrayList<>();
|
|
|
+ nextApproverPeopleList.addAll(sysUserList);
|
|
|
+ if (Objects.nonNull(tfFlowLog.getApproveUserApproveType()) && tfFlowLog.getApproveUserApproveType() == CustomFlowMultipleUserApproveTypeEnum.ORDER) {
|
|
|
+ nextApproverPeopleList.clear();
|
|
|
+ nextApproverPeopleList.add(sysUserList.get(0));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Objects.nonNull(nextApproverPeopleList) && (tfFlowLog.getApproveOperation() == FlowApproveOperationEnum.APPROVE
|
|
|
+ || tfFlowLog.getApproveOperation() == FlowApproveOperationEnum.EXCHANGE)) {
|
|
|
+ if (Objects.nonNull(o) && o instanceof ExamTask) {
|
|
|
+ basicMessageService.sendNoticeTaskAuditFlow((ExamTask) o, nextApproverPeopleList, MessageEnum.NOTICE_OF_AUDIT_CREATED);
|
|
|
+ }
|
|
|
+ } else if (Objects.nonNull(nextApproverPeopleList) && (tfFlowLog.getApproveOperation() == FlowApproveOperationEnum.REJECT
|
|
|
+ || tfFlowLog.getApproveOperation() == FlowApproveOperationEnum.CANCEL)) {
|
|
|
+ if (Objects.nonNull(o) && o instanceof ExamTask) {
|
|
|
+ basicMessageService.sendNoticeTaskAuditFlow((ExamTask) o, nextApproverPeopleList, MessageEnum.NOTICE_OF_AUDIT_REJECT);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
break;
|
|
|
// case TIMER_FIRED:
|
|
|
// // 触发了定时器。job包含在事件中。
|