|
@@ -1,11 +1,13 @@
|
|
|
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.bean.flow.CustomFlowVarDto;
|
|
|
+import com.qmth.distributed.print.business.bean.result.FlowTaskResult;
|
|
|
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.service.ActivitiService;
|
|
|
import com.qmth.distributed.print.business.service.BasicMessageService;
|
|
|
import com.qmth.distributed.print.business.service.PrintCommonService;
|
|
|
import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
|
|
@@ -16,7 +18,6 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
|
|
|
import com.qmth.teachcloud.common.enums.FlowApproveOperationEnum;
|
|
|
import com.qmth.teachcloud.common.enums.TFCustomTypeEnum;
|
|
|
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;
|
|
@@ -31,6 +32,7 @@ import org.springframework.stereotype.Component;
|
|
|
import java.io.IOException;
|
|
|
import java.io.Serializable;
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @Description: 全局监听
|
|
@@ -105,6 +107,7 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
|
|
|
TaskService taskService = SpringContextHolder.getBean(TaskService.class);
|
|
|
sysUserService = SpringContextHolder.getBean(SysUserService.class);
|
|
|
basicMessageService = SpringContextHolder.getBean(BasicMessageService.class);
|
|
|
+ ActivitiService activitiService = SpringContextHolder.getBean(ActivitiService.class);
|
|
|
|
|
|
Task task = taskService.createTaskQuery().executionId(event.getExecutionId()).singleResult();
|
|
|
if (Objects.nonNull(task)) {
|
|
@@ -112,6 +115,11 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
|
|
|
Optional.ofNullable(tfFlowLog).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程审批日志为空"));
|
|
|
o = taskService.getVariable(task.getId(), SystemConstant.OBJECT_DATA);
|
|
|
Optional.ofNullable(o).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("实体数据为空"));
|
|
|
+ Map<String, CustomFlowVarDto> agginessMap = (Map<String, CustomFlowVarDto>) taskService.getVariable(task.getId(), SystemConstant.AGGINESS_MAP);
|
|
|
+ Optional.ofNullable(agginessMap).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程审批数据为空"));
|
|
|
+ Map<String, FlowTaskResult> setupMap = (Map<String, FlowTaskResult>) taskService.getVariable(task.getId(), SystemConstant.SETUP_MAP);
|
|
|
+ Optional.ofNullable(setupMap).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程审批步骤数据为空"));
|
|
|
+
|
|
|
if (tfFlowLog.getApproveOperation() != FlowApproveOperationEnum.SUBMIT
|
|
|
&& tfFlowLog.getApproveOperation() != FlowApproveOperationEnum.END
|
|
|
&& tfFlowLog.getApproveOperation() != FlowApproveOperationEnum.FINISH) {
|
|
@@ -121,29 +129,44 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
|
|
|
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));
|
|
|
+ Gson gson = new Gson();
|
|
|
+ List<ApproveUserResult> nextApproverPeopleList = sysUserService.findByIdsForResult(userIds);
|
|
|
+ if (Objects.nonNull(nextApproverPeopleList) && nextApproverPeopleList.size() > 0 && Objects.nonNull(tfFlowLog.getApproveUserApproveType()) && tfFlowLog.getApproveUserApproveType() == CustomFlowMultipleUserApproveTypeEnum.ORDER) {
|
|
|
+ nextApproverPeopleList.removeAll(nextApproverPeopleList.subList(1, nextApproverPeopleList.size() - 0));
|
|
|
}
|
|
|
|
|
|
- if (Objects.nonNull(nextApproverPeopleList) && (tfFlowLog.getApproveOperation() == FlowApproveOperationEnum.APPROVE
|
|
|
- || tfFlowLog.getApproveOperation() == FlowApproveOperationEnum.EXCHANGE)) {
|
|
|
+ if (Objects.nonNull(nextApproverPeopleList) && tfFlowLog.getApproveOperation() == FlowApproveOperationEnum.APPROVE) {
|
|
|
+ List<ApproveUserResult> copyUsersList = null;
|
|
|
+ FlowTaskResult nextFlowTaskResult = null;
|
|
|
+ FlowTaskResult currFlowTaskResult = gson.fromJson(gson.toJson(setupMap.get(task.getTaskDefinitionKey())), FlowTaskResult.class);
|
|
|
+ int currSetup = currFlowTaskResult.getSetup().intValue();
|
|
|
+ currSetup = currSetup == setupMap.size() - 1 ? 0 : currSetup + 1;
|
|
|
+
|
|
|
+ nextFlowTaskResult = activitiService.getNextFlowTaskResult(setupMap, gson, currSetup, nextFlowTaskResult);
|
|
|
+ CustomFlowVarDto customFlowVarDto = gson.fromJson(gson.toJson(agginessMap.get(nextFlowTaskResult.getTaskKey())), CustomFlowVarDto.class);
|
|
|
+ if (Objects.nonNull(customFlowVarDto) && Objects.nonNull(customFlowVarDto.getCopyForUserIds()) && customFlowVarDto.getCopyForUserIds().size() > 0) {
|
|
|
+ Set<String> copyUserSet = new LinkedHashSet(customFlowVarDto.getCopyForUserIds());
|
|
|
+ copyUsersList = sysUserService.findByIdsForResult(copyUserSet.stream().map(s -> SystemConstant.convertIdToLong(s)).collect(Collectors.toList()));
|
|
|
+ }
|
|
|
+
|
|
|
//如果不是并行会签,则每个节点都发
|
|
|
- if (Objects.nonNull(tfFlowLog.getApproveUserApproveType()) && tfFlowLog.getApproveUserApproveType() != CustomFlowMultipleUserApproveTypeEnum.ALL) {
|
|
|
+ if (Objects.nonNull(tfFlowLog.getApproveUserApproveType()) && tfFlowLog.getApproveUserApproveType() == CustomFlowMultipleUserApproveTypeEnum.ORDER) {
|
|
|
if (Objects.nonNull(o) && o instanceof ExamTask) {
|
|
|
basicMessageService.sendNoticeTaskAuditFlow((ExamTask) o, nextApproverPeopleList, MessageEnum.NOTICE_OF_AUDIT_CREATED);
|
|
|
+ //抄送短信
|
|
|
+ if (Objects.nonNull(copyUsersList) && copyUsersList.size() > 0) {
|
|
|
+ basicMessageService.sendNoticeAuditCopyUser((ExamTask) o, copyUsersList, nextApproverPeopleList.get(0).getRealName(), MessageEnum.NOTICE_OF_AUDIT_COPY_USER);
|
|
|
+ }
|
|
|
}
|
|
|
} else {
|
|
|
- if (Objects.isNull(tfFlowLog.getApproveMultiSetup()) || tfFlowLog.getApproveMultiSetup().intValue() == 0) {
|
|
|
+ if (Objects.isNull(tfFlowLog.getApproveMultiSetup())) {
|
|
|
if (Objects.nonNull(o) && o instanceof ExamTask) {
|
|
|
basicMessageService.sendNoticeTaskAuditFlow((ExamTask) o, nextApproverPeopleList, MessageEnum.NOTICE_OF_AUDIT_CREATED);
|
|
|
}
|
|
|
+ //抄送短信
|
|
|
+ if (Objects.nonNull(copyUsersList) && copyUsersList.size() > 0) {
|
|
|
+ basicMessageService.sendNoticeAuditCopyUser((ExamTask) o, copyUsersList, nextApproverPeopleList.stream().map(s -> s.getRealName()).collect(Collectors.toList()).toString().replaceAll("\\[", "").replaceAll("\\]", "").trim(), MessageEnum.NOTICE_OF_AUDIT_COPY_USER);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
} else if (Objects.nonNull(nextApproverPeopleList) && (tfFlowLog.getApproveOperation() == FlowApproveOperationEnum.REJECT
|