Browse Source

流程会签和或签测试类

zhanglei
dimengzhe 4 months ago
parent
commit
9477fa80ae
  1. 196
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java

196
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java

@ -98,6 +98,169 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
@Autowired
private ProcessEngine processEngine;
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById(BusinessVariables bv) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
// 或签任务候选人
List<String> userIds = Arrays.asList(
"dc6b9e36-1b31-4b94-908b-d2d7f78a0977",
"657bf5a5-7665-440e-9cbd-ab87eccfbdcc",
"2737e5ee-5ffd-4127-919b-e6694dfc8361");
// 会签任务候选人
List<String> approvers = Arrays.asList(
"1d85d1fe-e527-4ec5-a5e4-c37a76a36518",
"64e289bc-80cd-487a-9498-5ae61e260f71",
"7ffcd76a-4fa0-4c9c-87ca-a0c2116bb2ed");
// 获取流程定义ID和发起人ID
String procDefId = bv.getModelId();
String userSid = bv.getUserSid();
// 获取传入的变量
Map<String, Object> variables = bv.getFormVariables();
variables.put("userSids", userIds);
variables.put("approvers", approvers);
Map<String, Object> variablesSeconds = bv.getFormVariables();
// 根据流程定义ID查询最新的流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(procDefId)
.latestVersion()
.singleResult();
// 如果流程被挂起,返回错误信息
if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
return rb.setMsg("流程已被挂起,请先激活流程");
}
// 设置发起人信息
ResultBean<SysUserVo> sysUserVoResultBean = sysUserFeign.fetchBySid(userSid);
SysUserVo sysUser = sysUserVoResultBean.getData();
identityService.setAuthenticatedUserId(sysUser.getSid());
variables.put(ProcessConstants.PROCESS_INITIATOR, userSid);
variables.put(ProcessConstants.USER_TYPE_ASSIGNEE, userSid);
// 启动流程实例
ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables);
// 获取第一步任务并设置任务执行人和意见
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
if (Objects.nonNull(task)) {
taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.START.getType(),
sysUser.getName() + "发起流程申请");
taskService.setAssignee(task.getId(), userSid);
taskService.complete(task.getId(), variables);
}
boolean isMultiInstanceTaskNext = false;
// 查询当前流程实例的待办任务
ResultBean<List<LatestTaskVo>> latestTasksNew = flowTaskService.getLatestTasksNew(processInstance.getId());
List<LatestTaskVo> data = latestTasksNew.getData();
LatestTaskVo latestTaskVo = data.get(0);
String id_ = latestTaskVo.getId_();
String task_def_key_ = latestTaskVo.getTask_def_key_();
// 获取下一个环节的待办人
if (StringUtils.isBlank(bv.getNextNodeUserSids())) {
List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list();
for (int i = 0; i < tasks.size(); i++) {
Task task2 = tasks.get(i);
String isMultiInstanceTask = isMultiInstanceTask(task2);
// 会签任务认领
if ("会签任务".equals(isMultiInstanceTask)) {
String approver = getApproverForTask(approvers, i); // 动态获取会签候选人
taskService.claim(task2.getId(), approver); // 由会签候选人认领任务
isMultiInstanceTaskNext = true;
}
// 单一审批任务
else if ("单一审批任务".equals(isMultiInstanceTask)) {
String userSidForNextNode = getNextNodeUser(bv).getData();
taskService.claim(task2.getId(), userSidForNextNode);
bv.setNextNodeUserSids(userSidForNextNode);
break;
}
}
}
// 如果没有会签任务,继续处理其他节点
if (!isMultiInstanceTaskNext) {
String nextNodeUserSids = bv.getNextNodeUserSids();
// 查询下一环节是否有转办并添加评论
nextNodeUserSids = change(nextNodeUserSids, processInstance.getProcessInstanceId());
taskService.setAssignee(id_, nextNodeUserSids);
taskService.setVariablesLocal(id_, variables);
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids)) {
return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition);
}
// 如果申请人与下一环节审批人相同,则自动审批
if (bv.getUserSid().equals(nextNodeUserSids)) {
return handleSelfApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition);
}
}
// 实例化 UpdateFlowFieldVo
UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo();
updateFlowFieldVo.setProcInsId(task.getProcessInstanceId());
updateFlowFieldVo.setNodeState(latestTaskVo.getName_());
updateFlowFieldVo.setTaskId(id_);
updateFlowFieldVo.setTaskDefKey(task_def_key_);
updateFlowFieldVo.setProcDefId(bv.getModelId());
updateFlowFieldVo.setSid(bv.getBusinessSid());
updateFlowFieldVo.setName(processDefinition.getName());
return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功");
}
/**
* 获取会签候选人
*/
private String getApproverForTask(List<String> approvers, int index) {
return approvers.size() > index ? approvers.get(index) : null;
}
/**
* 处理自动审批逻辑当任务为转办时
*/
private ResultBean<UpdateFlowFieldVo> handleAutomaticApproval(BusinessVariables bv, Task task, String id_, String task_def_key_,
Map<String, Object> variables, Map<String, Object> variablesSeconds, ProcessDefinition processDefinition) {
bv.setModelId(bv.getModelId());
bv.setInstanceId(task.getProcessInstanceId());
bv.setTaskId(id_);
bv.setUserSid(ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId()); // 默认转办管理员ID
bv.setBusinessSid(bv.getBusinessSid());
bv.setTaskDefKey(task_def_key_);
bv.setFormVariables(variables);
bv.setOrgSidPath(bv.getOrgSidPath());
bv.setFormVariables(variablesSeconds);
bv.setComment("系统自动转办!");
bv.setNextNodeUserSids("");
// 继续执行后续流程
return handleProsess(bv, false);
}
/**
* 处理自动审批逻辑当申请人与下一环节审批人相同
*/
private ResultBean<UpdateFlowFieldVo> handleSelfApproval(BusinessVariables bv, Task task, String id_, String task_def_key_,
Map<String, Object> variables, Map<String, Object> variablesSeconds, ProcessDefinition processDefinition) {
bv.setModelId(bv.getModelId());
bv.setInstanceId(task.getProcessInstanceId());
bv.setTaskId(id_);
bv.setUserSid(bv.getUserSid());
bv.setBusinessSid(bv.getBusinessSid());
bv.setTaskDefKey(task_def_key_);
bv.setFormVariables(variables);
bv.setOrgSidPath(bv.getOrgSidPath());
bv.setFormVariables(variablesSeconds);
bv.setComment("因与申请人相同,系统自动处理,需以下一级审批人审批意见为准!");
bv.setNextNodeUserSids("");
// 继续执行后续流程
return handleProsess(bv, false);
}
/**
* 启动流程
@ -105,7 +268,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
* @param bv
* @return
*/
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById(BusinessVariables bv) {
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById2(BusinessVariables bv) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
// 或签任务候选人
List<String> userIds = Arrays.asList(
@ -118,6 +281,8 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
"1d85d1fe-e527-4ec5-a5e4-c37a76a36518",
"64e289bc-80cd-487a-9498-5ae61e260f71",
"7ffcd76a-4fa0-4c9c-87ca-a0c2116bb2ed");
UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo();
String procDefId = bv.getModelId();
String userSid = bv.getUserSid();
@ -333,6 +498,8 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
if (Objects.isNull(task)) {
return rb.setMsg("任务不存在");
}
//是否是多实例任务
String isMultiInstanceTask = isMultiInstanceTask(task);
boolean isMultiInstanceTaskNext = false;
String service = (String) formVariables.get("service");
String ydfOrgPath = (String) formVariables.get("ydfOrgPath");
@ -349,8 +516,6 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
}
}
} else if (StringUtils.isBlank(nextUserSid)) {
//是否是多实例任务
String isMultiInstanceTask = isMultiInstanceTask(task);
if (!"会签任务".equals(isMultiInstanceTask) && !"或签任务".equals(isMultiInstanceTask)) {
//获取下一环节用户
ResultBean<String> stringResultBean = getNextNodeUserSidsOfSubmit(bv);
@ -385,7 +550,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
} else {
boolean checkTask = false;//是否要查询当前任务是否是会签环节
List<Task> tasks = taskService.createTaskQuery().processInstanceId(instanceId).list();
if (tasks.size() == 1) {
if (tasks.size() == 1 || "或签任务".equals(isMultiInstanceTask)) {
checkTask = true;
}
taskService.addComment(taskId, instanceId, FlowComment.NORMAL.getType(), comment);
@ -397,7 +562,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
tasks = taskService.createTaskQuery().processInstanceId(instanceId).list();
for (int i = 0; i < tasks.size(); i++) {
Task task2 = tasks.get(i);
String isMultiInstanceTask = isMultiInstanceTask(task2);
isMultiInstanceTask = isMultiInstanceTask(task2);
if ("会签任务".equals(isMultiInstanceTask)) {
taskService.claim(task2.getId(), approvers.get(i)); // 由候选人认领任务
isMultiInstanceTaskNext = true;
@ -407,6 +572,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
} else {
ResultBean<String> userResultBean = getNextNodeUser(bv);
bv.setNextNodeUserSids(userResultBean.getData());
nextUserSid = bv.getNextNodeUserSids();
break;
}
}
@ -434,15 +600,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
}
//设置管理员是否自动审批的字段是否是是。//若下一环节用户与系统管理员一致,则自动审批
if (adminContains) {
bv.setUserSid(nextUserSid);
bv.setTaskId(vo.getTaskId());
bv.setTaskDefKey(taskDefKey);
bv.setComment("系统自动跳过");
bv.setNextNodeUserSids("");
return handleProsess(bv, false);
}
if (!isMultiInstanceTaskNext) {
if (!DelegationState.PENDING.equals(task.getDelegationState())) {
//获取该流程所有要走的环节节点
@ -500,7 +658,15 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
}
}
}
//设置管理员是否自动审批的字段是否是是。//若下一环节用户与系统管理员一致,则自动审批
if (adminContains) {
bv.setUserSid(nextUserSid);
bv.setTaskId(vo.getTaskId());
bv.setTaskDefKey(taskDefKey);
bv.setComment("系统自动跳过");
bv.setNextNodeUserSids("");
return handleProsess(bv, false);
}
if (contains) {
bv.setUserSid(nextUserSid);

Loading…
Cancel
Save