|
|
@ -171,9 +171,11 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
String approver = getApproverForTask(approvers, i); // 动态获取会签候选人
|
|
|
|
taskService.claim(task2.getId(), approver); // 由会签候选人认领任务
|
|
|
|
isMultiInstanceTaskNext = true; |
|
|
|
} |
|
|
|
// 单一审批任务
|
|
|
|
else if ("单一审批任务".equals(isMultiInstanceTask)) { |
|
|
|
}else if("或签任务".equals(isMultiInstanceTask)){ |
|
|
|
String userId = getApproverForTask(userIds, i); |
|
|
|
taskService.claim(task2.getId(), userId); |
|
|
|
isMultiInstanceTaskNext = true; |
|
|
|
} else if("单一审批任务".equals(isMultiInstanceTask)) { |
|
|
|
String userSidForNextNode = getNextNodeUser(bv).getData(); |
|
|
|
taskService.claim(task2.getId(), userSidForNextNode); |
|
|
|
bv.setNextNodeUserSids(userSidForNextNode); |
|
|
@ -268,7 +270,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
* @param bv |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById2(BusinessVariables bv) { |
|
|
|
/* public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById2(BusinessVariables bv) { |
|
|
|
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail(); |
|
|
|
// 或签任务候选人
|
|
|
|
List<String> userIds = Arrays.asList( |
|
|
@ -403,7 +405,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
updateFlowFieldVo.setSid(bv.getBusinessSid()); |
|
|
|
updateFlowFieldVo.setName(processDefinition.getName()); |
|
|
|
return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); |
|
|
|
} |
|
|
|
}*/ |
|
|
|
|
|
|
|
/** |
|
|
|
* 查询下一环节用户是否有转办用户,若有转办用户则添加转办评论 |
|
|
@ -503,36 +505,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
boolean isMultiInstanceTaskNext = false; |
|
|
|
String service = (String) formVariables.get("service"); |
|
|
|
String ydfOrgPath = (String) formVariables.get("ydfOrgPath"); |
|
|
|
if ("公司间调车".equals(service) && "Activity_0695qh4".equals(bv.getTaskDefKey())) { |
|
|
|
if (StringUtils.isBlank(nextUserSid)) { |
|
|
|
bv.setOrgSidPath(ydfOrgPath); |
|
|
|
ResultBean<String> stringResultBean = getNextNodeUserSidsOfSubmit(bv); |
|
|
|
if (!stringResultBean.getSuccess()) { |
|
|
|
//下一环节用户为空的情况
|
|
|
|
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); |
|
|
|
adminContains = true; |
|
|
|
} else { |
|
|
|
nextUserSid = stringResultBean.getData(); |
|
|
|
} |
|
|
|
} |
|
|
|
} else if (StringUtils.isBlank(nextUserSid)) { |
|
|
|
if (!"会签任务".equals(isMultiInstanceTask) && !"或签任务".equals(isMultiInstanceTask)) { |
|
|
|
//获取下一环节用户
|
|
|
|
ResultBean<String> stringResultBean = getNextNodeUserSidsOfSubmit(bv); |
|
|
|
if (!stringResultBean.getSuccess()) { |
|
|
|
//下一环节用户为空的情况
|
|
|
|
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); |
|
|
|
adminContains = true; |
|
|
|
} else { |
|
|
|
nextUserSid = stringResultBean.getData(); |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
//若下一环节用户与系统管理员一致,则自动审批
|
|
|
|
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextUserSid)) { |
|
|
|
adminContains = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
String assignee = task.getAssignee(); |
|
|
|
if (b && (StringUtils.isNotBlank(assignee) && assignee.indexOf(userSid) < 0)) { |
|
|
|
return rb.setMsg("当前用户不是环节的待办人,不能进行办理操作!"); |
|
|
@ -562,7 +535,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); |
|
|
|
isMultiInstanceTask = isMultiInstanceTask(task2); |
|
|
|
isMultiInstanceTask = isMultiInstanceTask(task2); |
|
|
|
if ("会签任务".equals(isMultiInstanceTask)) { |
|
|
|
taskService.claim(task2.getId(), approvers.get(i)); // 由候选人认领任务
|
|
|
|
isMultiInstanceTaskNext = true; |
|
|
@ -570,14 +543,33 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
taskService.claim(task2.getId(), userIds.get(i)); // 由候选人认领任务
|
|
|
|
isMultiInstanceTaskNext = true; |
|
|
|
} else { |
|
|
|
//获取下一环节用户
|
|
|
|
ResultBean<String> stringResultBean = getNextNodeUserSidsOfSubmit(bv); |
|
|
|
if (!stringResultBean.getSuccess()) { |
|
|
|
//下一环节用户为空的情况
|
|
|
|
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); |
|
|
|
adminContains = true; |
|
|
|
if ("公司间调车".equals(service) && "Activity_0695qh4".equals(bv.getTaskDefKey())) { |
|
|
|
if (StringUtils.isBlank(nextUserSid)) { |
|
|
|
bv.setOrgSidPath(ydfOrgPath); |
|
|
|
ResultBean<String> stringResultBean = getNextNodeUserSidsOfSubmit(bv); |
|
|
|
if (!stringResultBean.getSuccess()) { |
|
|
|
//下一环节用户为空的情况
|
|
|
|
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); |
|
|
|
adminContains = true; |
|
|
|
} else { |
|
|
|
nextUserSid = stringResultBean.getData(); |
|
|
|
} |
|
|
|
} |
|
|
|
} else if (StringUtils.isBlank(nextUserSid)) { |
|
|
|
//获取下一环节用户
|
|
|
|
ResultBean<String> stringResultBean = getNextNodeUserSidsOfSubmit(bv); |
|
|
|
if (!stringResultBean.getSuccess()) { |
|
|
|
//下一环节用户为空的情况
|
|
|
|
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); |
|
|
|
adminContains = true; |
|
|
|
} else { |
|
|
|
nextUserSid = stringResultBean.getData(); |
|
|
|
} |
|
|
|
} else { |
|
|
|
nextUserSid = stringResultBean.getData(); |
|
|
|
//若下一环节用户与系统管理员一致,则自动审批
|
|
|
|
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextUserSid)) { |
|
|
|
adminContains = true; |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
@ -615,51 +607,29 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
for (int i = 0; i < flowElements.size(); i++) { |
|
|
|
FlowElement flowElement = flowElements.get(i); |
|
|
|
String id = flowElement.getId(); |
|
|
|
// 如果当前环节匹配taskDefKey,并且后续环节存在
|
|
|
|
if (taskDefKey.equals(id) && i + 1 < flowElements.size()) { |
|
|
|
//获取下下一环节
|
|
|
|
FlowElement flowElement1 = flowElements.get(i + 1); |
|
|
|
List<SysUserVo> sysUserVoLists2 = new ArrayList<>(); |
|
|
|
FlowElement nextFlowElement = flowElements.get(i + 1); // 获取下一个环节
|
|
|
|
List<SysUserVo> nextUserList = getUserListFromFlowElement(nextFlowElement, orgPath); // 获取下一个环节的用户列表
|
|
|
|
|
|
|
|
// 获取下下一个环节的用户列表(如果存在)
|
|
|
|
List<SysUserVo> nextNextUserList = new ArrayList<>(); |
|
|
|
if (i + 2 < flowElements.size()) { |
|
|
|
//获取下下下一环节用户
|
|
|
|
FlowElement flowElement2 = flowElements.get(i + 2); |
|
|
|
if (flowElement2 instanceof UserTask) { |
|
|
|
UserTask userTask = (UserTask) flowElement2; |
|
|
|
List<String> candidateGroups = userTask.getCandidateGroups(); |
|
|
|
UserssQuery userssQuery = new UserssQuery(); |
|
|
|
userssQuery.setCandidateGroups(candidateGroups); |
|
|
|
userssQuery.setOrgSidPath(orgPath); |
|
|
|
sysUserVoLists2 = sysUserFeign.getUsersByRoles(userssQuery).getData(); |
|
|
|
if (sysUserVoLists2 == null) { |
|
|
|
sysUserVoLists2 = new ArrayList<>(); |
|
|
|
} |
|
|
|
} |
|
|
|
FlowElement nextNextFlowElement = flowElements.get(i + 2); // 获取下下一个环节
|
|
|
|
nextNextUserList = getUserListFromFlowElement(nextNextFlowElement, orgPath); // 获取下下一个环节的用户列表
|
|
|
|
} |
|
|
|
if (flowElement1 instanceof UserTask) { |
|
|
|
UserTask userTask = (UserTask) flowElement1; |
|
|
|
List<String> candidateGroups = userTask.getCandidateGroups(); |
|
|
|
List<SysUserVo> sysUserVoLists = new ArrayList<>(); |
|
|
|
UserssQuery userssQuery = new UserssQuery(); |
|
|
|
userssQuery.setCandidateGroups(candidateGroups); |
|
|
|
userssQuery.setOrgSidPath(orgPath); |
|
|
|
sysUserVoLists = sysUserFeign.getUsersByRoles(userssQuery).getData(); |
|
|
|
if (sysUserVoLists == null) { |
|
|
|
sysUserVoLists = new ArrayList<>(); |
|
|
|
} |
|
|
|
//当前环节运营部总经理 刘丽艳 点击同意 下一环节 事业部副总经理 (nextUserSid) 和事业部总经理(sysUserVoLists.get(0).getSid())
|
|
|
|
//判断查询回来的用户的集合size是1 并且用户的sid和下一环节的用户的sid相同。
|
|
|
|
if (sysUserVoLists.size() == 1 && sysUserVoLists.get(0).getSid().equals(nextUserSid)) { |
|
|
|
contains = true; |
|
|
|
break; |
|
|
|
} |
|
|
|
//如果下下一环节无用户,下下下一环节用户与下一环节用户相同且只有一个,则下一环节用户自动审批。
|
|
|
|
if (sysUserVoLists.size() == 0 && sysUserVoLists2.size() == 1 && sysUserVoLists2.get(0).getSid().equals(nextUserSid)) { |
|
|
|
contains = true; |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
// 如果下一个环节只有一个用户,并且其sid与下一级相同,则设置contains为true
|
|
|
|
if (nextUserList.size() == 1 && nextUserList.get(0).getSid().equals(nextUserSid)) { |
|
|
|
contains = true; // 确定自动审批
|
|
|
|
break; // 跳出循环,不再检查后续环节
|
|
|
|
} |
|
|
|
|
|
|
|
// 如果下下一个环节没有用户,且下下下一个环节与下一级相同,设置contains为true
|
|
|
|
if (nextUserList.isEmpty() && nextNextUserList.size() == 1 && nextNextUserList.get(0).getSid().equals(nextUserSid)) { |
|
|
|
contains = true; // 确定自动审批
|
|
|
|
break; // 跳出循环
|
|
|
|
} |
|
|
|
} |
|
|
|
if (contains) { |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -689,7 +659,27 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
return rb.success().setData(vo); |
|
|
|
} |
|
|
|
|
|
|
|
public ResultBean<UpdateFlowFieldVo> handleProsess222(BusinessVariables bv, boolean b) { |
|
|
|
/** |
|
|
|
* 提取获取用户角色列表的公共方法,避免重复代码 |
|
|
|
* |
|
|
|
* @param flowElement 当前流程环节 |
|
|
|
* @param orgPath 当前用户的组织路径 |
|
|
|
* @return 用户列表 |
|
|
|
*/ |
|
|
|
private List<SysUserVo> getUserListFromFlowElement(FlowElement flowElement, String orgPath) { |
|
|
|
List<SysUserVo> userList = new ArrayList<>(); // 初始化用户列表
|
|
|
|
if (flowElement instanceof UserTask) { // 判断当前环节是否为用户任务
|
|
|
|
UserTask userTask = (UserTask) flowElement; // 转换为用户任务类型
|
|
|
|
List<String> candidateGroups = userTask.getCandidateGroups(); // 获取候选组
|
|
|
|
UserssQuery userssQuery = new UserssQuery(); // 创建查询对象
|
|
|
|
userssQuery.setCandidateGroups(candidateGroups); // 设置候选组
|
|
|
|
userssQuery.setOrgSidPath(orgPath); // 设置组织路径
|
|
|
|
userList = sysUserFeign.getUsersByRoles(userssQuery).getData(); // 根据角色查询用户
|
|
|
|
} |
|
|
|
return userList == null ? new ArrayList<>() : userList; // 如果返回为null,则返回空列表
|
|
|
|
} |
|
|
|
|
|
|
|
/* public ResultBean<UpdateFlowFieldVo> handleProsess222(BusinessVariables bv, boolean b) { |
|
|
|
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail(); |
|
|
|
UpdateFlowFieldVo vo = new UpdateFlowFieldVo(); |
|
|
|
// 或签任务候选人
|
|
|
@ -915,7 +905,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
vo.setTaskDefKey(taskDefKey); |
|
|
|
vo.setSid(bv.getBusinessSid()); |
|
|
|
return rb.success().setData(vo); |
|
|
|
} |
|
|
|
}*/ |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取下一环节用户 |
|
|
@ -1519,7 +1509,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public ResultBean submit222() { |
|
|
|
/* public ResultBean submit222() { |
|
|
|
String userSid = "7f56f6ec-4a5f-47b0-aaab-158d64cb97b1"; |
|
|
|
// 或签任务候选人
|
|
|
|
List<String> userIds = new ArrayList<>(); |
|
|
@ -1634,37 +1624,10 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
assertTrue(isEnded2); |
|
|
|
|
|
|
|
return ResultBean.fireSuccess(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* private boolean isMultiInstanceTask(Task task, boolean isSequential) { |
|
|
|
// 获取任务节点的ID
|
|
|
|
String taskDefinitionKey = task.getTaskDefinitionKey(); |
|
|
|
|
|
|
|
// 获取流程定义对象
|
|
|
|
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() |
|
|
|
.processDefinitionId(task.getProcessDefinitionId()) |
|
|
|
.singleResult(); |
|
|
|
|
|
|
|
// 获取BPMN模型,解析任务定义
|
|
|
|
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId()); |
|
|
|
FlowElement flowElement = bpmnModel.getFlowElement(taskDefinitionKey); |
|
|
|
|
|
|
|
// 判断flowElement是否是UserTask,并且获取其multiInstanceLoopCharacteristics
|
|
|
|
if (flowElement instanceof UserTask) { |
|
|
|
UserTask userTask = (UserTask) flowElement; |
|
|
|
// 获取multiInstanceLoopCharacteristics
|
|
|
|
MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); |
|
|
|
if (multiInstance != null) { |
|
|
|
boolean sequential = multiInstance.isSequential(); |
|
|
|
return sequential == isSequential; |
|
|
|
} |
|
|
|
} |
|
|
|
return false; |
|
|
|
}*/ |
|
|
|
|
|
|
|
|
|
|
|
public ResultBean submit333() { |
|
|
|
public ResultBean submit333() { |
|
|
|
String userSid = "7f56f6ec-4a5f-47b0-aaab-158d64cb97b1"; |
|
|
|
// 或签任务候选人
|
|
|
|
List<String> userIds = Arrays.asList( |
|
|
|