activiti6自选节点驳回

activiti6自选节点驳回

说明

审批含有多级,下一级驳回时,可以自由选择驳回到谁

代码

@ResponseBody
    @PostMapping("/bohui")
    @Transactional
    public String bohui(String sid, String nodename, String bohuitaskid, String taskid) throws Exception {
        Task task = taskService.createTaskQuery().taskId(taskid).singleResult();
        if (task == null) {
            return "500";
        } else {
            List<HistoricTaskInstance> htlist = historyService.createHistoricTaskInstanceQuery().processInstanceId(task.getProcessInstanceId()).list();
            String myTaskId = null;
            HistoricTaskInstance myTask = null;
            //根据nodename可以查询出多个用户,此处怎么处理
            //根据nodename查出groupid
            ActIdGroup actidgroup = new ActIdGroup();
            actidgroup.setName(nodename);
            List<ActIdGroup> actidgrouplist = actIdGroupService.selectActIdGroupList(actidgroup);

            ActIdMembership actidmembership = new ActIdMembership();
            actidmembership.setGroupId(actidgrouplist.get(0).getId());
            List<ActIdMembership> actidmembershiplist = actIdMembershipService.selectActIdMembershipListbygroupid(actidmembership);

            if (actidmembershiplist.size() > 0) {
                String uname = null;
                for (int i = 0; i < actidmembershiplist.size(); i++) {
                    uname = actidmembershiplist.get(i).getUserId();
                    for (HistoricTaskInstance hti : htlist) {
                        if ((hti.getAssignee() != null) && hti.getAssignee().equals(uname)) {
                            myTaskId = hti.getId();
                            myTask = hti;
                            break;
                        }
                    }
                }
                if (myTask == null) {
                    throw new ServiceException("该任务非当前用户提交,无法撤回");
                }

                String processDefinitionId = myTask.getProcessDefinitionId();
                BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);

                String myActivityId = null;
                List<HistoricActivityInstance> haiList =
                        historyService.createHistoricActivityInstanceQuery().executionId(myTask.getExecutionId()).finished().list();

                for (HistoricActivityInstance hai : haiList) {
                    if (myTaskId.equals(hai.getTaskId())) {
                        myActivityId = hai.getActivityId();
                        break;
                    }
                }

                FlowNode myFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(myActivityId);
                Execution execution = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult();
                String activityId = execution.getActivityId();
                System.out.println(activityId);
                FlowNode flowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(activityId);
                //记录原活动方向
                List<SequenceFlow> oriSequenceFlows = new ArrayList<SequenceFlow>();
                oriSequenceFlows.addAll(flowNode.getOutgoingFlows());
                //清理活动方向
                flowNode.getOutgoingFlows().clear();
                //建立新方向
                List<SequenceFlow> newSequenceFlowList = new ArrayList<SequenceFlow>();
                SequenceFlow newSequenceFlow = new SequenceFlow();
                newSequenceFlow.setId("newSequenceFlowId");
                newSequenceFlow.setSourceFlowElement(flowNode);
                newSequenceFlow.setTargetFlowElement(myFlowNode);
                newSequenceFlowList.add(newSequenceFlow);
                flowNode.setOutgoingFlows(newSequenceFlowList);
                Authentication.setAuthenticatedUserId(uname);
                taskService.addComment(task.getId(), task.getProcessInstanceId(), "回退");
                //完成任务
                List<Task> taskList = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).active().list();
                taskService.complete(task.getId());
                //撤销的节点任务
                List<Task> taskList1 = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).active().list();
                //-----------------------------------------------------------------------
                //怎么处理biz里面的数据,驳回者数据删除,删除的同时 ,添加驳回记录,完成数据恢复
                //恢复原方向
                flowNode.setOutgoingFlows(oriSequenceFlows);
                String aaa = taskList.get(0).getId();
                List<suppliesinoutTodoItem> suppliesinouttodoitem2 = bizTodoItemService.selectBizTodoItemBySId1(sid);
                suppliesinoutTodoItem sti = suppliesinouttodoitem2.get(0);
                sti.setIsView("1");
                sti.setIsHandle("1");
                sti.setHandleUserId(sti.getTodoUserId());
                sti.setHandleUserName(sti.getTodoUserName());
                bizTodoItemService.updateBizTodoItem2(sti);

                List<suppliesinoutTodoItem> suppliesinouttodoitem1 = bizTodoItemService.selectBizTodoItemBySId1(sid);
                suppliesinoutTodoItem sm = new suppliesinoutTodoItem();
                sm.setItemName(suppliesinouttodoitem1.get(0).getItemName());
                sm.setItemContent(suppliesinouttodoitem1.get(0).getItemContent());
                sm.setModule(suppliesinouttodoitem1.get(0).getModule());
                sm.setTaskId(taskList1.get(0).getId());
                sm.setTaskName(taskList1.get(0).getTaskDefinitionKey());
                sm.setNodeName(taskList1.get(0).getName());
                sm.setIsView("0");
                sm.setIsHandle("0");
                sm.setTodoUserId(uname);
                sm.setTodoUserName(userService.selectUserByLoginName(uname).getUserName());
                sm.setHandleUserId(null);
                sm.setHandleUserName(null);
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                sm.setTodoTime(sdf.parse(sdf.format(new Date())));
                sm.setHandleTime(null);
                sm.setSid(sid);
                sm.setSqr(suppliesinouttodoitem1.get(0).getSqr());
                sm.setTotalMinute(1);
                sm.setDense(suppliesinouttodoitem1.get(0).getDense());
                sm.setSqrname(suppliesinouttodoitem1.get(0).getSqrname());
                bizTodoItemService.insertBizTodoItem(sm);
            }
            return "200";
        }
    }

效果

在这里插入图片描述
大佬勿喷,欢迎提意见建议评论!!!!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值