如果一个人员离职了,你要变更这个人员所在的流程为其他的审批人,如果一个个的去检察,你是不是很累,这就是我们如果批量修改的原因。
场景很简单,就是人力告诉你有人离职了,需要变更为其他的人
做成界面一键式更新审批人
目标:通过界面来修改审批人
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);
}
});
}