首页 > 其他分享 >Flowable流程中自定义业务表单并行审批的bug修复

Flowable流程中自定义业务表单并行审批的bug修复

时间:2023-02-27 14:01:15浏览次数:65  
标签:oldUser 自定义 Flowable getId collect sysUser taskService nexttask bug


    根据网友反馈​​开源项目​​​​宁波阿成 (nbacheng) - Gitee.com​

    有自定义业务表单并行审批的bug需要修复,主要是后端自定义业务审批逻辑上的问题

  自定义表的完成任务completeForDataID里的问题

主要是下面代码部分

if (nextFlowNode!=null){
//**有下一个节点
UserTask nextUserTask = nextFlowNode.getUserTask();
//能够处理下个节点的候选人
List<SysUser> nextFlowNodeUserList = nextFlowNode.getUserList();
List<String> collect_username = nextFlowNodeUserList.stream().map(SysUser::getUsername).collect(Collectors.toList());
//collect_username转换成realname
List<String> newusername = new ArrayList<String>();
// 流程发起人
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(taskVo.getInstanceId()).singleResult();
String startUserId = processInstance.getStartUserId();
if(taskVo.getValues() !=null && taskVo.getValues().containsKey("approval")) {//前端传回的变量值
SysUser sysUser = iFlowThirdService.getUserByUsername(taskVo.getValues().get("approval").toString());
newusername.add(sysUser.getRealname());
}
else {
for (String oldUser : collect_username) {
if(StrUtil.equals(oldUser,"${INITIATOR}")) {
SysUser sysUser = iFlowThirdService.getUserByUsername(startUserId);
newusername.add(sysUser.getRealname());
}
else {
SysUser sysUser = iFlowThirdService.getUserByUsername(oldUser);
newusername.add(sysUser.getRealname());
}
}
}
//下一个实例节点
List<Task> listtask = taskService.createTaskQuery().processInstanceId(business.getProcessInstanceId()).active().list();
Task nexttask = null;
if(listtask.size()==1) {
nexttask = taskService.createTaskQuery().processInstanceId(business.getProcessInstanceId()).active().singleResult();
}
else {
nexttask = taskService.createTaskQuery().processInstanceId(business.getProcessInstanceId()).active().list().get(0);
}

// 下个节点候选人,目前没有实现这功能,返回null
List<String> beforeParamsCandidateUsernames = Lists.newArrayList();
if(nexttask!=null){
beforeParamsCandidateUsernames = flowCallBackService.flowCandidateUsernamesOfTask(nexttask.getTaskDefinitionKey(),taskVo.getValues());
}
business.setActStatus(ActStatus.doing)
.setTaskId(nexttask.getId())
.setTaskNameId(nextUserTask.getId())
.setTaskName(nextUserTask.getName())
.setPriority(nextUserTask.getPriority())
.setDoneUsers(doneUserList.toJSONString())
.setTodoUsers(JSON.toJSONString(newusername))
;
// 删除后重写
for (String oldUser : collect_username) {
taskService.deleteCandidateUser(nexttask.getId(),oldUser);
}
if (CollUtil.isNotEmpty(beforeParamsCandidateUsernames)){
// 业务层有指定候选人,覆盖
for (String newUser : beforeParamsCandidateUsernames) {
taskService.addCandidateUser(nexttask.getId(),newUser);
}
business.setTodoUsers(JSON.toJSONString(beforeParamsCandidateUsernames));
} else {
for (String oldUser : collect_username) {
if(StrUtil.equals(oldUser,"${INITIATOR}")) {
taskService.addCandidateUser(nexttask.getId(),startUserId);
}
else {
taskService.addCandidateUser(nexttask.getId(),oldUser);
}

}
}

1、其中多个并行任务的时候对nexttask的任务进行处理,避免报错

2、增加对发起人设置的支持,原先在自定义业务这块漏了这个

标签:oldUser,自定义,Flowable,getId,collect,sysUser,taskService,nexttask,bug
From: https://blog.51cto.com/u_15070324/6088409

相关文章

  • 自定义Tab选项卡
    importandroid.app.TabActivity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.widget.*;importandroid.widget.TabHost.OnTabChangeListener;......
  • 通过aqs 自定义lock
    aqs(AbstractQueuedSynchronizer),通过继承此类可以实现自定义aqs,以下为例子:packagecom.work.testwork.mylock;importjava.util.concurrent.TimeUnit;importjava.uti......
  • Mysql 自定义目录安装
    这里教大家安装Mysql的时候自定义安装目录1、Mysql版本我这里选择的是8.0,下边有下载链接,其他的版本也行,操作都是一样的 Mysql8.0下载链接:MySQL::DownloadMySQLInsta......
  • 关于bug的分类和定金,终于有人讲明白了
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试 01bug......
  • 自定义组件
                                                         ......
  • 功能测试bug预防体系
    Web常见产品问题及预防 测试人员在每次版本迭代中,会对项目的整体质量有一个把控,对于项目常见的问题,开发经常犯的错误都会有所了解,为了避免或者减少这样的错误或不规范的......
  • 数组与自定义函数
    一维数组    ·                  字符可以做下标吗?数组的下标必须是整数,那么字符可以做下标吗?比如:int a[255];a[......
  • WinDbg : Parsing Arrays In the Debugger
    WinDbg:ParsingArraysIntheDebugger  WinDbg:ParsingArraysInTheDebuggerManyatimesdatastructslikearraysneedparsinginwindbg.Thesedon'......
  • 11_10_第六阶段:大前端进阶||07-Vue详解||P12:自定义事件内容分发(this.$emit())【Vue核心
    Vue:计算属性,内容分发,【自定义事件】1.自定义事件注:涉及到的JavaScript语法2.代码流程在vue的实例中,增加了methods对象并定义了一个名为removeItems的方法varvm=newVu......
  • 浅拷贝导致的bug
    目录深拷贝与浅拷贝区别hutoolBeanUtil.copyProperties浅拷贝问题重现实现深拷贝的一些工具深拷贝与浅拷贝区别在Java中,除了基本数据类型(元类型)之外,还存在类的实例......