当前位置: 首页 > news >正文

基于若依的ruoyi-nbcio流程管理系统修正自定义业务表单的回写bug

更多ruoyi-nbcio功能请看演示系统

gitee源代码地址

前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio

演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/

更多nbcio-boot功能请看演示系统 

gitee源代码地址

后端代码: https://gitee.com/nbacheng/nbcio-boot

前端代码:https://gitee.com/nbacheng/nbcio-vue.git

在线演示(包括H5) : http://218.75.87.38:9888

1、后端,在获取tod流程的时候加上dataId

// 流程发起人信息HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();String userId = historicProcessInstance.getStartUserId();String nickName = sysUserService.selectUserByUserName(userId).getNickName();flowTask.setStartUserId(userId);flowTask.setStartUserName(nickName);flowTask.setDataId(historicProcessInstance.getBusinessKey());

2、前端处理的时候加上dataId

// 跳转到处理页面handleProcess(row) {this.$router.push({path: '/workflow/process/detail/' + row.procInsId,query: {taskId: row.taskId,dataId: row.dataId,processed: true}})},

已经detail.vue里增加获取这个dataId

initData() {this.taskForm.procInsId = this.$route.params && this.$route.params.procInsId;this.taskForm.taskId  = this.$route.query && this.$route.query.taskId;this.taskForm.dataId  = this.$route.query && this.$route.query.dataId;this.processed = this.$route.query && eval(this.$route.query.processed || false);

3、后端对dataId的自自定义业务做回写处理

//处理自定义业务表单回写状态,节点与处理人信息if (StringUtils.isNotBlank(taskBo.getDataId())) {//业务数据idString dataId = taskBo.getDataId();//如果保存数据前未调用必调的FlowCommonService.initActBusiness方法,就会有问题WfMyBusiness business = wfMyBusinessService.getByDataId(dataId);//spring容器类名String serviceImplName = business.getServiceImplName();WfCallBackServiceI flowCallBackService = (WfCallBackServiceI) SpringContextUtils.getBean(serviceImplName);FlowNextDto flowNextDto = this.getNextFlowNode(taskBo.getTaskId(), taskBo.getVariables());if(flowNextDto != null) {//**有下一个节点UserTask nextUserTask = flowNextDto.getUserTask();//能够处理下个节点的候选人List<SysUser> nextFlowNodeUserList = flowNextDto.getUserList();List<String> newusername = new ArrayList<String>();if(nextFlowNodeUserList != null &&  nextFlowNodeUserList.get(0) != null ) {List<String> collect_username = nextFlowNodeUserList.stream().filter(Objects::nonNull).filter(item->item.getUserName()!=null).map(SysUser::getUserName).collect(Collectors.toList());//collect_username转换成realname// 流程发起人ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(taskBo.getProcInsId()).singleResult();String startUserId = processInstance.getStartUserId();if(taskBo.getVariables() !=null && taskBo.getVariables().containsKey("approval")) {//前端传回的变量值SysUser sysUser = commonService.getSysUserByUserName(taskBo.getVariables().get("approval").toString());newusername.add(sysUser.getNickName());}else {for (String oldUser : collect_username) {if(StrUtil.equalsAnyIgnoreCase(oldUser,"${INITIATOR}")) {SysUser sysUser = commonService.getSysUserByUserName(startUserId);newusername.add(sysUser.getNickName());}else {SysUser sysUser = commonService.getSysUserByUserName(oldUser);newusername.add(sysUser.getNickName());}}}}//下一个实例节点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);}if(nextFlowNodeUserList !=null) {business.setActStatus(ActStatus.doing);business.setTaskId(nexttask.getId());business.setTaskNameId(nextUserTask.getId());business.setTaskName(nextUserTask.getName());business.setPriority(nextUserTask.getPriority());business.setTodoUsers(JSON.toJSONString(newusername));}else {business.setActStatus(ActStatus.doing);business.setTaskId(nexttask.getId());business.setTaskNameId("");business.setTaskName("");business.setPriority("");business.setTodoUsers("");}if(ObjectUtil.isNotEmpty(taskBo.getNextApproval())) {business.setActStatus(ActStatus.doing);business.setTaskId(nexttask.getId());business.setTaskNameId(nextUserTask.getId());business.setTaskName(nextUserTask.getName());business.setPriority(nextUserTask.getPriority());business.setTodoUsers(taskBo.getNextApproval());}}else {//**没有下一个节点,流程已经结束了business.setActStatus(ActStatus.pass);business.setTaskId("");business.setTaskNameId("");business.setTaskName("");business.setTodoUsers("");}// 流程处理完后,进行回调业务层wfMyBusinessService.updateById(business);if (flowCallBackService!=null)flowCallBackService.afterFlowHandle(business);}

5、效果图

http://www.lryc.cn/news/401493.html

相关文章:

  • GD32 MCU上电跌落导致启动异常如何解决
  • 安防视频监控/视频汇聚EasyCVR平台浏览器http可以播放,https不能播放,如何解决?
  • rust + python+ libtorch
  • ts检验-变量的类型不会包含 undefined的几种处理方法
  • springboot 集成minio,启动报错
  • bignumber.js库,解决前端小数精度问题
  • Java爬虫安全策略:防止TikTok音频抓取过程中的请求被拦截
  • 通过手机控制家用电器的一个程序的设计(一)
  • 批量提取PDF指定区域内容到 Excel , 根据PDF文件第一行文字来自动重命名v1.3-附思路和代码实现
  • 【持续集成_05课_Linux部署SonarQube及结合开发项目部署】
  • 人像视频预处理【时间裁剪+画面裁切+调整帧率】
  • SpringBoot+HttpClient实现文件上传下载
  • QT--控件篇四
  • opencv—常用函数学习_“干货“_2
  • 解析CSS与JavaScript的使用方法及ECMAScript语法规则
  • 从零开始学习嵌入式----结构体struct和union习题回顾
  • 建筑产业网元宇宙的探索与实践
  • 比较RMI、HTTP+JSON/XML、gRPC
  • 软件工程-可行性分析
  • iOS ------ 消息传递和消息转发
  • 计算机视觉之Vision Transformer图像分类
  • 【深度学习】BeautyGAN: 美妆,化妆,人脸美妆
  • RocketMQ~架构与工作流程了解
  • 学习Python的IDE功能--(一)入门导览
  • gdb调试多线程程序
  • 实战GraphRAG(一):初步体验GraphRAG及其与RAG的对比
  • 37、PHP 实现一个链表中包含环,请找出该链表的环的入口结点
  • LIMS系统对实验室管理有哪些帮助?
  • 在GPU上运行PyTorch
  • 【内网穿透】打洞笔记