diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java index e0628875e7..d2a8656db5 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java @@ -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 { public ResultBean businessStartProcessInstanceById(BusinessVariables bv) { ResultBean rb = ResultBean.fireFail(); - // 获取流程定义ID和发起人ID + //获取变量 String procDefId = bv.getModelId(); String userSid = bv.getUserSid(); - // 获取传入的变量 Map variables = bv.getFormVariables(); - Map variablesSeconds = bv.getFormVariables(); + //下一环节待办人 String nextNodeUserSids = bv.getNextNodeUserSids(); + //会签人员 + List approversList = Optional.ofNullable((List) variables.get("approvers")) + .orElseGet(ArrayList::new); List userSidForNextNode = new ArrayList<>(); + //如果指定的下一环节用户为空 if (StringUtils.isBlank(nextNodeUserSids)) { - userSidForNextNode = getNextNodeUser(bv).getData(); - variables.put("approvers", userSidForNextNode); + //根据角色查询下一环节待办人 + ResultBean> 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 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 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 handleProsess(BusinessVariables bv, boolean b) { + ResultBean rb = ResultBean.fireFail(); + UpdateFlowFieldVo vo = new UpdateFlowFieldVo(); + Map 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 approversList = Optional.ofNullable((List) formVariables.get("approvers")) + .orElseGet(ArrayList::new); + List 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 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> 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 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 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 nextUserList = getUserListFromFlowElement(nextFlowElement, orgPath); // 获取下一个环节的用户列表 + + // 获取下下一个环节的用户列表(如果存在) + List 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 businessStartProcessInstanceById222(BusinessVariables bv) { + ResultBean rb = ResultBean.fireFail(); + // 实例化 UpdateFlowFieldVo + UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo(); + String procDefId = bv.getModelId(); + String userSid = bv.getUserSid(); + String nextNodeUserSids = bv.getNextNodeUserSids(); + Map variables = bv.getFormVariables(); + Map variablesSeconds = bv.getFormVariables(); + + List userSidForNextNode = new ArrayList<>(); + List approversList = Optional.ofNullable((List) 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 { 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 { 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 { 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 { return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); } - public ResultBean handleProsess(BusinessVariables bv, boolean b) { + public ResultBean handleProsess222(BusinessVariables bv, boolean b) { ResultBean rb = ResultBean.fireFail(); UpdateFlowFieldVo vo = new UpdateFlowFieldVo(); //获取表单中的参数 @@ -249,6 +574,8 @@ public class Flow3Service extends MybatisBaseService { if (b && (StringUtils.isNotBlank(assignee) && assignee.indexOf(userSid) < 0)) { return rb.setMsg("当前用户不是环节的待办人,不能进行办理操作!"); } + List approversList = Optional.ofNullable((List) 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 { 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 { adminContains = true; } } + + if (!approversList.isEmpty()) { + formVariables.put("approvers", approversList); + } else { + ResultBean> 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 { 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 { nextUserSid = change(nextUserSid, bv.getInstanceId()); taskService.setAssignee(task2.getId(), nextUserSid);//将下一环节用户放入流程中 } - vo.setTaskId(task2.getId()); + List 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 { 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 { } - }else{//会签 + } else {//会签 Task task2 = tasks.get(0); - vo.setTaskId(task2.getId()); + List 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 { return rb.success().setData(vo); } - public ResultBean businessStartProcessInstanceById222(BusinessVariables bv) { + public ResultBean businessStartProcessInstanceById111(BusinessVariables bv) { ResultBean rb = ResultBean.fireFail(); // 或签任务候选人 /* List userIds = Arrays.asList( @@ -497,12 +848,12 @@ public class Flow3Service extends MybatisBaseService { 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 tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list(); @@ -514,7 +865,7 @@ public class Flow3Service extends MybatisBaseService { 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 { * 处理自动审批逻辑(当任务为转办时) */ private ResultBean handleAutomaticApproval(BusinessVariables bv, Task task, String id_, String task_def_key_, - Map variables, Map variablesSeconds, ProcessDefinition processDefinition) { + Map variables, ProcessDefinition processDefinition) { bv.setModelId(bv.getModelId()); bv.setInstanceId(task.getProcessInstanceId()); bv.setTaskId(id_); @@ -553,7 +904,6 @@ public class Flow3Service extends MybatisBaseService { 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 { * 处理自动审批逻辑(当申请人与下一环节审批人相同) */ private ResultBean handleSelfApproval(BusinessVariables bv, Task task, String id_, String task_def_key_, - Map variables, Map variablesSeconds, ProcessDefinition processDefinition) { + Map variables, ProcessDefinition processDefinition) { bv.setModelId(bv.getModelId()); bv.setInstanceId(task.getProcessInstanceId()); bv.setTaskId(id_); @@ -574,7 +924,6 @@ public class Flow3Service extends MybatisBaseService { 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 { return userList == null ? new ArrayList<>() : userList; // 如果返回为null,则返回空列表 } - /* public ResultBean handleProsess222(BusinessVariables bv, boolean b) { + /* public ResultBean handleProsess111(BusinessVariables bv, boolean b) { ResultBean rb = ResultBean.fireFail(); UpdateFlowFieldVo vo = new UpdateFlowFieldVo(); // 或签任务候选人 @@ -925,7 +1274,7 @@ public class Flow3Service extends MybatisBaseService { 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(","); diff --git a/anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysstaffinfo/UserCommonVo.java b/anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysstaffinfo/UserCommonVo.java new file mode 100644 index 0000000000..b4d28888c7 --- /dev/null +++ b/anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysstaffinfo/UserCommonVo.java @@ -0,0 +1,22 @@ +package com.yxt.anrui.portal.api.sysstaffinfo; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + +/** + * @description: + * @author: dimengzhe + * @date: 2025/3/3 + **/ +@Data +public class UserCommonVo { + + @JsonProperty("id") + private String dictKey; + private String dictValue; + + private Map extra = new HashMap<>(); +} diff --git a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoMapper.java b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoMapper.java index 599147c040..8280b5a52b 100644 --- a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoMapper.java +++ b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoMapper.java @@ -121,10 +121,15 @@ public interface SysStaffinfoMapper extends BaseMapper { IPage getUserList(IPage page, @Param(Constants.WRAPPER) QueryWrapper qw, @Param("orgSid") String orgSid); - List getGressionUserList(@Param("userOrgSid")String userOrgSid); + List getGressionUserList(@Param("userOrgSid") String userOrgSid); List selectStaffLists(); + List selectStaffListss(); List getStaffNameByRoleCode(@Param("orgSidPath") String orgSidPath, @Param("list") List list); + + List getCommonUser(); + + List getCommonUserByRoleSid(@Param("roleSid") String s); } diff --git a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoMapper.xml b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoMapper.xml index 99f2406064..ac1906801b 100644 --- a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoMapper.xml +++ b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoMapper.xml @@ -17,14 +17,14 @@ @@ -386,30 +386,53 @@ select su.sid userSid, si.name staffName from sys_user su - left join sys_staffinfo si on su.staffSid = si.sid where su.isAdmin is NULL + left join sys_staffinfo si on su.staffSid = si.sid + where su.isAdmin is NULL + + + + diff --git a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoRest.java b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoRest.java index 1bef81a8de..934a799aac 100644 --- a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoRest.java +++ b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoRest.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.yxt.anrui.portal.api.sysstaffinfo.*; import com.yxt.anrui.portal.api.sysstaffinfo.app.AppSysStaffQuery; import com.yxt.anrui.portal.api.sysstaffinfo.app.AppSysStaffVo; +import com.yxt.anrui.portal.api.sysstaffinfo.UserCommonVo; import com.yxt.anrui.portal.biz.sysuser.SysUserService; import com.yxt.common.base.config.component.FileUploadComponent; import com.yxt.common.base.utils.PagerUtil; @@ -11,11 +12,10 @@ import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.text.SimpleDateFormat; import java.util.Collections; @@ -237,5 +237,9 @@ public class SysStaffinfoRest implements SysStaffinfoFeign { return sysStaffinfoService.selectStaffListss(); } - + @ApiOperation("获取用户") + @GetMapping({"/getCommonUser", "/getCommonUser/{roleSids}"}) + ResultBean> getCommonUser(@PathVariable(value = "roleSids", required = false) String roleSids) { + return sysStaffinfoService.getCommonUser(roleSids); + } } diff --git a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoService.java b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoService.java index 381c8423a3..2fe98d832f 100644 --- a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoService.java +++ b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoService.java @@ -40,6 +40,8 @@ import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; import static java.util.stream.Collectors.toList; @@ -624,10 +626,10 @@ public class SysStaffinfoService extends MybatisBaseService 0) { //根据staffSid查询token String token = sysUserService.selectByStaffsid(sid).getToken(); - if(StringUtils.isNotBlank(token)){ + if (StringUtils.isNotBlank(token)) { //查询redis中是否包含该token String userName = redisUtil.get(token); - if(StringUtils.isNotBlank(userName)){ + if (StringUtils.isNotBlank(userName)) { //清空该token redisUtil.remove(token); } @@ -826,7 +828,29 @@ public class SysStaffinfoService extends MybatisBaseService roleCode = query.getRoleCode(); SysOrganization sysOrganization = sysOrganizationService.fetchBySid(useOrgSid); String orgSidPath = sysOrganization.getOrgSidPath(); - List list = baseMapper.getStaffNameByRoleCode(orgSidPath,roleCode); + List list = baseMapper.getStaffNameByRoleCode(orgSidPath, roleCode); return list; } + + public ResultBean> getCommonUser(String roleSids) { + ResultBean> rb = ResultBean.fireFail(); + List userCommonVoList = new ArrayList<>(); + if (StringUtils.isBlank(roleSids)) { + //查询集团所有的人员 + userCommonVoList = baseMapper.getCommonUser(); + } else { + List roleSidList = Arrays.asList(roleSids.split(",")); + roleSidList.removeAll(Collections.singleton(null)); + if (!roleSidList.isEmpty()) { + for (int i = 0; i < roleSidList.size(); i++) { + List userList = baseMapper.getCommonUserByRoleSid(roleSidList.get(i)); + userCommonVoList.addAll(userList); + } + } + } + List uniqueList = new ArrayList<>(userCommonVoList.stream() + .collect(Collectors.toMap(UserCommonVo::getDictKey, Function.identity(), (existing, replacement) -> existing)) + .values()); + return rb.success().setData(uniqueList); + } } diff --git a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysuser/SysUserRest.java b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysuser/SysUserRest.java index d69fa4a151..9217c51f88 100644 --- a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysuser/SysUserRest.java +++ b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysuser/SysUserRest.java @@ -24,11 +24,10 @@ import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.*; @@ -286,7 +285,7 @@ public class SysUserRest implements SysUserFeign { if (i == 0) { return ResultBean.fireFail().setMsg("修改失败"); } - if(StringUtils.isNotBlank(token)){ + if (StringUtils.isNotBlank(token)) { redisUtil.remove(token); } return ResultBean.fireSuccess().setMsg("修改成功"); diff --git a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysuser/SysUserService.java b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysuser/SysUserService.java index 51702debb4..f0e7e49226 100644 --- a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysuser/SysUserService.java +++ b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysuser/SysUserService.java @@ -14,6 +14,7 @@ import com.yxt.anrui.portal.api.sysmobilemenu.SysMobileMenu; import com.yxt.anrui.portal.api.sysorganization.SysOrganization; import com.yxt.anrui.portal.api.sysstaffinfo.SysStaffinfo; import com.yxt.anrui.portal.api.sysstaffinfo.SysStaffinfoVo; +import com.yxt.anrui.portal.api.sysstaffinfo.UserCommonVo; import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrg; import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgVo; import com.yxt.anrui.portal.api.sysstaffpost.SysStaffPostDetailsVo; diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/api/AdGroupSystemApplyRest.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/api/AdGroupSystemApplyRest.java index 380d775817..c5e60d418e 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/api/AdGroupSystemApplyRest.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/api/AdGroupSystemApplyRest.java @@ -28,6 +28,7 @@ import javax.validation.Valid; public class AdGroupSystemApplyRest { @Autowired AdGroupSystemApplyService adGroupSystemApplyService; + @ApiOperation("根据条件分页查询数据的列表") @PostMapping("/listPage") public ResultBean> listPage(@RequestBody PagerQuery pq) { @@ -41,6 +42,7 @@ public class AdGroupSystemApplyRest { public ResultBean saveOrUpdate(@RequestBody AdGroupSystemApplyDto dto) { return adGroupSystemApplyService.saveOrUpdateDto(dto); } + @ApiOperation("初始化(新增或修改)") @GetMapping({"/getInit", "/getInit/{sid}"}) public ResultBean getInit( @@ -64,7 +66,7 @@ public class AdGroupSystemApplyRest { @GetMapping("/details/{sid}") ResultBean details(@PathVariable("sid") String sid , @RequestParam(value = "application", required = false) String application) { - return adGroupSystemApplyService.details(sid,application); + return adGroupSystemApplyService.details(sid, application); } @ApiOperation("提交审批流程") @@ -84,6 +86,7 @@ public class AdGroupSystemApplyRest { public ResultBean complete(@Valid @RequestBody CompleteDto dto) { return adGroupSystemApplyService.complete(dto); } + @ApiOperation("获取流程操作标题") @GetMapping("/getFlowOperateTitle") @ResponseBody diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApply.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApply.java index a305b96815..579123be66 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApply.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApply.java @@ -14,6 +14,7 @@ import lombok.Data; @ApiModel(value = "集团制度会签审批", description = "集团制度会签审批") @TableName("ad_group_system_apply") public class AdGroupSystemApply extends BaseEntity { + private static final long serialVersionUID = 1378089487690059793L; @ApiModelProperty("拟发布制度标题") private String title; @ApiModelProperty("起草修订说明") @@ -22,4 +23,8 @@ public class AdGroupSystemApply extends BaseEntity { private String content; @ApiModelProperty("基础表单sid") private String formSid; + @ApiModelProperty("选择的会签人员") + private String approversSid; + + private String approversName; } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyDto.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyDto.java index 65cb3c878b..6525a29fcd 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyDto.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyDto.java @@ -1,5 +1,6 @@ package com.yxt.anrui.oa.biz.adgroupsystemapply; +import com.yxt.anrui.oa.biz.oaform.FormCommon; import com.yxt.anrui.oa.biz.oaform.OaFormDto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -15,6 +16,7 @@ import java.util.List; @Data @ApiModel(value = "集团制度会签审批 数据传输对象", description = "集团制度会签审批 数据传输对象") public class AdGroupSystemApplyDto extends OaFormDto { + private static final long serialVersionUID = -6434832123230021480L; private String sid; @ApiModelProperty("拟发布制度标题") private String title; @@ -28,4 +30,8 @@ public class AdGroupSystemApplyDto extends OaFormDto { private List files = new ArrayList<>(); @ApiModelProperty("文件") private List appes = new ArrayList<>(); + @ApiModelProperty("选择的会签人员") +// private List approvers = new ArrayList<>(); + + private List approvers = new ArrayList<>(); } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyService.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyService.java index 29cba1a7eb..5474d10a25 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyService.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyService.java @@ -10,6 +10,7 @@ import com.yxt.anrui.oa.feign.file.OaFileEnum; import com.yxt.anrui.oa.feign.flowable.flow.ProcDefEnum; import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationFeign; import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationVo; +import com.yxt.anrui.oa.feign.sysuser.SysUserVo; import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.utils.PagerUtil; import com.yxt.common.core.query.PagerQuery; @@ -19,17 +20,15 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** * @author wangpengfei * @date 2025/2/7 15:31 */ @Service -public class AdGroupSystemApplyService extends MybatisBaseService { +public class AdGroupSystemApplyService extends MybatisBaseService { @Autowired OaFormService oaFormService; @Autowired @@ -37,7 +36,6 @@ public class AdGroupSystemApplyService extends MybatisBaseService listPageVo(PagerQuery pq) { AdGroupSystemApplyQuery query = pq.getParams(); QueryWrapper qw = new QueryWrapper<>(); @@ -58,6 +56,12 @@ public class AdGroupSystemApplyService extends MybatisBaseService files = dto.getFiles(); List appes = dto.getAppes(); + List approvers = dto.getApprovers(); + if (approvers.isEmpty()) { + return rb.setMsg("请选择会签人员"); + } + List approversSid = approvers.stream().map(v -> v.getId()).collect(Collectors.toList()); + List approversName = approvers.stream().map(v -> v.getDictValue()).collect(Collectors.toList()); if (StringUtils.isBlank(sid)) { // 新建操作 AdGroupSystemApply entity = new AdGroupSystemApply(); @@ -71,23 +75,32 @@ public class AdGroupSystemApplyService extends MybatisBaseService getSaveInit(String userSid, String orgPath) { ResultBean rb = ResultBean.fireFail(); AdGroupSystemApplyVo AdGroupSystemApplyVo = new AdGroupSystemApplyVo(); AdGroupSystemApplyVo.setCreateBySid(userSid); AdGroupSystemApplyVo.setOrgSidPath(orgPath); + String roleSids = getRoleSids(); + AdGroupSystemApplyVo.setRoleSids(roleSids); return rb.success().setData(AdGroupSystemApplyVo); } @@ -98,7 +111,6 @@ public class AdGroupSystemApplyService extends MybatisBaseService files = oaAppendixService.selectByLinkSid(sid); AdGroupSystemApplyVo.setFiles(files); AdGroupSystemApplyVo.setSid(sid); + String approverSid = AdGroupSystemApply.getApproversSid(); + String approverName = AdGroupSystemApply.getApproversName(); + List approversSid = Arrays.asList(approverSid.split(",")); + List approversName = Arrays.asList(approverName.split(",")); + List approverss = new ArrayList<>(); + for (int i = 0; i < approversSid.size(); i++) { + FormCommon formCommon = FormCommon.of(approversSid.get(i), approversName.get(i)); + approverss.add(formCommon); + } + String roleSids = getRoleSids(); + AdGroupSystemApplyVo.setRoleSids(roleSids); return rb.success().setData(AdGroupSystemApplyVo); } + + public String getRoleSids() { + /** + * b3d51a89-2fe3-4d4e-a4e8-0ea436260dab 行政中心总经理 + * b2bcdfd6-ac51-408c-9c7a-7e9818d23155 财务中心总经理 + * e48f6ee4-c69e-401d-b386-ae111a1ecd68 财务中心核算经理 + * 33eef15f-96ea-494b-9daa-2b1c17cf1717 业务中心总经理 + * 7d82ea61-7033-497d-bf8b-4d5da464db64 业务中心服务经理 + * 537bea8f-75e8-430c-9a5f-3140bda41f39 风控中心总经理 + * 6bccde2a-6be7-4ebc-a9ba-380ea9b161e9 风控中心副总经理 + * da5b21ab-10c1-49be-b168-01e96c7f51b3 财务中心分管 + */ + String roleSids = "b3d51a89-2fe3-4d4e-a4e8-0ea436260dab," + + "b2bcdfd6-ac51-408c-9c7a-7e9818d23155," + + "e48f6ee4-c69e-401d-b386-ae111a1ecd68," + + "33eef15f-96ea-494b-9daa-2b1c17cf1717," + + "7d82ea61-7033-497d-bf8b-4d5da464db64," + + "537bea8f-75e8-430c-9a5f-3140bda41f39," + + "6bccde2a-6be7-4ebc-a9ba-380ea9b161e9," + + "da5b21ab-10c1-49be-b168-01e96c7f51b3"; + return roleSids; + } + // 保存文件 private void saveFiles(String sid, List files, String attachType, String fileType) { files.removeAll(Collections.singleton(null)); @@ -131,19 +174,31 @@ public class AdGroupSystemApplyService extends MybatisBaseService details(String sid, String application) { ResultBean rb = ResultBean.fireFail(); + AdGroupSystemApply adGroupSystemApply = fetchBySid(sid); AdGroupSystemApplyVo AdGroupSystemApplyVo = baseMapper.details(sid); - if (AdGroupSystemApplyVo == null) { + if (adGroupSystemApply == null) { return rb.setMsg("该申请不存在"); } List files = oaAppendixService.selectByLinkSid(AdGroupSystemApplyVo.getSid(), "图片"); - List appes= oaAppendixService.selectByLinkSid(AdGroupSystemApplyVo.getSid(), "文件"); + List appes = oaAppendixService.selectByLinkSid(AdGroupSystemApplyVo.getSid(), "文件"); AdGroupSystemApplyVo.setFiles(files); AdGroupSystemApplyVo.setAppes(appes); //基础字段赋值 BeanUtil.copyProperties(oaFormService.getDetails(sid), AdGroupSystemApplyVo); + String approverSid = adGroupSystemApply.getApproversSid(); + String approverName = adGroupSystemApply.getApproversName(); + List approversSid = Arrays.asList(approverSid.split(",")); + List approversName = Arrays.asList(approverName.split(",")); + List approverss = new ArrayList<>(); + for (int i = 0; i < approversSid.size(); i++) { + FormCommon formCommon = FormCommon.of(approversSid.get(i), approversName.get(i)); + approverss.add(formCommon); + } + AdGroupSystemApplyVo.setApprovers(approverss); return rb.success().setData(AdGroupSystemApplyVo); } + /** * 提交 * @@ -157,14 +212,10 @@ public class AdGroupSystemApplyService extends MybatisBaseService formVariables = new HashMap<>(); - Map appMap = new HashMap<>(); -// appMap.put("sid", businessSid); formVariables = getMap(formVariables, businessSid); submitDto.setFormVariables(formVariables); submitDto.setProcDefId(ProcDefEnum.GROUPSYSTEMAPPLY.getProDefId()); @@ -172,6 +223,7 @@ public class AdGroupSystemApplyService extends MybatisBaseService getMap(Map formVariables, String sid) { Map appMap = new HashMap<>(); + AdGroupSystemApply adGroupSystemApply = fetchBySid(sid); appMap.put("sid", sid); /*appMap.put("editUrl", "approval/#/pages/EditOnboradingApplyActivity?sid=" + sid); appMap.put("detailUrl", "approval/#/pages/DetailOnboradingApplyActivity?sid=" + sid); @@ -252,10 +306,16 @@ public class AdGroupSystemApplyService extends MybatisBaseService approversList = new ArrayList<>(); + approversList.add("08d6f4a7-31f7-498f-a639-8c9abea4df35"); + approversList.add("30b33cd2-610a-4917-ba46-80b09f52c4b9"); + approversList.add("d76fe91e-8080-4344-89e7-3ea22dacfb16");*/ + String approver = adGroupSystemApply.getApproversSid(); + List approvers = Arrays.asList(approver.split(",")); + formVariables.put("approvers", approvers); return formVariables; } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyVo.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyVo.java index 0e1bed38d0..450eb99482 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyVo.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyVo.java @@ -34,4 +34,9 @@ public class AdGroupSystemApplyVo extends OaFormCommonVo { private String taskId; @ApiModelProperty("流程实例id") private String procInsId; + + @ApiModelProperty("选择的会签人员") + private List approvers = new ArrayList<>(); + @ApiModelProperty("会签角色") + private String roleSids; } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java index ce7d1b8a0d..153d324e94 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java @@ -14,6 +14,7 @@ import com.yxt.anrui.oa.feign.flowable.flow.FlowableFeign; import com.yxt.anrui.oa.feign.flowable.flow.UpdateFlowFieldVo; import com.yxt.anrui.oa.feign.flowable.flow2.FlowDelegateQuery; import com.yxt.anrui.oa.feign.flowable.flow2.FlowFeign; +import com.yxt.anrui.oa.feign.flowable.flow3.Flow3Feign; import com.yxt.anrui.oa.feign.flowable.flowtask.FlowTaskFeign; import com.yxt.anrui.oa.feign.flowable.flowtask.FlowTaskVo; import com.yxt.anrui.oa.feign.flowable.flowtask.LatestTaskVo; @@ -73,6 +74,9 @@ public class OaFormService extends MybatisBaseService { @Autowired private FileUploadComponent fileUploadComponent; + @Autowired + private Flow3Feign flow3Feign; + /** * 保存oaform表单 * @@ -211,8 +215,8 @@ public class OaFormService extends MybatisBaseService { } BeanUtil.copyProperties(businessVariablesResultBean.getData(), bv, "taskDefKey", "taskId"); bv.setInstanceId(oaForm.getProcInstId()); - if (bv.getTaskId().equals(oaForm.getTaskId())) { - ResultBean resultBean = flowFeign.handleProsess(bv); + if (oaForm.getTaskId().contains(bv.getTaskId())) { + ResultBean resultBean = flow3Feign.handleProsess(bv); if (!resultBean.getSuccess()) { return rb.setMsg(resultBean.getMsg()); } @@ -320,7 +324,7 @@ public class OaFormService extends MybatisBaseService { } String businessTaskId = oaForm.getTaskId(); if (StringUtils.isNotBlank(businessTaskId)) { - if (businessTaskId.equals(dto.getTaskId())) { + if (businessTaskId.contains(dto.getTaskId())) { if (StringUtils.isBlank(dto.getComment())) { return rb.setMsg("请填写意见"); } @@ -395,7 +399,7 @@ public class OaFormService extends MybatisBaseService { OaForm oaForm = fetchBySid(dto.getBusinessSid()); String businessTaskId = oaForm.getTaskId(); if (StringUtils.isNotBlank(businessTaskId)) { - if (businessTaskId.equals(dto.getTaskId())) { + if (businessTaskId.contains(dto.getTaskId())) { FlowTaskVo flowTaskVo = new FlowTaskVo(); BeanUtil.copyProperties(dto, flowTaskVo); flowTaskVo.setInstanceId(dto.getProcInsId()); @@ -445,7 +449,7 @@ public class OaFormService extends MybatisBaseService { updateFlow(oaFormFlowDto); return rb.success().setData(resultBean.getData()); } else { - if (businessTaskId.equals(dto.getTaskId())) { + if (businessTaskId.contains(dto.getTaskId())) { FlowTaskVo flowTaskVo = new FlowTaskVo(); BeanUtil.copyProperties(dto, flowTaskVo); flowTaskVo.setInstanceId(dto.getProcInsId()); @@ -520,7 +524,7 @@ public class OaFormService extends MybatisBaseService { int r = submitBusinessData(dto, oaForm.getTaskId()); if (r == 1) { //启动流程 - ResultBean voResultBean = flowFeign.startProcess(bv); + ResultBean voResultBean = flow3Feign.startProcess(bv); if (voResultBean.getSuccess()) { UpdateFlowFieldVo ufVo = voResultBean.getData(); OaFormFlowDto oaFormFlowDto = new OaFormFlowDto(); diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow/ProcDefEnum.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow/ProcDefEnum.java index ac7b6e7193..598f40b645 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow/ProcDefEnum.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow/ProcDefEnum.java @@ -9,8 +9,8 @@ public enum ProcDefEnum { /***************************正式流程id***********************************/ OALEAVEAPPLY("请假申请", "process_su0yph7n:1:15957504"), OAMENDAPPLY("补卡申请", "process_9suucr96:1:16072504"), - HIHIREAPPLY("招聘需求", "process_zy0m4jrp:1:16802504"), - GROUPSYSTEMAPPLY("集团制度", "process_6lnebpbi:1:16905004"), + HIHIREAPPLY("招聘需求", "process_zy0m4jrp:2:18045004"), + GROUPSYSTEMAPPLY("集团制度", "process_6nzob224:2:18045008"), BGYPLYAPPLY("办公用品领用", ""), GDZCCG_GS_APPLY("公司固定资产采购申请", ""), GDZCCG_ZX_APPLY("中心固定资产采购申请", ""), diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow3/Flow3Feign.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow3/Flow3Feign.java index 2ce0131bea..161b622142 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow3/Flow3Feign.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow3/Flow3Feign.java @@ -17,8 +17,13 @@ import org.springframework.web.bind.annotation.ResponseBody; public interface Flow3Feign { @ApiOperation(value = "启动流程") - @PostMapping(value = "/startProcess2") + @PostMapping(value = "/startProcess") @ResponseBody - ResultBean startProcess2(@RequestBody BusinessVariables dto); + ResultBean startProcess(@RequestBody BusinessVariables dto); + + @PostMapping("/handleProsess") + @ResponseBody + @ApiOperation("办理") + public ResultBean handleProsess(@RequestBody BusinessVariables dto); } \ No newline at end of file