赞
踩
更多ruoyi-nbcio功能请看演示系统
gitee源代码地址
前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio
演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/
更多nbcio-boot功能请看演示系统
gitee源代码地址
后端代码: https://gitee.com/nbacheng/nbcio-boot
前端代码:https://gitee.com/nbacheng/nbcio-vue.git
在线演示(包括H5) : http://218.75.87.38:9888
1、后端,主要是提交流程做如下调整
- /**
- * 启动流程实例
- */
- private R startProcess(ProcessDefinition procDef, Map<String, Object> variables) {
- if (ObjectUtil.isNotNull(procDef) && procDef.isSuspended()) {
- throw new ServiceException("流程已被挂起,请先激活流程");
- }
- // 设置流程发起人Id到流程中
- String userIdStr = TaskUtils.getUserId();
- identityService.setAuthenticatedUserId(userIdStr);
- variables.put(BpmnXMLConstants.ATTRIBUTE_EVENT_START_INITIATOR, userIdStr);
- // 设置流程状态为进行中
- variables.put(ProcessConstants.PROCESS_STATUS_KEY, ProcessStatus.RUNNING.getStatus());
- // 发起流程实例
- ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDef.getId(), variables);
- // 第一个用户任务为发起人,则自动完成任务
- wfTaskService.startFirstTask(processInstance, variables);
- // 获取 bpmn 模型
- BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
- return this.getCurrentUsers(bpmnModel, processInstance.getProcessInstanceId(), variables);
- }
-
- /**
- * 获取当前任务审批人
- * @param bpmnModel bpmn模型
- * @param processInsId 流程实例id
- * @param userIds 用户ids
- */
- private R getCurrentUsers(BpmnModel bpmnModel, String processInsId, Map<String, Object> variables) {
- // 获取所有节点信息
- List<Task> list = taskService.createTaskQuery()
- .processInstanceId(processInsId)
- .list();
- if (list.size() == 0) {
- return R.ok("流程启动失败成功");
- }
- UserTask userTask = ModelUtils.getUserTaskByKey(bpmnModel,list.get(0).getTaskDefinitionKey());
- if(StringUtils.equalsAnyIgnoreCase(userTask.getAssignee(), "${getNextApprovalHandler.getApproval(execution)}")) {//对接收人做特殊处理
- //返回前端选择人员后跳过发起人流程
- WfTaskBo taskBo = new WfTaskBo();
- taskBo.setTaskId(list.get(0).getId());
- taskBo.setProcInsId(processInsId);
- taskBo.setNextUserIds("${approval}");
- taskBo.setVariables(variables);
- return R.ok(taskBo);
- }
-
-
- return R.ok("流程启动成功");
- }
2、与完成流程做如下调整
- /**
- * 完成任务
- *
- * @param taskBo 请求实体参数
- */
- @Transactional(rollbackFor = Exception.class)
- @Override
- public void complete(WfTaskBo taskBo) {
- Task task = taskService.createTaskQuery().taskId(taskBo.getTaskId()).singleResult();
- if (Objects.isNull(task)) {
- throw new ServiceException("任务不存在");
- }
- // 获取 bpmn 模型
- BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
- // 处理下一级接收人
- if(ObjectUtil.isNotEmpty(taskBo.getNextApproval())) {
- this.assignNextApproval(bpmnModel, taskBo.getProcInsId(), taskBo.getNextApproval());
- return;
- }
- if (DelegationState.PENDING.equals(task.getDelegationState())) {
- taskService.addComment(taskBo.getTaskId(), taskBo.getProcInsId(), FlowComment.DELEGATE.getType(), taskBo.getComment());
- taskService.resolveTask(taskBo.getTaskId());
- } else {
- taskService.addComment(taskBo.getTaskId(), taskBo.getProcInsId(), FlowComment.NORMAL.getType(), taskBo.getComment());
- taskService.setAssignee(taskBo.getTaskId(), TaskUtils.getUserId());
- if (ObjectUtil.isNotEmpty(taskBo.getVariables())) {
- // 获取模型信息
- String localScopeValue = ModelUtils.getUserTaskAttributeValue(bpmnModel, task.getTaskDefinitionKey(), ProcessConstants.PROCESS_FORM_LOCAL_SCOPE);
- boolean localScope = Convert.toBool(localScopeValue, false);
- taskService.complete(taskBo.getTaskId(), taskBo.getVariables(), localScope);
- } else {
- taskService.complete(taskBo.getTaskId());
- }
- }
- // 设置任务节点名称
- taskBo.setTaskName(task.getName());
- // 处理下一级审批人
- if (StringUtils.isNotBlank(taskBo.getNextUserIds())) {
- this.assignNextUsers(bpmnModel, taskBo.getProcInsId(), taskBo.getNextUserIds());
- }
- // 处理抄送用户
- if (!copyService.makeCopy(taskBo)) {
- throw new RuntimeException("抄送任务失败");
- }
- }
3、效果图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。