|
|
@ -50,6 +50,7 @@ import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.web.bind.annotation.PostMapping; |
|
|
|
|
|
|
|
import java.util.*; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
import static org.junit.Assert.*; |
|
|
|
|
|
|
@ -98,20 +99,346 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
|
|
|
|
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById(BusinessVariables bv) { |
|
|
|
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail(); |
|
|
|
// 获取流程定义ID和发起人ID
|
|
|
|
//获取变量
|
|
|
|
String procDefId = bv.getModelId(); |
|
|
|
String userSid = bv.getUserSid(); |
|
|
|
// 获取传入的变量
|
|
|
|
Map<String, Object> variables = bv.getFormVariables(); |
|
|
|
Map<String, Object> variablesSeconds = bv.getFormVariables(); |
|
|
|
//下一环节待办人
|
|
|
|
String nextNodeUserSids = bv.getNextNodeUserSids(); |
|
|
|
//会签人员
|
|
|
|
List<String> approversList = Optional.ofNullable((List<String>) variables.get("approvers")) |
|
|
|
.orElseGet(ArrayList::new); |
|
|
|
List<String> userSidForNextNode = new ArrayList<>(); |
|
|
|
//如果指定的下一环节用户为空
|
|
|
|
if (StringUtils.isBlank(nextNodeUserSids)) { |
|
|
|
userSidForNextNode = getNextNodeUser(bv).getData(); |
|
|
|
variables.put("approvers", userSidForNextNode); |
|
|
|
//根据角色查询下一环节待办人
|
|
|
|
ResultBean<List<String>> listResultBean = getNextNodeUser(bv); |
|
|
|
if (!listResultBean.getSuccess()) { |
|
|
|
return rb.setMsg(listResultBean.getMsg()); |
|
|
|
} |
|
|
|
userSidForNextNode = listResultBean.getData(); |
|
|
|
nextNodeUserSids = String.join(",", userSidForNextNode); |
|
|
|
//如果会签人员为空
|
|
|
|
if (approversList.isEmpty()) { |
|
|
|
approversList = userSidForNextNode; |
|
|
|
variables.put("approvers", approversList); |
|
|
|
} |
|
|
|
} else { |
|
|
|
userSidForNextNode.add(nextNodeUserSids); |
|
|
|
} |
|
|
|
// 根据流程定义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 adminContains = false; |
|
|
|
String id_ = "", name_ = "", taskDefKey_ = ""; |
|
|
|
//查询当前实例最新的待办任务
|
|
|
|
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) || "或签任务".equals(isMultiInstanceTask)) { |
|
|
|
userSidForNextNode = approversList; |
|
|
|
String approver = getApproverForTask(userSidForNextNode, i); |
|
|
|
approver = change(approver, bv.getInstanceId()); |
|
|
|
taskService.claim(task2.getId(), approver); |
|
|
|
} else { |
|
|
|
//单一审批
|
|
|
|
nextNodeUserSids = userSidForNextNode.get(0); |
|
|
|
//查询下一环节是否有转办并添加评论
|
|
|
|
nextNodeUserSids = change(nextNodeUserSids, processInstance.getProcessInstanceId()); |
|
|
|
taskService.setAssignee(task2.getId(), nextNodeUserSids); |
|
|
|
taskService.setVariablesLocal(task2.getId(), variables); |
|
|
|
} |
|
|
|
} |
|
|
|
tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list(); |
|
|
|
//遍历待办任务
|
|
|
|
for (int i = 0; i < tasks.size(); i++) { |
|
|
|
Task task2 = tasks.get(i); |
|
|
|
String isMultiInstanceTask = isMultiInstanceTask(task2); |
|
|
|
id_ = task2.getId(); |
|
|
|
taskDefKey_ = task2.getTaskDefinitionKey(); |
|
|
|
name_ = task2.getName(); |
|
|
|
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) { |
|
|
|
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) { |
|
|
|
adminContains = true; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
//提交前传入下一环节待办人
|
|
|
|
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids) || adminContains) { |
|
|
|
return handleAutomaticApproval(bv, task, id_, taskDefKey_, variables, processDefinition); |
|
|
|
} |
|
|
|
// 如果申请人与下一环节审批人相同,则自动审批
|
|
|
|
if (bv.getUserSid().equals(nextNodeUserSids)) { |
|
|
|
return handleSelfApproval(bv, task, id_, taskDefKey_, variables, processDefinition); |
|
|
|
} |
|
|
|
// 实例化 UpdateFlowFieldVo
|
|
|
|
UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo(); |
|
|
|
updateFlowFieldVo.setProcInsId(task.getProcessInstanceId()); |
|
|
|
updateFlowFieldVo.setNodeState(name_); |
|
|
|
updateFlowFieldVo.setTaskId(id_); |
|
|
|
updateFlowFieldVo.setTaskDefKey(taskDefKey_); |
|
|
|
updateFlowFieldVo.setProcDefId(bv.getModelId()); |
|
|
|
updateFlowFieldVo.setSid(bv.getBusinessSid()); |
|
|
|
updateFlowFieldVo.setName(processDefinition.getName()); |
|
|
|
return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public ResultBean<UpdateFlowFieldVo> handleProsess(BusinessVariables bv, boolean b) { |
|
|
|
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail(); |
|
|
|
UpdateFlowFieldVo vo = new UpdateFlowFieldVo(); |
|
|
|
Map<String, Object> formVariables = Optional.ofNullable(bv.getFormVariables()).orElseGet(HashMap::new); |
|
|
|
formVariables.put("businessSid", bv.getBusinessSid()); |
|
|
|
String taskId = bv.getTaskId(), |
|
|
|
nextUserSid = bv.getNextNodeUserSids(), |
|
|
|
userSid = bv.getUserSid(), |
|
|
|
instanceId = bv.getInstanceId(), |
|
|
|
comment = bv.getComment(), |
|
|
|
orgPath = bv.getOrgSidPath(), |
|
|
|
service = (String) formVariables.get("service"), |
|
|
|
ydfOrgPath = (String) formVariables.get("ydfOrgPath"), |
|
|
|
nodeState = "", taskDefKey = ""; |
|
|
|
//设置下一环节审批人是否自动审批通过,默认否
|
|
|
|
boolean contains = false, |
|
|
|
//设置是否是管理员自动审批,默认否
|
|
|
|
adminContains = false; |
|
|
|
//指定的会签用户
|
|
|
|
List<String> approversList = Optional.ofNullable((List<String>) formVariables.get("approvers")) |
|
|
|
.orElseGet(ArrayList::new); |
|
|
|
List<String> userSidForNextNode = new ArrayList<>(); |
|
|
|
// 根据流程定义ID查询最新的流程定义
|
|
|
|
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() |
|
|
|
.processDefinitionId(bv.getModelId()) |
|
|
|
.latestVersion() |
|
|
|
.singleResult(); |
|
|
|
//查询任务id为taskId的任务是否存在
|
|
|
|
Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); |
|
|
|
if (Objects.isNull(task)) { |
|
|
|
return rb.setMsg("任务不存在"); |
|
|
|
} |
|
|
|
String assignee = task.getAssignee(); |
|
|
|
if (b && (StringUtils.isNotBlank(assignee) && assignee.indexOf(userSid) < 0)) { |
|
|
|
return rb.setMsg("当前用户不是环节的待办人,不能进行办理操作!"); |
|
|
|
} |
|
|
|
//查询任务时单一审批还是或签还是会签?
|
|
|
|
String isMultiInstanceTask = isMultiInstanceTask(task); |
|
|
|
//查询所有的待办任务
|
|
|
|
List<Task> tasks = taskService.createTaskQuery().processInstanceId(instanceId).list(); |
|
|
|
|
|
|
|
if (StringUtils.isBlank(nextUserSid)) { |
|
|
|
if ("公司间调车".equals(service) && "Activity_0695qh4".equals(bv.getTaskDefKey())) { |
|
|
|
bv.setOrgSidPath(ydfOrgPath); |
|
|
|
} |
|
|
|
if (!"会签任务".equals(isMultiInstanceTask) || tasks.size() == 1) { |
|
|
|
//查询下一环节待办人
|
|
|
|
ResultBean<List<String>> listResultBean = getNextNodeUserSidsOfSubmit(bv); |
|
|
|
if (!listResultBean.getSuccess()) { |
|
|
|
//如果查询下一环节待办人为空,则默认为管理员
|
|
|
|
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); |
|
|
|
userSidForNextNode.add(nextUserSid); |
|
|
|
adminContains = true; |
|
|
|
} else { |
|
|
|
if (listResultBean.getData() != null && listResultBean.getData().size() != 0) { |
|
|
|
userSidForNextNode = listResultBean.getData(); |
|
|
|
} |
|
|
|
//如果会签人员为空,则查询下一环节人
|
|
|
|
if (approversList.isEmpty()) { |
|
|
|
formVariables.put("approvers", userSidForNextNode); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
userSidForNextNode.add(nextUserSid); |
|
|
|
//若下一环节用户与系统管理员一致,则自动审批
|
|
|
|
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextUserSid)) { |
|
|
|
adminContains = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
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 isMultiInstanceTaskNext = false; |
|
|
|
tasks = taskService.createTaskQuery().processInstanceId(instanceId).list(); |
|
|
|
//是否要查询当前任务是否是会签环节
|
|
|
|
boolean checkTask = tasks.size() == 1 || "或签任务".equals(isMultiInstanceTask); |
|
|
|
//当前任务办理完成
|
|
|
|
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); |
|
|
|
//查询办理完后的最新待办任务
|
|
|
|
tasks = taskService.createTaskQuery().processInstanceId(instanceId).list(); |
|
|
|
if (tasks.size() > 0) { |
|
|
|
for (int i = 0; i < tasks.size(); i++) { |
|
|
|
Task task2 = tasks.get(i); |
|
|
|
if (checkTask) { |
|
|
|
isMultiInstanceTask = isMultiInstanceTask(task2); |
|
|
|
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) { |
|
|
|
userSidForNextNode = approversList; |
|
|
|
String nextUserSidNext = userSidForNextNode.get(i); |
|
|
|
nextUserSidNext = change(nextUserSidNext, bv.getInstanceId()); |
|
|
|
taskService.claim(task2.getId(), nextUserSidNext); // 由候选人认领任务
|
|
|
|
isMultiInstanceTaskNext = true; |
|
|
|
|
|
|
|
} else { |
|
|
|
nextUserSid = userSidForNextNode.get(0); |
|
|
|
//查询下一环节用户是否有转办人
|
|
|
|
nextUserSid = change(nextUserSid, bv.getInstanceId()); |
|
|
|
taskService.setAssignee(task2.getId(), nextUserSid);//将下一环节用户放入流程中
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
List<String> taskIdList = tasks.stream().map(v -> v.getId()).collect(Collectors.toList()); |
|
|
|
String taskIds = String.join(",", taskIdList); |
|
|
|
vo.setTaskId(taskIds); |
|
|
|
//在act_ru_variable表中增加环节上的业务参数的变量
|
|
|
|
taskService.setVariablesLocal(tasks.get(0).getId(), formVariables); |
|
|
|
nodeState = tasks.get(0).getName(); |
|
|
|
taskDefKey = tasks.get(0).getTaskDefinitionKey(); |
|
|
|
//遍历待办任务,将存在管理员的自动审批
|
|
|
|
for (int i = 0; i < tasks.size(); i++) { |
|
|
|
Task task2 = tasks.get(i); |
|
|
|
isMultiInstanceTask = isMultiInstanceTask(task2); |
|
|
|
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) { |
|
|
|
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) { |
|
|
|
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); |
|
|
|
adminContains = true; |
|
|
|
vo.setTaskId(task2.getId()); |
|
|
|
nodeState = task2.getName(); |
|
|
|
taskDefKey = task2.getTaskDefinitionKey(); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
nodeState = FlowComment.SETTLE.getRemark(); |
|
|
|
taskDefKey = "Event_end"; |
|
|
|
vo.setNodeState(FlowComment.SETTLE.getRemark()); |
|
|
|
} |
|
|
|
if (!isMultiInstanceTaskNext) { |
|
|
|
//获取该流程所有要走的环节节点
|
|
|
|
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(); |
|
|
|
// 如果当前环节匹配taskDefKey,并且后续环节存在
|
|
|
|
if (taskDefKey.equals(id) && i + 1 < flowElements.size()) { |
|
|
|
FlowElement nextFlowElement = flowElements.get(i + 1); // 获取下一个环节
|
|
|
|
List<SysUserVo> nextUserList = getUserListFromFlowElement(nextFlowElement, orgPath); // 获取下一个环节的用户列表
|
|
|
|
|
|
|
|
// 获取下下一个环节的用户列表(如果存在)
|
|
|
|
List<SysUserVo> nextNextUserList = new ArrayList<>(); |
|
|
|
if (i + 2 < flowElements.size()) { |
|
|
|
FlowElement nextNextFlowElement = flowElements.get(i + 2); // 获取下下一个环节
|
|
|
|
nextNextUserList = getUserListFromFlowElement(nextNextFlowElement, orgPath); // 获取下下一个环节的用户列表
|
|
|
|
} |
|
|
|
|
|
|
|
// 如果下一个环节只有一个用户,并且其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 (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()); |
|
|
|
vo.setName(processDefinition.getName()); |
|
|
|
return rb.success().setData(vo); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById222(BusinessVariables bv) { |
|
|
|
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail(); |
|
|
|
// 实例化 UpdateFlowFieldVo
|
|
|
|
UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo(); |
|
|
|
String procDefId = bv.getModelId(); |
|
|
|
String userSid = bv.getUserSid(); |
|
|
|
String nextNodeUserSids = bv.getNextNodeUserSids(); |
|
|
|
Map<String, Object> variables = bv.getFormVariables(); |
|
|
|
Map<String, Object> variablesSeconds = bv.getFormVariables(); |
|
|
|
|
|
|
|
List<String> userSidForNextNode = new ArrayList<>(); |
|
|
|
List<String> approversList = Optional.ofNullable((List<String>) variables.get("approvers")) |
|
|
|
.orElseGet(ArrayList::new); |
|
|
|
if (StringUtils.isBlank(nextNodeUserSids)) { |
|
|
|
userSidForNextNode = getNextNodeUser(bv).getData(); |
|
|
|
if (!approversList.isEmpty()) { |
|
|
|
variables.put("approvers", approversList); |
|
|
|
} else { |
|
|
|
approversList = userSidForNextNode; |
|
|
|
variables.put("approvers", approversList); |
|
|
|
} |
|
|
|
} else { |
|
|
|
//下一环节审批人
|
|
|
|
userSidForNextNode.add(nextNodeUserSids); |
|
|
|
} |
|
|
|
// 根据流程定义ID查询最新的流程定义
|
|
|
|
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() |
|
|
|
.processDefinitionId(procDefId) |
|
|
@ -157,6 +484,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
task_def_key_ = task2.getTaskDefinitionKey(); |
|
|
|
name_ = task2.getName(); |
|
|
|
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) { |
|
|
|
userSidForNextNode = approversList; |
|
|
|
String approver = getApproverForTask(userSidForNextNode, i); |
|
|
|
approver = change(approver, bv.getInstanceId()); |
|
|
|
taskService.claim(task2.getId(), approver); |
|
|
@ -177,7 +505,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
task_def_key_ = task2.getTaskDefinitionKey(); |
|
|
|
name_ = task2.getName(); |
|
|
|
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) { |
|
|
|
if(ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())){ |
|
|
|
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) { |
|
|
|
adminContains = true; |
|
|
|
break; |
|
|
|
} |
|
|
@ -194,18 +522,15 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
taskService.setVariablesLocal(id_, variables); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//提交前传入下一环节待办人
|
|
|
|
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids) || adminContains) { |
|
|
|
return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition); |
|
|
|
return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, processDefinition); |
|
|
|
} |
|
|
|
// 如果申请人与下一环节审批人相同,则自动审批
|
|
|
|
if (bv.getUserSid().equals(nextNodeUserSids)) { |
|
|
|
return handleSelfApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition); |
|
|
|
return handleSelfApproval(bv, task, id_, task_def_key_, variables, processDefinition); |
|
|
|
} |
|
|
|
// 实例化 UpdateFlowFieldVo
|
|
|
|
UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo(); |
|
|
|
|
|
|
|
updateFlowFieldVo.setProcInsId(task.getProcessInstanceId()); |
|
|
|
updateFlowFieldVo.setNodeState(name_); |
|
|
|
updateFlowFieldVo.setTaskId(id_); |
|
|
@ -216,7 +541,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); |
|
|
|
} |
|
|
|
|
|
|
|
public ResultBean<UpdateFlowFieldVo> handleProsess(BusinessVariables bv, boolean b) { |
|
|
|
public ResultBean<UpdateFlowFieldVo> handleProsess222(BusinessVariables bv, boolean b) { |
|
|
|
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail(); |
|
|
|
UpdateFlowFieldVo vo = new UpdateFlowFieldVo(); |
|
|
|
//获取表单中的参数
|
|
|
@ -249,6 +574,8 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
if (b && (StringUtils.isNotBlank(assignee) && assignee.indexOf(userSid) < 0)) { |
|
|
|
return rb.setMsg("当前用户不是环节的待办人,不能进行办理操作!"); |
|
|
|
} |
|
|
|
List<String> approversList = Optional.ofNullable((List<String>) formVariables.get("approvers")) |
|
|
|
.orElseGet(ArrayList::new); |
|
|
|
if (StringUtils.isBlank(nextUserSid)) { |
|
|
|
if ("公司间调车".equals(service) && "Activity_0695qh4".equals(bv.getTaskDefKey())) { |
|
|
|
bv.setOrgSidPath(ydfOrgPath); |
|
|
@ -257,10 +584,10 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
if (!listResultBean.getSuccess()) { |
|
|
|
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); |
|
|
|
adminContains = true; |
|
|
|
userSidForNextNode.add(nextUserSid); |
|
|
|
} else { |
|
|
|
if(listResultBean.getData() != null){ |
|
|
|
if (listResultBean.getData() != null) { |
|
|
|
userSidForNextNode = listResultBean.getData(); |
|
|
|
formVariables.put("approvers", listResultBean.getData()); |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
@ -269,6 +596,24 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
adminContains = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (!approversList.isEmpty()) { |
|
|
|
formVariables.put("approvers", approversList); |
|
|
|
} else { |
|
|
|
ResultBean<List<String>> listResultBean = getNextNodeUserSidsOfSubmit(bv); |
|
|
|
if (!listResultBean.getSuccess()) { |
|
|
|
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); |
|
|
|
adminContains = true; |
|
|
|
userSidForNextNode.add(nextUserSid); |
|
|
|
} else { |
|
|
|
if (listResultBean.getData() != null) { |
|
|
|
approversList = listResultBean.getData(); |
|
|
|
formVariables.put("approvers", approversList); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//是否是多实例任务
|
|
|
|
String isMultiInstanceTask = isMultiInstanceTask(task); |
|
|
|
boolean isMultiInstanceTaskNext = false; |
|
|
@ -301,6 +646,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
Task task2 = tasks.get(i); |
|
|
|
isMultiInstanceTask = isMultiInstanceTask(task2); |
|
|
|
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) { |
|
|
|
userSidForNextNode = approversList; |
|
|
|
String nextUserSidNext = userSidForNextNode.get(i); |
|
|
|
nextUserSidNext = change(nextUserSidNext, bv.getInstanceId()); |
|
|
|
taskService.claim(task2.getId(), nextUserSidNext); // 由候选人认领任务
|
|
|
@ -312,7 +658,9 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
nextUserSid = change(nextUserSid, bv.getInstanceId()); |
|
|
|
taskService.setAssignee(task2.getId(), nextUserSid);//将下一环节用户放入流程中
|
|
|
|
} |
|
|
|
vo.setTaskId(task2.getId()); |
|
|
|
List<String> taskIdList = tasks.stream().map(v -> v.getId()).collect(Collectors.toList()); |
|
|
|
String taskIds = String.join(",", taskIdList); |
|
|
|
vo.setTaskId(taskIds); |
|
|
|
//在act_ru_variable表中增加环节上的业务参数的变量
|
|
|
|
taskService.setVariablesLocal(task2.getId(), formVariables); |
|
|
|
nodeState = task2.getName(); |
|
|
@ -323,11 +671,11 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
for (int i = 0; i < tasks.size(); i++) { |
|
|
|
Task task2 = tasks.get(i); |
|
|
|
isMultiInstanceTask = isMultiInstanceTask(task2); |
|
|
|
vo.setTaskId(task2.getId()); |
|
|
|
/* vo.setTaskId(task2.getId()); |
|
|
|
nodeState = task2.getName(); |
|
|
|
taskDefKey = task2.getTaskDefinitionKey(); |
|
|
|
taskDefKey = task2.getTaskDefinitionKey();*/ |
|
|
|
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) { |
|
|
|
if(ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())){ |
|
|
|
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) { |
|
|
|
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); |
|
|
|
adminContains = true; |
|
|
|
break; |
|
|
@ -341,9 +689,12 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
}else{//会签
|
|
|
|
} else {//会签
|
|
|
|
Task task2 = tasks.get(0); |
|
|
|
vo.setTaskId(task2.getId()); |
|
|
|
List<String> taskIdList = tasks.stream().map(v -> v.getId()).collect(Collectors.toList()); |
|
|
|
String taskIds = String.join(",", taskIdList); |
|
|
|
// vo.setTaskId(task2.getId());
|
|
|
|
vo.setTaskId(taskIds); |
|
|
|
nodeState = task2.getName(); |
|
|
|
taskDefKey = task2.getTaskDefinitionKey(); |
|
|
|
|
|
|
@ -408,7 +759,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
return rb.success().setData(vo); |
|
|
|
} |
|
|
|
|
|
|
|
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById222(BusinessVariables bv) { |
|
|
|
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById111(BusinessVariables bv) { |
|
|
|
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail(); |
|
|
|
// 或签任务候选人
|
|
|
|
/* List<String> userIds = Arrays.asList( |
|
|
@ -497,12 +848,12 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
taskService.setVariablesLocal(id_, variables); |
|
|
|
|
|
|
|
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids)) { |
|
|
|
return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition); |
|
|
|
return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, processDefinition); |
|
|
|
} |
|
|
|
|
|
|
|
// 如果申请人与下一环节审批人相同,则自动审批
|
|
|
|
if (bv.getUserSid().equals(nextNodeUserSids)) { |
|
|
|
return handleSelfApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition); |
|
|
|
return handleSelfApproval(bv, task, id_, task_def_key_, variables, processDefinition); |
|
|
|
} |
|
|
|
} else { |
|
|
|
List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list(); |
|
|
@ -514,7 +865,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
if (!ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) { |
|
|
|
continue; |
|
|
|
} else { |
|
|
|
return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition); |
|
|
|
return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, processDefinition); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -544,7 +895,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
* 处理自动审批逻辑(当任务为转办时) |
|
|
|
*/ |
|
|
|
private ResultBean<UpdateFlowFieldVo> handleAutomaticApproval(BusinessVariables bv, Task task, String id_, String task_def_key_, |
|
|
|
Map<String, Object> variables, Map<String, Object> variablesSeconds, ProcessDefinition processDefinition) { |
|
|
|
Map<String, Object> variables, ProcessDefinition processDefinition) { |
|
|
|
bv.setModelId(bv.getModelId()); |
|
|
|
bv.setInstanceId(task.getProcessInstanceId()); |
|
|
|
bv.setTaskId(id_); |
|
|
@ -553,7 +904,6 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
bv.setTaskDefKey(task_def_key_); |
|
|
|
bv.setFormVariables(variables); |
|
|
|
bv.setOrgSidPath(bv.getOrgSidPath()); |
|
|
|
bv.setFormVariables(variablesSeconds); |
|
|
|
bv.setComment("系统自动转办!"); |
|
|
|
bv.setNextNodeUserSids(""); |
|
|
|
|
|
|
@ -565,7 +915,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
* 处理自动审批逻辑(当申请人与下一环节审批人相同) |
|
|
|
*/ |
|
|
|
private ResultBean<UpdateFlowFieldVo> handleSelfApproval(BusinessVariables bv, Task task, String id_, String task_def_key_, |
|
|
|
Map<String, Object> variables, Map<String, Object> variablesSeconds, ProcessDefinition processDefinition) { |
|
|
|
Map<String, Object> variables, ProcessDefinition processDefinition) { |
|
|
|
bv.setModelId(bv.getModelId()); |
|
|
|
bv.setInstanceId(task.getProcessInstanceId()); |
|
|
|
bv.setTaskId(id_); |
|
|
@ -574,7 +924,6 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
bv.setTaskDefKey(task_def_key_); |
|
|
|
bv.setFormVariables(variables); |
|
|
|
bv.setOrgSidPath(bv.getOrgSidPath()); |
|
|
|
bv.setFormVariables(variablesSeconds); |
|
|
|
bv.setComment("因与申请人相同,系统自动处理,需以下一级审批人审批意见为准!"); |
|
|
|
bv.setNextNodeUserSids(""); |
|
|
|
|
|
|
@ -653,7 +1002,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
return userList == null ? new ArrayList<>() : userList; // 如果返回为null,则返回空列表
|
|
|
|
} |
|
|
|
|
|
|
|
/* public ResultBean<UpdateFlowFieldVo> handleProsess222(BusinessVariables bv, boolean b) { |
|
|
|
/* public ResultBean<UpdateFlowFieldVo> handleProsess111(BusinessVariables bv, boolean b) { |
|
|
|
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail(); |
|
|
|
UpdateFlowFieldVo vo = new UpdateFlowFieldVo(); |
|
|
|
// 或签任务候选人
|
|
|
@ -925,7 +1274,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> { |
|
|
|
if (sysUserVos == null || sysUserVos.size() < 1) { |
|
|
|
log.error("下一环节无用户填充管理员用户"); |
|
|
|
return rb; |
|
|
|
}else{ |
|
|
|
} else { |
|
|
|
StringBuilder nextNodeUserSids = new StringBuilder(); |
|
|
|
for (SysUserVo su : sysUserVos) { |
|
|
|
nextNodeUserSids.append(su.getSid()).append(","); |
|
|
|