--- title: 流程相关的代码 createTime: 2025/04/23 21:03:10 permalink: /core/flowinstancedev/ --- ## 流程审批逻辑 当最终用户在【待处理流程】中审批一个流程实例时,流程实例会经过下面步骤进行处理: @startuml skinparam handwritten true skinparam backgroundColor #EEEBDC start if (当前活动节点类型为会签) then (yes) :标识当前节点状态; :从所有的分支中找到一个用户可以审批的节点canCheckId; if (没找到?) then (yes) stop endif :标识canCheckId节点状态; #HotPink:进行会签,结果为res; if(res == TagState.No) then (yes) :修改流程最终状态为不同意; else if(res != string.Empty) then (yes) stop else (no) :修改流程最终状态,修改活动节点,修改可执行人; :添加扭转记录; endif else (no) :标识当前节点状态; if (同意) then (yes) :修改流程最终状态,修改活动节点,修改可执行人; :添加扭转记录; else :修改流程最终状态为不同意; endif :操作记录; endif stop @enduml ## 流程模板 流程模板指流程的定义。数据存放在FlowScheme表中,该表核心字段如下: ### FrmId:流程模版关联的表单id ### FrmType:表单类型 ### SchemeContent:流程实例的具体内容 该字段存储的是一个JSON对象,具体内容如下所示: ```javascript { "nodes": [ { "type": "node", //节点类型,开始,普通,网关,会签等 "name": "任务节点", //节点名称 "icon": "iconfont icon-jiaoseguanli", //节点图标 "belongto": "commonNodes", //节点样式类型:普通四边形节点,菱形网关 "id": "node-011c37dd1db34596b9cbd6812971b8a6", //节点id "setInfo": { "NodeRejectType": 0, //节点驳回类型: "NodeConfluenceType": "", //节点会签/网关类型 "NodeDesignate": "SPECIAL_ROLE",//执行权限类型:指定角色、指定用户等 "ThirdPartyUrl": "",//执行完成后回调地址 "NodeDesignateData": { //根据NodeDesignate不同,表示不同的权限数据:角色、用户等 "datas": [ "77e6d0c3-f9e1-4933-92c3-c1c6eef75593" ], "Texts": "神" }, "CanWriteFormItemIds": //可写表单项id [ "radio113860", "radio74071" ] } } ], "lines": [ { "type": "sl", //原有gooflow里面的值:"sl":直线, "lr":中段可左右移动型折线, "tb":中段可上下移动型折线 "id": "link-6351c01fd31d4e6d85d476be6e0b0ae2", "from": "start-3fcaf7e8577644ff8b52fabaf975437e", "to": "node-011c37dd1db34596b9cbd6812971b8a6", "label": "值>3", //连线上面显示的文字 "cls": { "linkType": "Flowchart", "linkColor": "#2a2929", "linkThickness": 1 }, "Compares": [{ //连线条件 "FieldName": "Age", //表单项id "Operation": ">", //条件类型 "Value": "3" //条件值 }] }, { "type": "sl", "id": "link-785f8823a60e4472884f482b16c16f26", "from": "node-011c37dd1db34596b9cbd6812971b8a6", "to": "end-a749ef5b89bb49d588009b71f53316f5", "label": "", "cls": { "linkType": "Flowchart", "linkColor": "#2a2929", "linkThickness": 1 } } ] } ``` 其中:nodes为流程实例的所有节点。lines为流程实例的所有连线。节点属性如下: ### 节点属性 #### 基础属性 | 属性名 | 类型 | 说明 | 可选值 | |--------|------|------|---------| | type | 字符串 | 节点类型 | start:开始节点
node:普通节点
fork:分支节点
join:合并节点
end:结束节点 | | name | 字符串 | 节点名称 | - | | icon | 字符串 | 节点图标 | - | | belongto | 字符串 | 节点样式类型 | - | | id | 字符串 | 节点id | - | #### 配置信息(setInfo) ##### 节点驳回配置 | 属性名 | 类型 | 说明 | 可选值 | |--------|------|------|---------| | NodeRejectType | 数字 | 节点驳回类型 | 0:前一步
1:第一步
2:指定节点 | | NodeRejectStep | 字符串 | 驳回节点id | 当NodeRejectType=2时使用 | ##### 节点会签/网关配置 | 属性名 | 类型 | 说明 | 可选值 | |--------|------|------|---------| | NodeConfluenceType | 字符串 | 节点会签/网关类型 | sequential:顺序
all:全部通过
one:至少一个通过 | ##### 执行权限配置 | 属性名 | 类型 | 说明 | 可选值 | |--------|------|------|---------| | NodeDesignate | 字符串 | 执行权限类型 | SPECIAL_ROLE:指定角色
SPECIAL_USER:指定用户
SPECIAL_SQL:指定SQL
RUNTIME_SPECIAL_ROLE:运行时指定角色
RUNTIME_SPECIAL_USER:运行时指定用户 | | NodeDesignateData | 对象 | 执行权限数据 | - | | NodeDesignateData.datas | 数组 | 执行权限数据 | - | | NodeDesignateData.Texts | 字符串 | 执行权限数据 | - | ##### 其他配置 | 属性名 | 类型 | 说明 | |--------|------|------| | ThirdPartyUrl | 字符串 | 执行完成后回调地址 | | CanWriteFormItemIds | 数组 | 可写表单项id | ## 流程实例 流程实例指正在运行的一个流程。数据存放在FlowInstance表中,该表核心字段如下: ### IsFinish:流程的当前状态 - -1 草稿/召回:流程发起人主动召回流程; - 0 正在运行; - 1 完成:流程结束,同时所有的审批都通过; - 3 不同意:即流程结束,同时审批人员没有通过; - 4 驳回:流程结束,可能发起的流程内容有问题,要求被驳回重新提交; ### ActivityId: 当前活动节点,即待审批的节点 与流程实例密切相关的还有:流程实例的操作记录FlowInstanceOperationHistory。 ## 操作记录FlowInstanceOperationHistory 该表记录了流程实例的所有操作记录,包括流程的创建、撤回、驳回、同意、不同意等操作。