Flowable批量修改审批人

如果一个人员离职了,你要变更这个人员所在的流程为其他的审批人,如果一个个的去检察,你是不是很累,这就是我们如果批量修改的原因。

场景很简单,就是人力告诉你有人离职了,需要变更为其他的人

做成界面一键式更新审批人

  • 目标:通过界面来修改审批人
  • 第一 、获取所有的最新的流程定义
  • 第二、修改每一个流程定义的审批人信息

目标:通过界面来修改审批人

1. 界面怎么做在这里就不用讲了
  • 第一 、获取所有的最新的流程定义

public ReturnVo<String> updateTaskAssignee(List<String> keys, String oldAssignee, String newAssignee) {
        ReturnVo<String> returnVo = new ReturnVo<>(ReturnCode.SUCCESS, "OK");
        //1. 查询最新的流程定义列表
        StringBuffer sql = new StringBuffer("SELECT a.* FROM act_re_procdef a INNER JOIN (SELECT key_,MAX(version_) max_version FROM act_re_procdef GROUP BY key_ ) b " +
                " ON a.key_ = b.key_ AND a.version_ = b.max_version ");
        StringBuffer inkeys = new StringBuffer("");
        if (CollectionUtils.isNotEmpty(keys)) {
            StringBuffer finalInkeys = inkeys;
            keys.forEach(key -> finalInkeys.append("'").append(key).append("'").append(","));
            if (inkeys.length() > 0) {
                inkeys = inkeys.deleteCharAt(inkeys.length() - 1);
                sql.append(" where a.key_ in (").append(inkeys.toString()).append(")");
                List<ProcessDefinition> processDefinitions = repositoryService.createNativeProcessDefinitionQuery().sql(sql.toString()).list();
                if (CollectionUtils.isNotEmpty(processDefinitions)) {
                    processDefinitions.forEach(processDefinition -> this.updateTaskAssignee(processDefinition, oldAssignee, newAssignee));
                }
            }
        }
        return returnVo;
    }
  • 第二、修改每一个流程定义的审批人信息

public ReturnVo<String> updateTaskAssignee(ProcessDefinition processDefinition, String oldAssignee, String newAssignee) {
        ReturnVo<String> returnVo = new ReturnVo<>(ReturnCode.SUCCESS, "OK");
        BpmnModel model = repositoryService.getBpmnModel(processDefinition.getId());
        List<UserTask> userTasks = bpmnModelService.findUserTasksByBpmnModel(model);
        userTasks.forEach(userTask -> {
            if (userTask.getAssignee() != null && userTask.getAssignee().equals(oldAssignee) && !oldAssignee.equals(newAssignee)) {
                ObjectNode processInfo = dynamicBpmnService.changeUserTaskAssignee(userTask.getId(), newAssignee);
                dynamicBpmnService.saveProcessDefinitionInfo(processDefinition.getId(), processInfo);
            }
        });
 }

你可能感兴趣的:(Flowable高级,数据库,java,flowable)