ccflow 代码分析

news2025/1/18 9:03:25

ccflow 代码分析

  • 目录
    • 概述
      • 需求:
    • 设计思路
    • 实现思路分析
      • 1.
  • 参考资料和推荐阅读

Survive by day and develop by night.
talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.
happy for hardess to solve denpendies.

目录

在这里插入图片描述

概述

需求:

设计思路

实现思路分析

1.

一 场景
在设计表单过程中,经常有客户询问如何在从表中显示合计,有些业务流程特别是财务报表汇总流程中经常会用到。

工作流实现多人处理以及处理方式
ccflow通过抢办模式、协作模式、队列模式、共享模式4种运行模式实现并发、多人处理、会签等功能。
在需要多人处理的节点配置处理模式:

抢办模式:无论当前工作允许多少人处理,有一个人处理了,当前工作就算完成。

协作模式:当前节点的处理人必须全部处理,才可以算完成。

队列模式:当前节点的处理人根据职务高低,进行有序处理,全部处理后,才可以算完成。

共享模式:流程发送后,会发送到任务池中,有权限处理的人需要在权限池中申请下来,才可以处理。

ccflow中的多人处理模式,只是针对节点的处理人而言,对流程表单中的附件、公文、表单内容无影响,只要有权限,就可以修改。

多人待办工作处理模式,也是待办处理模式。是当接受的节点是多个人的时候,如何处理待办?

根据不用的场景,ccbpm把多人在普通节点下的处理模式分为如下几种。

抢办模式:
A发送到B ,B节点上有n个人可以处理。这n个人都可以看到待办,当其中一个人处理后,其他人的待办就消失了。这样的工作模式属于抢办,这n个人可以同时打开,当一个人发送后,其他人都不能在发送了。通俗的说,也就是谁抢到了这件工作,就是谁处理的。抢办模式是一个默认的处理模式。

协作模式:
A发送到B ,B节点上有n个人可以处理。 这个n个人都可以去处理,都可以去发送,有最后一个处理人发送到下一个节点上去,这n个人的处理不分顺序。这样的模式我们叫做协作模式。
协作模式通常用在具有审核组件的表单中,每个人都可以填写自己的意见,发表自己的看法,在审核组件里审核每个人在一个节点上只能写入一条数据,也就是说只能表达一次意见。
也经常用在传阅的情况下,必须这些人都读取了,知道了才能向下运动。它与抄送不同的地方是,抄送可以不看,就可以向下运行,但是他必须处理才能向下运行。

通常的协作模式,就是多人都要点击一下发送功能按钮,来确认自己处理了,确认自己同意了或者认可了。

队列模式:
A发送到B ,B节点上有n个人可以处理。这个n个人按照设置的先后顺序去处理,在同一个时间点必须有一个人待办,其他人看不到。

应用场景: 一个公文发送给一个部门,该部门下n个人可以接受(注意这是一个节点),按照国内的行政制度,这n个人会从小到达排一个队列,有最小的级别的工作人员审批,然后依次类推,走到最后由最后一个人发送到下一个节点去。这n个人都是该节点的处理人,这n个人的审核步骤是由他们的顺序确定的,所以在设置该节点的接受人时,要按照顺序执行。、

通常这样的模式也与审核组件一起使用,每个人表达意见后,就发送到下一个节点,当然这样的模式也有缺点。

共享模式:
A发送到B ,B节点上有n个人可以处理。ccbpm有一个任务池,这写人都需要从这个任务池里获取。

关于对ccbpm任务池的描述:
1,在流程属性与全局配置设置了启动任务池的状态下,如果一个节点遇到多个人处理,这个任务就放在了任务池里,只有参与处理的人人员才能看得到。

2,工作人员在处理该工作之前需要申请,放到自己的代办里,一人申请之后,其他人就不能申请了,多个人同时申请第一个人申请的先得到。

3,申请之后,任务池里就不出现在条工作而是进入了被申请人的待办里。

4,如果申请人处理不了这件工作,他可以把该工作放入任务池中,放入任务池的工作可以被其他的N个人可以看到。

5,不管取回与放入,都需要写入流程日志。

6,任务池的设计:

1,在流程引擎控制表 WF_GenerWorkFlow 中增加了如下字段:

TaskSta, 枚举类型, 0=不启用,1=共享,2=被申请。

TodoEmpsNum, Int类型,处理人员数量,当前节点工作有多少人待办,如果此值大于等于2,讨论共享任务才有意义。

     TodoEmps varchar(500) 待办人员,格式为 处理人员编号,处理人员名称; 比如:guobaogeng,郭宝庚;fuhui,福惠;

2,在流程引擎控制表的人员列表中 WF_GenerWorkerList 中对于IsEnable字段,进行扩充了,如果等于 -1=任务池禁用,0=分配工作被屏蔽,1=正常。

3,增加了一个功能界面 /WF/TaskPoolSmaller.aspx 次功能界面是有在任务池启用才能被使用。

4,在流程属性里增加一个字段 IsEnableTaskPool 是否启用任务池? 此字段用来控制该流程是否启用任务池。

协作组长模式:

这个模式与协作模式区别在于,如果当前的人员中有一个是组长(领导),他在执行发送的时候就标记这个流程结束。

这种模式有如下3中情况:

第一种:接受人员列表里没有领导/组长,这种模式与协作模式是一样的,就是所有的成员都表态(举手)才能向下发送。

第二种:只有一个领导/组长的情况,领导/组长向下发送的时候,标识该节点完成。比如: 当前节点是一个采样节点,采样组有1个组长n个组员,只有组长向下发送的时候才标记次流程完成。

第三种:有n个领导/组长的情况,n>=1 任何一个领导/组长向下发送的时候标记该流程完成。比如:当前节点的采样任务交给了两个采样组负责,有两个组长n个成员,任何一个组长向下发送,标记流程结束。

怎么标记该其中一个成员是领导?当前登录人员是所在的部门的领导,他就是组长或者领导,我们用sql表达如下。SELECT COUNT(No) AS num FROM Port_Dept WHERE No=‘“+WebUser.FK_Dept+”’ AND Leader=‘“+WebUser.No+”’

任务池的SDK接口:

1,获得共享任务: DB_TaskPool

2,获得共享任务中我的待办:DB_TaskPoolOfMy

3,从共享任务中取回:Node_TaskPoolTakebackOne

4,把取回的共享任务放入任务池: Node_TaskPoolPutOne

参考资料和推荐阅读

1.https://blog.csdn.net/stone_dongzi/article/details/11767061
2. 如有侵权,请联系私信删除之
3.https://blog.csdn.net/weixin_30797027/article/details/95447283

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/178090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线段树的原理和应用

目录 一、前言 二、线段树的概念 1、区间最值问题RMQ (Range Minimum/Maximum Query) (1)暴力法 (2)高效的办法:线段树 (3)把数列放在二叉树上 (4)查询最小值的复…

反向放大电路并联电容与积分电路并联电阻的区别?

运放反相比例放大电路中反馈电阻两端经常并联一个电容,而运放积分电路的反馈电容上常常并联一个电阻,两者电路结构相似,如下所示(隐去阻容值),二者有何区别呢?电阻、电容分别又起到什么作用&…

djangorestframework全解

这里写目录标题drf安装与使用ApiView继承自原生View的基类基本使用源码分析drf的Request对象响应模块(一般不用管)内置渲染器局部使用全局使用解析器(一般不用管)全局使用解析器局部使用解析器同时使用多个解析器(默认…

雅克比行列式补充和曲面的参数方程求导表示法向量

接上篇的雅克比行列式部分。其实对于任何变量x,y, dxdy描述的是一个抽象的“面积”。比如,如果x是力F,y是时间t,那么“面积”Ft其实就是做功。所以我们可以认识到,对于dxdy和dudv之间,如果自变量u,v的改变量…

【网络安全】ip地址、公网、私网

一、IP地址 ip地址相当于收发快递时的收货地址和发货地址 IPV4的地址:192.168.0.1 11000000.10101000.00000000.00000001 windows使用>ipconfig;linux使用ifconfig 可以看到IPV4地址/inet旁边的就是IP地址 IP地址的分类 IP地址有32位&#xff0…

React事件和原生事件的执行顺序

React在内部对事件做了统一的处理,合成事件是一个比较大的概念 为什么要有合成事件 在传统的事件里,不同的浏览器需要兼容不同的写法,在合成事件中React提供统一的事件对象,抹平了浏览器的兼容性差异React通过顶层监听的形式&am…

ROS学习寄录之环境搭建

1 创建ROS工作空间 1.1 创建工作空间 (1)创建工作空间 mkdir catkin_ws (2)进入catkin_ws文件夹,然后创建一个src文件夹 cd catkin_ws mkdir src (3)进入src文件夹,生成CMakeL…

JavaScript typeof

文章目录JavaScript typeof, null, 和 undefinedtypeof 操作符NullUndefinedUndefined 和 Null 的区别JavaScript typeof, null, 和 undefined JavaScript typeof, null, undefined, valueOf()。 typeof 操作符 你可以使用 typeof 操作符来检测变量的数据类型。 实例 typeof …

2.2 标识符与关键字

文章目录1 标识符2 关键字1 标识符 标识符可以简单的理解成一个名字。 在Java中,我们需要给代码中的很多元素起名,包括类名、方法名、字段名、变量名等等。我们给对应元素起的名称就被称为标识符,一个正确的标识符需要遵循以下规则&#xff…

【蓝桥杯】简单数论4——丢番图方程

1、二元线性丢番图方程 方程ax by c被称为二元线性丢番图方程,其中a、b、c是已知整数,x、y是变量,问是否有整数解。 ax by c实际上是二维x-y平面上的一条直线,这条直线上如果有整数坐标点,方程就有解,如果没有整数坐…

【算法竞赛 5】动态规划 ——— 闫氏DP分析法(从集合角度来分析DP问题——01背包)

目录 Description 输入格式 输出格式 数据范围 输入样例 输出样例: 题解 状态表示 状态计算 AC_Code 优化后代码 Description 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi,价值是 wi。 求解将哪些物品…

2.4.1 整数型

文章目录1.整型基本数据类型介绍2.byte 数据类型3.short 数据类型4.int 数据类型5.long 数据类型1.整型基本数据类型介绍 整型用于表示没有小数部分的数字,比如1,2,3等,其允许是负数,JAVA共提供了4种整型数据类型&…

电阻抗成像OpenEIT 番外篇 简单算法

算法意义 C→Y→V→eC\rightarrow Y \rightarrow V \rightarrow eC→Y→V→e 符号 符号含义–Ω\OmegaΩ研究图像区域∂Ω\partial\Omega∂Ω研究图像区域的边界ϕ(x,y)\phi(x,y)ϕ(x,y)代求电导率σ(x,y)\sigma(x,y)σ(x,y)节点电压 e 电导率jn(x,y)j_n(x,y)jn​(x,y)注入表…

C++ 多线程12:内存模型(stdmemory_order)

cpp 多线程:内存模型(std::memory_order) 文章目录cpp 多线程:内存模型(std::memory_order)概念内存模型基础原子操作间的关系Synchronized-withHappens-beforestd::memory_orderRelaxed orderingRelease-Consume orderingRelease-Acquire orderingSeque…

UnityEditor编辑器扩展开发-自定义Shader入门

估计需要自定义Shader 的人不多下面内容就看看作为小白的我们,无从入手,当然首先看看 Amplify Shader Editor(ASE)是如何实现Shader定义,从(ASE)的Shader代码,得知自定义原理(代码)//CustomEdit…

前端艺术之毛玻璃-倾斜-日历

前端艺术之毛玻璃-倾斜-日历描述项目效果index.htmlindex.css描述 项目描述开发语言HTML、JavaScript、CSS库dyCalendarJS、vanilla-tiltEdge108.0.1462.54 (正式版本) (64 位) 该项目中需要使用到的库有: dyCalendarJS vanilla-tilt.js 是 JavaScript 中的一个平…

C++ | 哈希 | 基于开散列结构的unordered系列容器模拟实现

文章目录unordered_map的封装所有接口的声明与实现operator[]重载unordered_set的封装上篇博客模拟实现了哈希的开散列结构,并且将迭代器与泛型进行了封装,至此我们可以将开散列作为底层结构对STL标准容器——unordered_map和unordered_set进行封装。但是…

使用Vue 简化 用户查询/添加功能

使用Vue简化 用户查询/添加功能1. 查询功能1.1 Vue核心对象:1.2 brand.html:1.3 selectAllServlet(无变化):2. 添加功能2.1 addBrandhtml:2.2 Vue核心对象:2.3 addServlet(无变化&am…

网关zuul源码解析==ZuulServlet

用法&#xff1a; 使用zuul网关&#xff0c;需要引入starter为 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> 同时在springboot启动类上加注解…

7、代码模板的使用

文章目录7、代码模板的使用7.1 查看Postfix Completion模板&#xff08;后缀补全&#xff09;7.2 查看Live Templates模板&#xff08;实时模板&#xff09;7.3 常用代码模板1 非空判断2 遍历数组和集合3 输出语句4 对象操作5 静态常量声明7.4 自定义代码模板1 自定义Postfix C…