|
|
@ -570,9 +570,243 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
taskService.claim(task2.getId(), userIds.get(i)); // 由候选人认领任务
|
|
|
|
isMultiInstanceTaskNext = true; |
|
|
|
} else { |
|
|
|
ResultBean<String> userResultBean = getNextNodeUser(bv); |
|
|
|
bv.setNextNodeUserSids(userResultBean.getData()); |
|
|
|
nextUserSid = bv.getNextNodeUserSids(); |
|
|
|
//获取下一环节用户
|
|
|
|
ResultBean<String> stringResultBean = getNextNodeUserSidsOfSubmit(bv); |
|
|
|
if (!stringResultBean.getSuccess()) { |
|
|
|
//下一环节用户为空的情况
|
|
|
|
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); |
|
|
|
adminContains = true; |
|
|
|
} else { |
|
|
|
nextUserSid = stringResultBean.getData(); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
//根据流程实例的id取最新的待办环节,给环节设置上用户sid
|
|
|
|
ResultBean<List<LatestTaskVo>> ll = flowTaskService.getLatestTasksNew(instanceId); |
|
|
|
if (ll.getData().size() > 0) { |
|
|
|
LatestTaskVo latestTaskVo = ll.getData().get(0); |
|
|
|
String id_ = latestTaskVo.getId_(); |
|
|
|
if (!isMultiInstanceTaskNext && checkTask) { |
|
|
|
//查询下一环节用户是否有转办人
|
|
|
|
nextUserSid = change(nextUserSid, bv.getInstanceId()); |
|
|
|
taskService.setAssignee(id_, nextUserSid);//将下一环节用户放入流程中
|
|
|
|
} |
|
|
|
vo.setTaskId(id_); |
|
|
|
//在act_ru_variable表中增加环节上的业务参数的变量
|
|
|
|
taskService.setVariablesLocal(id_, formVariables); |
|
|
|
nodeState = latestTaskVo.getName_(); |
|
|
|
taskDefKey = latestTaskVo.getTask_def_key_(); |
|
|
|
} else { |
|
|
|
nodeState = FlowComment.SETTLE.getRemark(); |
|
|
|
taskDefKey = "Event_end"; |
|
|
|
vo.setNodeState(FlowComment.SETTLE.getRemark()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (!isMultiInstanceTaskNext) { |
|
|
|
if (!DelegationState.PENDING.equals(task.getDelegationState())) { |
|
|
|
//获取该流程所有要走的环节节点
|
|
|
|
List<FlowElement> flowElements = calApprovePath(bv.getModelId(), |
|
|
|
bv.getFormVariables()); |
|
|
|
for (int i = 0; i < flowElements.size(); i++) { |
|
|
|
FlowElement flowElement = flowElements.get(i); |
|
|
|
String id = flowElement.getId(); |
|
|
|
if (taskDefKey.equals(id) && i + 1 < flowElements.size()) { |
|
|
|
//获取下下一环节
|
|
|
|
FlowElement flowElement1 = flowElements.get(i + 1); |
|
|
|
List<SysUserVo> sysUserVoLists2 = 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<>(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
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; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (contains) { |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
//设置管理员是否自动审批的字段是否是是。//若下一环节用户与系统管理员一致,则自动审批
|
|
|
|
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); |
|
|
|
bv.setTaskId(vo.getTaskId()); |
|
|
|
bv.setTaskDefKey(taskDefKey); |
|
|
|
bv.setComment("因与下一级审批人相同,系统自动处理,需以下一级审批人审批意见为准!"); |
|
|
|
return handleProsess(bv, false); |
|
|
|
} |
|
|
|
vo.setProcInsId(instanceId); |
|
|
|
vo.setProcDefId(bv.getModelId()); |
|
|
|
vo.setNodeState(nodeState); |
|
|
|
vo.setTaskDefKey(taskDefKey); |
|
|
|
vo.setSid(bv.getBusinessSid()); |
|
|
|
return rb.success().setData(vo); |
|
|
|
} |
|
|
|
|
|
|
|
public ResultBean<UpdateFlowFieldVo> handleProsess222(BusinessVariables bv, boolean b) { |
|
|
|
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail(); |
|
|
|
UpdateFlowFieldVo vo = new UpdateFlowFieldVo(); |
|
|
|
// 或签任务候选人
|
|
|
|
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"); |
|
|
|
//获取表单中的参数
|
|
|
|
Map<String, Object> formVariables = bv.getFormVariables(); |
|
|
|
formVariables = formVariables == null ? new HashMap<>() : formVariables; |
|
|
|
formVariables.put("businessSid", bv.getBusinessSid()); |
|
|
|
formVariables.put("userSids", userIds); |
|
|
|
formVariables.put("approvers", approvers); |
|
|
|
String nextUserSid = bv.getNextNodeUserSids(); |
|
|
|
String taskId = bv.getTaskId(); |
|
|
|
String userSid = bv.getUserSid(); |
|
|
|
String instanceId = bv.getInstanceId(); |
|
|
|
String comment = bv.getComment(); |
|
|
|
String nodeState = ""; |
|
|
|
String taskDefKey = ""; |
|
|
|
String orgPath = bv.getOrgSidPath(); |
|
|
|
//设置下一环节审批人是否自动审批通过,默认否
|
|
|
|
boolean contains = false; |
|
|
|
//设置是否是管理员自动审批,默认否
|
|
|
|
boolean adminContains = false; |
|
|
|
//查询任务id为taskId的任务是否存在
|
|
|
|
Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); |
|
|
|
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"); |
|
|
|
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("当前用户不是环节的待办人,不能进行办理操作!"); |
|
|
|
} |
|
|
|
|
|
|
|
if (DelegationState.PENDING.equals(task.getDelegationState())) { |
|
|
|
adminContains = false; |
|
|
|
//加签
|
|
|
|
Authentication.setAuthenticatedUserId(userSid); |
|
|
|
taskService.addComment(taskId, instanceId, |
|
|
|
FlowComment.DELEGATE.getType(), comment); |
|
|
|
taskService.resolveTask(taskId, formVariables); |
|
|
|
nodeState = task.getName(); |
|
|
|
taskDefKey = task.getTaskDefinitionKey(); |
|
|
|
} else { |
|
|
|
boolean checkTask = false;//是否要查询当前任务是否是会签环节
|
|
|
|
List<Task> tasks = taskService.createTaskQuery().processInstanceId(instanceId).list(); |
|
|
|
if (tasks.size() == 1 || "或签任务".equals(isMultiInstanceTask)) { |
|
|
|
checkTask = true; |
|
|
|
} |
|
|
|
taskService.addComment(taskId, instanceId, FlowComment.NORMAL.getType(), comment); |
|
|
|
log.error("taskid:{},userSid:{}", taskId, userSid); |
|
|
|
log.error("formVariables:{}", JSON.toJSONString(formVariables)); |
|
|
|
taskService.setAssignee(taskId, userSid); |
|
|
|
taskService.complete(taskId, formVariables); |
|
|
|
if (checkTask) { |
|
|
|
tasks = taskService.createTaskQuery().processInstanceId(instanceId).list(); |
|
|
|
for (int i = 0; i < tasks.size(); i++) { |
|
|
|
Task task2 = tasks.get(i); |
|
|
|
isMultiInstanceTask = isMultiInstanceTask(task2); |
|
|
|
if ("会签任务".equals(isMultiInstanceTask)) { |
|
|
|
taskService.claim(task2.getId(), approvers.get(i)); // 由候选人认领任务
|
|
|
|
isMultiInstanceTaskNext = true; |
|
|
|
} else if ("或签任务".equals(isMultiInstanceTask)) { |
|
|
|
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; |
|
|
|
} else { |
|
|
|
nextUserSid = stringResultBean.getData(); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|