说明
审批含有多级,下一级驳回时,可以自由选择驳回到谁
代码
@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";
}
}
效果
大佬勿喷,欢迎提意见建议评论!!!!