驰骋JFlow,BPM,CCFlow 异表单分合流需求列表

CCFlow 异表单分合流需求列表

依据代码整理:CCFlow/Components/BP.WF、Vue3/src/WF/WorkOpt、Vue3/src/WF/Admin/AttrNode、Vue3/src/WF/MyFLDealThread.vue、Vue3/src/WF/ToolBar.vue

说明:本文档聚焦 异表单子线程(RunModel=5 / SubThreadUnSameWorkID) 及其与 分流(FL)/分合流(FHL)/合流(HL) 节点的协同能力;与同表单分流(RunModel=4)共用的机制在对应章节会标注。


一、总体架构

异表单分河流采用「干流程(FID=0)+ 子线程(FID=干流程 WorkID) 」双层实例结构。与同表单的核心差异在于:每个异表单子线程节点可绑定独立表单(FrmNode / NodeFrmID) ,物理表通常为 ND{NodeID},子线程之间数据相互隔离。

层级 节点类型(RunModel) 数据特征 典型作用
干流程 0 线形 / 2 分流 / 3 分合流 / 1 合流 WorkID 为主键,FID=0 发起、分流、合流汇总
子线程 5 异表单 独立 WorkID(规则可配置),FID=干流程 WorkID,独立表单表 并行处理不同业务表单,如多专业并行填报

典型拓扑:普通节点 → 分流/分合流节点 → 一个或多个异表单子线程节点(可并行多表单)→ 合流节点 → 后续节点。

核心后端入口:WorkNode.NodeSend_24_UnSameSheet(分流到异表单)、WorkNode.NodeSend_53_UnSameSheet_To_HeLiu(异表单子线程到合流)。


二、功能需求明细表

(一)设计配置 --- 节点运行模式

功能类别 功能名称 功能说明 需求场景概述
节点类型 异表单子线程节点 RunModel=5(SubThreadUnSameWorkID),节点工作类型为 SubThreadWork;与同表单(4)区分 不同部门/专业使用不同表单并行处理,如财务表、法务表、技术表同时流转
节点类型 分流节点 RunModel=2(FL),向下可连接一个或多个异表单子线程节点 将干流程拆分为多条并行子线程,每条可对应不同表单
节点类型 分合流节点 RunModel=3(FHL),兼具分流下发与合流汇总 单节点完成分流与合流,简化流程图
节点类型 合流节点 RunModel=1(HL),等待子线程按通过率到达后激活干流程待办 汇总各异表单分支结果后继续主流程
流程约束 分流可连多个异表单路径 分流节点后续有多个节点时,若均为异表单子线程,调用 NodeSend_24_UnSameSheet(toNDs) 同时启动 一次分流同时发起财务、人事、行政等多张表单
流程约束 分流仅连一条异表单路径 分流后续仅一个异表单子线程节点时,同样走 NodeSend_24_UnSameSheet 标准单表单异分支场景
流程约束 禁止同异表单混发 分流同时启动同表单(4)与异表单(5)子线程时报错 workflow_error_4 保证分支类型一致,避免数据模型冲突
流程约束 禁止多同表单并行 分流同时启动多个同表单子线程时报错 workflow_error_5(异表单不受此限,可多异表单并行) 同表单仅允许单路径;异表单允许多路径
流程约束 普通节点不可直连子线程 线形节点直接连接异表单子线程节点报错 workflow_error_3 子线程必须由分流/分合流节点发起
流程约束 合流节点不可下连子线程 合流节点下连接子线程节点报错 workflow_error_6 子线程只能在合流之前运行
WorkID 规则 USSWorkIDRole=0 仅生成一个 WorkID 同一异表单子线程节点下所有接收人共享一个 WorkID;多人协作处理同一份表单实例 同一表单需多人会签、但只维护一份数据
WorkID 规则 USSWorkIDRole=1 按接收人生成 WorkID 每个接收人独立生成 WorkID,各自拥有独立表单实例 每人填写各自负责的异表单内容
WorkID 规则 合流后再异表单有效说明 USSWorkIDRole 配置说明:对「上一节点是合流、当前是异表单子线程」场景有效 合流后再次分流到异表单时的实例生成策略
表单权限 WhoIsPK 主键规则 USSWorkIDRole=1 时,WhoIsPK 必须为 WorkID(OID),不能为 FID;设计期 FlowCheckError 自动修正并告警 保证每人独立读写自己的表单实例
表单校验 物理表独立性 异表单子线程 MapData.PTable 设为 ND{NodeID},与流程主表 Flow.PTable 分离 各子线程表单物理隔离
表单绑定 FrmNode 多表单绑定 子线程节点通过 FrmNodes 绑定表单库表单;FrmEnableRole=Allways 的表单在分流时复制干流程数据 子线程可使用与干流程不同的业务表单
表单绑定 WhoIsPK=FID 特殊处理 单表单绑定且 WhoIsPK=FID 时,子线程 wk.OID 使用干流程 WorkID 以干流程 ID 为主键的表单继承场景
完成通过率 PassRate 合流节点 PassRate(默认 100),按「已到达合流子线程数 / 总子线程数 × 100」判断是否激活干流程待办 允许部分异表单分支完成即可合流
子线程删除方式 ThreadKillRole 合流节点:0 不能删除(须全部完成)、1 手工删除、2 自动删除未完成子线程 合流前仍有子线程未完成时的处理策略
增加子线程 ThreadIsCanAdd 分流/分合流节点:已发出子线程后是否允许追加;后端要求分流后续仅一条子线程路径(HisToNodes.Count==1)才显示增加按钮 单路径异表单流程运行中补发人员
增加子线程(合流) ThreadIsCanAddOfHL 合流节点是否允许增加子线程;ThreadDtl.vue 在 FID==0 且该参数为真时显示「增加子线程」 合流阶段补录遗漏的异表单分支
删除子线程 ThreadIsCanDel 分流/分合流节点:子线程退回后是否允许删除/撤销整体发送 部分子线程退回后由分流人清理
移交子线程 ThreadIsCanShift 是否允许移交已发出的子线程(默认关闭) 子线程处理人变更
退回联动 IsKillEtcThread 子线程退回规则:0 不删除其它子线程、1 删除其它子线程、2 由退回人决定 一个异表单分支退回分流点时,其余分支是否一并取消
按钮权限 子线程按钮 ThreadEnable 控制工具栏「子线程」按钮;ThreadLab 自定义标签 分流人/合流人查看子线程明细入口
按钮权限 预置处理人 PreplaceWokerEnable:0 不启用、1 单独启用、2 发送前打开、3 发送且单独启用;PreplaceWoker.vue 组织树选人 分流前预先指定各异表单分支接收人
方向条件 发送后手工选择 GPE_CondModel 说明:异表单合流节点可配置「发送后手工选择到达节点与接受人」 合流后操作员灵活选择下一节点与接收人
合流接收人 禁止由上一步指定 FlowCheckError:合流/分合流节点接收人规则不能为「由上一步指定」,必须为自动计算 合流节点待办人由系统计算,非人工逐条指定

(二)设计配置 --- 子线程接收人规则(DeliveryWay)

功能类别 功能名称 功能说明 需求场景概述
接收人 按明细表确定子线程接收人 ByDtlAsSubThreadEmps(13):读取分流节点表单明细表,须含 UserNo 或 DeliveryParas 指定字段;仅子线程节点可用 分流表单明细每行指定一个异表单处理人
接收人 按 SQL 确定接收人与数据 BySQLAsSubThreadEmpsAndData(12):执行节点 SQL,结果集同时提供人员与行数据 外部数据源驱动多人并行,每人携带不同业务字段到各自异表单
接收人 按绑定部门(子线程) BySetDeptAsSubthread(16):绑定部门中一人完成即该部门子线程结束;返回 GroupMark 按部门维度并行处理异表单
接收人 按数据源确定子线程接收人 SubThreadByGenerDBSrc(81) 与流程数据源组件联动计算异表单分支处理人
接收人 由上一步发送人选择 BySelected(4)/ BySelectedFix 等:发送时弹出人员选择器 分流人手动指定各异表单分支处理人
接收人 预置海选 PreplaceWokerFree(710):自由选择预置处理人 发送前在组织树中预选异表单接收人
接收人 预置固定范围 PreplaceWokerFix(711):在固定人员范围内预选 限定组织范围内指定异表单处理人
接收人 按表单字段 / 部门负责人等 ByPreviousNodeFormEmpsField、ByFieldAsDeptNo 等常规规则 根据主表字段自动计算异表单分支处理人
明细表配置 子线程处理人字段 MapDtl.SubThreadWorker:从表字段下拉(Frm_SubThreadWorker)指定子线程处理人来源字段 从表明细驱动异表单人员分配
明细表配置 子线程分组标记 MapDtl.SubThreadGroupMark:同组多人共享子线程实例(与同表单 GroupMark 机制共用) 按组分派异表单任务
校验 非子线程误配 明细表/SQL/部门子线程方式配置在非子线程节点时抛异常 设计期防止接收人规则与节点类型不匹配
校验 找不到接收人 WhenNoWorker 与跳转规则联动;异表单分流找不到人时可跳转或报错 人员缺失时的容错策略

(三)运行期 --- 分流下发与节点选择(干流程 → 异表单子线程)

功能类别 功能名称 功能说明 需求场景概述
分流发送 异表单分流核心逻辑 NodeSend_24_UnSameSheet(toNDs):分流/分合流节点向一个或多个异表单子线程节点发送 一次发送产生一条或多条异表单分支
历史数据复用 子线程退回/撤销后重发 发送前查询 GenerWorkFlow(FID=干流程WorkID),同节点历史实例可复用 WorkID 与表单数据 子线程退回后再次下发不丢失已填数据
数据初始化 主表数据复制(USSWorkIDRole=0) 复制 rptGe 到子线程 Work;wk.FID=干流程WorkID;按 WhoIsPK 决定 wk.OID 异表单继承干流程基础数据
数据初始化 绑定表单数据复制 遍历 FrmNodes,FrmEnableRole=Allways 的表单从干流程复制到子线程 GEEntityOID 子线程异表单获得干流程已填数据
数据初始化 按接收人生成(USSWorkIDRole=1) 每个 GenerWorkerList 接收人独立 GenerOID、独立 wk.OID、独立 GenerWorkFlow 每人一份独立异表单实例
数据初始化 共享 WorkID(USSWorkIDRole=0) 多人共享一个 workIDSubThread,更新各 GenerWorkerList.WorkID 指向同一实例 多人协作填写同一份异表单
待办生成 GenerWorkerList 生成 Func_GenerWorkerLists_Thread / Func_GenerWorkerLists 计算各异表单节点处理人 按接收人规则产生待办
待办生成 分流节点发送副本 为子线程产生分流节点 GenerWorkerList 副本(PassInt=-2,IsRead=true) 分流人可观察各分支发送状态
待办生成 找不到人跳转 WhenNoWorker=true 时记录 Skip 轨迹并尝试跳转下一节点 人员缺失时自动跳过
实例维护 GenerWorkFlow 子线程实例 每条异表单分支创建/更新 GenerWorkFlow:FID=干流程WorkID,继承标题、业务字段、父流程关联等 子线程在待办列表独立展示
状态维护 ThreadCount 归零 分流时 HisGenerWorkFlow.SetPara("ThreadCount", 0) 为合流通过率计算准备计数
状态维护 节点名称追加 分流时 NodeName 追加异表单子线程节点名(多节点逗号拼接) 干流程列表展示当前分支概况
轨迹记录 分流前进 非开始节点记录 ActionType.Forward(含异表单分流提示信息 FenLiuUnSameSheet) 轨迹图/时间轴标识分流动作
系统变量 发送结果变量 写入 VarTreadWorkIDs、VarAcceptersID、VarAcceptersName、VarToNodeIDs 供发送后事件/自定义开发使用
节点选择 ToNodes 初始化 ToNodes_Init → WorkOpt_GetToNodes:线性/同表单节点单选,异表单节点多选 分流发送前选择要启动的异表单分支
节点选择 「可以分发启动的异表单」 后端插入 NodeID=0 虚拟节点,前端 ToNodes.vue 展示为「可以分发启动的异表单」;选此项时 radioSelected=0,通过复选框多选异表单节点 一次分流同时启动多张异表单
节点选择 异表单全选 ToNodes.vue 提供「全选节点」复选框,支持半选状态 快速选择所有可达异表单分支
节点选择 接收人选择与校验 异表单节点 DeliveryWay 为 4/21/43/60 时需「选择接收人」;发送前校验每个选中节点已指定人员 手动选人场景的发送前校验
节点选择 发送执行 ToNodes_Send 将选中节点 ID(逗号分隔)写入 Paras_ToNodes 并执行发送 完成多异表单分支并行下发
节点选择 记忆上次选择 WorkOpt_ToNodes_GetLasterSelectNodeID 从轨迹表读取上次选择节点 改善用户重复操作体验
接收人维护 增加预选接收人 AccepterOfGener_AddEmps:选择器确认后将人员写入 WF_SelectAccper 发送前维护各异表单节点接收人
接收人维护 移除预选接收人 ToNodes.vue 中 RemoveEmp 删除 SelectAccper 记录 调整已选异表单分支处理人

(四)运行期 --- 子线程处理与向下发送

功能类别 功能名称 功能说明 需求场景概述
待办打开 子线程独立待办 子线程处理人待办 WorkID 为子线程 ID,FID 指向干流程;打开对应异表单(NodeFrmID) 处理人仅看到自己的异表单任务
表单访问 查看子线程表单 ThreadDtl.OpenFrm 打开 MyView,传入 WorkID/FID/FK_Node/FK_Flow 分流人从管理界面查看任意异表单分支
表单访问 MyFLDealThread 查看表单 OpenFrm 通过 BaseComponent.openDrawerByUrl 抽屉打开子线程表单 分流退回处理页内查看异表单
子线程发送 子线程向下运行 异表单子线程节点内正常审批发送,动作类型 ActionType.SubThreadForward 异表单分支内部多节点流转
子线程发送 子线程到合流 NodeSend_53_UnSameSheet_To_HeLiu:异表单完成后向合流节点汇聚 并行异表单分支汇入主流程
数据汇总 合流主表数据合并 将子线程 HisWork 复制到合流点 heLiuWK(OID=干流程WorkID);若绑定相同 NodeFrmID 则 isCopyData=false 跳过重拷 合流后主表单体现各异表单填写结果
数据汇总 合流报表同步 rptGe.Copy(HisWork) 同步到干流程报表 合流后干流程数据一致
数据汇总 合流汇总从表 删除子线程时 ThreadDtl_DelSubThread 清理 ItIsHLDtl=true 的合流汇总从表数据 终止分支后清除合流汇总脏数据
通过率 合流到达计数 ThreadCount 自增,计算 passRate = ThreadCount / 总子线程数 × 100 判断合流条件
通过率 达到通过率激活待办 passRate >= PassRate 时激活合流节点待办 满足比例后推进主流程
通过率 未达通过率隐藏待办 未达标时合流节点待办不可见(IsPass=3) 等待更多异表单分支完成
轨迹记录 子线程前进 ActionType.SubThreadForward,前端展示绿色「子线程前进」 时间轴区分子线程与普通审批
轨迹记录 合流前进 ActionType.ForwardHL,前端展示绿色「合流前进」 标识合流节点激活
轨迹记录 子线程向合流发送 合流时记录「子线程向合流节点发送」 审计异表单分支到达合流

(五)运行期 --- 子线程退回与分流人处理

功能类别 功能名称 功能说明 需求场景概述
子线程退回 退回到分流节点 异表单子线程节点可退回到上游分流/分合流节点;WFState=ReturnSta(5) 异表单处理人认为需发起人修改后重办
退回规则 全部子线程退回选项 IsKillEtcThread=1 时退回并删除其它子线程;ReturnWork.vue 展示「全部子线程退回」复选框 一人退回即终止其余异表单并行任务
退回规则 由退回人决定 IsKillEtcThread=2 时退回人勾选是否删除其它子线程 灵活处理部分退回
分流人界面 子线程退回处理页 MyFLDealThread.vue:分流人打开后展示退回子线程、可发起节点、运行中子线程 分流人集中处理退回后的异表单分支
分流人界面 退回子线程列表 WF_ReturnWork 表:退回节点、退回人、日期、退回原因;支持「发送」「终止」 逐条处理已退回异表单分支
分流人界面 可发起子线程节点 WF_ThreadNode 列表;isSameThread=false 且 ThreadIsCanAdd=1 时展示「增加子线程」 存在多条异表单路径时可补发新分支
分流人界面 运行中子线程 按 GenerWorkFlow 卡片展示(WFState!=5);嵌套 GenerWorkerList 节点/人员/状态/日期 总览所有在途异表单分支
分流人工具栏 分流退回专用工具栏 Flow_IsCanToFLTread 为真时 InitToolBar_ForFenLiu:查看表单、撤销整体发送、增加子线程、轨迹 子线程退回后分流人操作集合
单条重发 发送退回子线程 ThreadDtl_SendSubThread → Node_SendSubTread:恢复子线程为运行态;支持小纸条 ScripMsg 分流人修改后重新下发该异表单分支
单条重发 小纸条传达 SendThread 弹窗输入传达信息,写入 GenerWorkFlow.ScripMsg / ScripNodeID 重发时向处理人附带说明
单条重发 末条子线程重发联动 所有退回子线程处理完毕后,自动恢复干流程运行态并跳转 全部分支恢复后回到主流程
子线程退回 ThreadDtl 单条退回 ReturnThread 打开 ReturnWork,FromPage=ThreadDtl,预选退回目标与处理人 分流人从子线程管理界面代为退回
子线程退回 ThreadDtl 退回条件 IsPass==1(已完成)时显示「退回」;IsPass==0 且 WFState==5 时显示「撤销」 按子线程状态控制可操作项
撤销退回 撤销子线程退回 UnReturnThread 调用 MyView_UnReturn,传入 UnReturnToNode 误退回后恢复异表单分支
分流人判断 是否分流退回态 Flow_IsCanToFLTread:FID!=0 且 WFState=ReturnSta 且当前在 FL/FHL 节点 决定是否进入分流处理模式
合流驳回 合流点驳回子线程 Node_FHL_DoReject:合流人将指定异表单子线程驳回 合流阶段发现某分支有问题需打回

(六)运行期 --- 子线程增删与管理

功能类别 功能名称 功能说明 需求场景概述
子线程管理弹窗 ThreadDtl 组件 ToolBar 点击「子线程」打开 ThreadDtl 弹窗(宽 70%);发送前自动 SaveExt 分流人/合流人查看异表单分支明细
子线程列表 按 GenerWorkFlow 分组 每张卡片:标题、待办人员(TodoEmps)、发起时间(RDT) 一览各异表单分支概况
子线程列表 节点处理明细表 列:节点、处理人、状态(已完成/未读/已读未处理)、应完成日期、实际完成日期 掌握异表单分支内部进度
子线程列表 空状态 无子线程时展示「当前暂时没有子线程」占位图与禁用按钮 尚未下发或已全部结束
子线程列表 过滤已删除待办 GetGwlsData 过滤 IsPass=-2 的记录 不展示分流人观察态副本
增加子线程 合流节点增加 ThreadIsCanAddOfHL 且 FID==0:输入人员账号(逗号分隔),调用 DoSubFlowAddEmps 合流阶段补录遗漏异表单人员
增加子线程 分流节点增加 ThreadIsCanAdd 且后续仅一条子线程路径;Node_FHL_AddSubThread 单路径异表单流程补发新人员
增加子线程 新增从下一节点执行 提示「新增加的人员,从分流节点的下一个节点开始执行」 补发人员不重复走子线程入口
增加子线程 人员校验 校验账号存在性;支持中英文逗号/分号分隔 防止无效人员
增加子线程 合流节点定位分流 当前在合流节点时,自动向上查找分流节点 RunModel=FL 正确确定增线程起点
增加子线程 指定目标子线程节点 toNodeID 参数指定异表单子线程节点;默认取分流下第一个子线程节点 多异表单路径时指定补发到哪张表单
终止子线程 手工终止 ThreadDtl_DelSubThread → Flow_DeleteSubThread → DoDeleteWorkFlowByReal 分流人终止异常/多余异表单分支
终止子线程 终止权限 ThreadKillRole=1(手工删除)时显示「终止」 按节点配置控制是否可删
终止子线程 终止后合流重算 删除后按剩余子线程重算合流 PassRate;清理合流汇总从表 终止分支后自动调整主流程状态
终止子线程 全部终止后恢复分流 所有子线程删除后,恢复分流节点处理人待办并跳转 MyFlow 所有异表单分支取消后回到分流人
终止子线程 写终止轨迹 WriteTrackInfo 记录「分流点手工删除」 审计人为终止原因
撤销整体发送 UnSendAllThread 删除 FID 下全部子线程,分流节点待办恢复 分流人整体收回所有异表单分支
撤销整体发送 权限控制 仅 ThreadIsCanDel=true 且当前用户为分流发送人 防止非发起人误操作
MyFLDealThread 终止 分流退回页终止 DoDelThread 确认后调用 ThreadDtl_DelSubThread;若返回 PageName 则跳转 MyView 退回处理页内终止单条分支

(七)运行期 --- 撤销发送与合流控制

功能类别 功能名称 功能说明 需求场景概述
撤销发送 合流节点撤销 撤销前删除 FID 下所有子线程实例(Flow_DeleteSubThread) 合流后发现异常需回到分流
撤销发送 分合流撤销 DoUnSendInFeiLiuHeiliu:恢复分流节点待办,删除合流及子线程待办 分合流节点专用撤销
撤销发送 子线程撤销发送 DoThreadUnSend:撤销到分流/分合流时,联动处理 Span 范围内子线程节点待办 子线程内撤销不影响其它分支
合流前检查 未完成子线程阻断 DealHeLiuState:ThreadKillRole=None 时存在未完成子线程则禁止合流节点向下发送 强制全部异表单分支完成再推进
合流前检查 手工删除提示 ThreadKillRole=ByHand 时提示通知完成或强制删除 允许人工干预未完成分支
合流前检查 自动删除 ThreadKillRole=ByAuto 时自动删除未完成子线程后继续 超时或不再等待的场景
撤销范围 SpanSubThreadNodeIds 递归计算合流点与上游分流点之间所有子线程节点 ID 精确定义异表单分支节点范围
合流查询 异表单合流点子线程 DB_GenerHLSubFlowDtl_YB:查询 FID=workid 且 IsPass=0 的在途子线程 合流节点展示各异表单分支状态

(八)运行期 --- 轨迹、审核与时间轴

功能类别 功能名称 功能说明 需求场景概述
流程轨迹 OneWork 多页签 OneWork_GetTabs 返回轨迹图(Truck)、时间轴(TimeBase)、时间表(Table) 查看整单(含异表单子线程)运转情况
流程轨迹 OneWork 页签切换 OneWork.vue 固定 Tab 导航,支持 currTab 参数指定默认页签 从工具栏轨迹按钮直达指定视图
时间轴 子线程待办展示 TimeBase.vue:分流/合流/分合流节点下按 gwl.FID 过滤展示子线程待办 干流程处理人看到各异表单分支当前处理人
时间轴 分流前进着色 ActionType.ForwardFL 绿色标识「分流前进」 区分分流与普通发送
时间轴 子线程前进着色 ActionType.SubThreadForward 绿色标识「子线程前进」;StepForwardOutlined 图标 区分子线程与普通过件
时间轴 合流前进着色 ActionType.ForwardHL 绿色标识「合流前进」;FastForwardOutlined 图标 标识合流动作
轨迹图 分流节点到达判断 Track.vue 对 ForwardFL 做特殊到达判断 流程图正确展示分流状态
审核组件 干/子 WorkID 切换 WorkCheck.vue 使用 `RealWorkID
审核组件 三种显示模式 FWCShowModel:0 普通(WorkCheckParse)、1 轨迹(WorkCheckParseTrack)、2 时间轴(WorkCheckParseTrackTime) 按节点审核组件配置展示
审核组件 普通模式 WorkCheck_Init / WorkCheck_Init2019 按轨迹逐条渲染;IsDoc=true 的可编辑 常规节点审核意见录入与历史展示
审核组件 轨迹模式 WorkTrack_Init + 时间线;自动插入「流程结束」节点;过滤跳转与发送重复项 以时间线方式查看含异表单动作的审批历程
审核组件 时间轴模式 表格式表头(环节/审批人/信息/节点/完成时间);同节点多人合并为 NodeArr;退回节点单独分组 领导查看结构化审批时间轴
审核组件 停留时间计算 FWCTimeModel:0 倒序(当前-下一节点)、1 正序(当前-上一节点);排除节点 ID 末位 01 展示各审批环节耗时
审核组件 审核意见编辑 支持文本录入(≤2000字)、失焦自动保存(SaveWorkCheck(true)) 异表单节点处理人填写审批意见
审核组件 审核立场 FWCView 配置立场选项;提交时校验必选(FWCView 参数) 同意/不同意/附条件等立场选择
审核组件 签名模式 SigantureEnabel:0 不签名、1 图片签名、2 写字板手写签名 按配置展示/采集签名
审核组件 审核时间修改 IsChangeFWCTime=1 时可编辑 DatePicker 修改审批时间 补录或修正审批时间
审核组件 审核附件 FWCAth=1 时支持上传/下载/删除;WorkCheck_GetNewUploadedAths 获取列表 审批过程附带材料
审核组件 常用短语 CommonConfig.IsShowWorkCheckUsefulExpres 时展示标签快选与 GL_WorkcheckWorks 管理 快速录入常见审批语
审核组件 审核标准 NodeCheckStandard 配置:1 外链打开、2 弹窗展示 MapExt.Doc 处理人查看审批依据
审核组件 仅显示自己意见 FWCMsgShow=1 时过滤只显示当前用户审核内容与附件 协作节点隐私展示
审核组件 会签节点名称 节点名 (会签) 替换为灰色 HTML 标注 区分会签与普通节点
审核组件 退回原因前缀 ActionType=Return/ReturnAndBackWay 时消息前缀「退回原因:」 轨迹中明确退回信息
审核组件 传阅信息展示 抄送节点展示 cclist 人员及状态;计算传阅耗时 时间轴完整展示抄送链
审核组件 子线程动作标签 轨迹/时间轴分别展示「分流前进」「子线程前进」「合流前进」 审核轨迹中读懂异表单分支动作
审核组件 待办中间态 展示「处理中」「未开始」「审批中」等 当前异表单节点尚未完成时
审核组件 外部保存暴露 WorkCheck.vue 暴露 WorkCheckSave;根据模式调用子组件 SaveWorkCheck 工具栏发送前统一保存审核意见
审核组件 InitWorkCheck 事件 监听 Event.on('InitWorkCheck') 外部注入审核内容 与其他组件联动填充意见

(九)运行期 --- 预置处理人与辅助能力

功能类别 功能名称 功能说明 需求场景概述
预置处理人 组织树懒加载 PreplaceWoker.vue 调用 SelectEmps_Init,按部门展开加载人员与下级部门 发送前按组织架构指定异表单接收人
预置处理人 上一级导航 toPrevDept 返回上级机构;到根节点时提示「已到第一机构」 大型组织树中快速定位
预置处理人 单选/多选 isMultiSelect 控制树节点 checkable;支持 selectedKeys 与 checkedKeys 按场景选择单个或多个预置人员
预置处理人 确定/取消 BtnOK 校验已选人后 emit('AddEmps');Cancel 返回空数组 与发送流程集成
预置处理人 发送前强制打开 PreplaceWokerEnable=2 时发送前自动弹出;ToolBar 检测未点击则拦截发送 确保异表单分流前人员已确定
预置处理人 单独按钮打开 PreplaceWokerEnable=1/3 时工具栏显示「预置处理人」按钮 随时维护后续节点处理人
预置处理人 自由节点预置 GetPreplaceWokerFreeNodes 获取需预置的节点列表 多异表单分支批量预置处理人
催办 子流程催办 Flow_DoPress(workID, msg, isPressSubFlow=true) 支持催办子线程待办 分流人催促异表单分支处理人
待办过滤 异表单待办识别 待办列表对 RunModel=5 且 FID!=0 做特殊处理 待办列表正确显示异表单分支任务
权限 轨迹查看权限 子线程节点类型参与 Flow_IsCanViewTruck 判断 异表单分支参与人可查看轨迹
退回初始化 ThreadDtl 专用退回 ReturnWork 在 FromPage=ThreadDtl 时跳过后端 Return_Init,直接使用传入节点与处理人 简化分流人代退回操作
项目文件 审核区项目文件卡片 WorkCheck.vue 嵌入 CCPrjFileReviewCard 异表单审批时关联项目文件查阅

(十)后端 API 与数据实体

功能类别 功能名称 功能说明 需求场景概述
HTTP 接口 ThreadDtl_Init WF_MyFlow:加载节点信息、可发起子线程节点、退回子线程、GenerWorkFlow/GenerWorkerList MyFLDealThread 页面初始化
HTTP 接口 ThreadDtl_SendSubThread 发送单条退回子线程 → Node_SendSubTread 分流人重发异表单分支
HTTP 接口 ThreadDtl_DelSubThread WF_MyFlow / WF_WorkOpt:删除子线程,含合流通过率联动与合流从表清理 子线程管理终止
HTTP 接口 ToNodes_Init 获取可达节点列表,含异表单多选虚拟节点 ToNodes.vue 初始化
HTTP 接口 ToNodes_Send 按选中节点 ID 执行分流发送 多异表单分支并行下发
HTTP 接口 AccepterOfGener_AddEmps 为指定节点增加预选接收人 发送前人员维护
HTTP 接口 Return_DoReturn 支持 IsKillEtcThread 参数 异表单子线程退回时联动删除其它分支
HTTP 接口 MyView_UnReturn 撤销子线程退回 恢复误操作
HTTP 接口 UnSendAllTread 撤销整体发送 分流人收回全部异表单分支
HTTP 接口 InitToolBar / InitToolBar_ForFenLiu 常规定义与分流退回专用工具栏 前端 ToolBar 按钮渲染
HTTP 接口 WorkCheck_Init / WorkTrack_Init 审核组件数据,含异表单子线程轨迹 表单审核区
HTTP 接口 WorkCheck_Save 保存审核意见、立场、签名、时间 发送前/失焦保存
HTTP 接口 WorkCheck_GetNewUploadedAths 获取节点审核附件列表 附件展示与下载
HTTP 接口 OneWork_GetTabs 流程运转页签 OneWork.vue
HTTP 接口 SelectEmps_Init 部门人员树数据 PreplaceWoker.vue / ToNodes 选人
实体方法 GenerWorkFlow.DoSubFlowAddEmps 干流程实例上增加子线程人员 → Node_FHL_AddSubThread 合流/分流补人
实体方法 Dev2Interface.Node_FHL_AddSubThread 核心增线程逻辑:校验人员、定位分流节点、创建 GWF/GWL/Work 后端统一入口
实体方法 Dev2Interface.Flow_DeleteSubThread 删除子线程并写轨迹 终止/撤销统一入口
实体方法 Dev2Interface.Node_FHL_DoReject 合流点驳回子线程 合流人打回异表单分支
实体方法 Dev2Interface.Node_SendSubTread 单条子线程重发 退回后重办
实体方法 Dev2Interface.WorkOpt_GetToNodes 计算可达节点,插入异表单多选虚拟节点 分流/合流发送选人
实体方法 Dev2Interface.DB_GenerHLSubFlowDtl_YB 获取异表单合流点上的在途子线程 合流节点状态查询
数据表 WF_GenerWorkFlow.FID 子线程记录关联干流程 WorkID 主从实例关联
数据表 WF_GenerWorkerList.FID/IsPass 子线程待办;IsPass=-2 分流人观察态;IsPass=3 合流在途 待办状态机
数据表 ND{FlowNo}Track 记录 Forward / SubThreadForward / ForwardHL / DeleteSubThread 等 全链路审计
数据表 WF_SelectAccper 存储发送前预选的各节点接收人 异表单多分支人员预选

三、关键动作类型(ActionType)对照

动作值 名称 含义 前端展示
6 ForwardFL 分流前进 绿色「分流前进」
7 ForwardHL 合流前进 绿色「合流前进」
11 SubThreadForward 子线程前进 绿色「子线程前进」
23 DeleteSubThread 删除子线程 轨迹记录删除原因

四、异表单与同表单分流差异对照

对比项 异表单(RunModel=5) 同表单(RunModel=4)
表单物理表 各子线程节点独立 ND{NodeID} 共用流程主表 Flow.PTable
分流多路径 允许同时启动多个异表单子线程节点 仅允许一条同表单路径
节点选择 UI ToNodes.vue 复选框多选异表单 单选同表单节点
WorkID 规则 USSWorkIDRole:共享或按人独立 默认每人独立 WorkID
合流数据汇总 NodeSend_53_UnSameSheet_To_HeLiu;绑定相同表单时跳过重拷 NodeSend_53_SameSheet_To_HeLiu;明细/附件复制
合流查询 API DB_GenerHLSubFlowDtl_YB DB_GenerHLSubFlowDtl_TB
混发限制 不可与同表单混发 不可与异表单混发

五、典型业务场景串联

场景 1:多异表单并行分流

  1. 发起人填写主表单 → 提交至 分流节点
  2. 分流人发送 → 弹出 ToNodes 选择「可以分发启动的异表单」,勾选财务表、法务表、技术表
  3. 系统调用 NodeSend_24_UnSameSheet 同时创建三条 异表单子线程
  4. 各专业人员在各自异表单中并行审批 → 记录 SubThreadForward
  5. 各分支完成 → 合流节点 按 PassRate 判断是否激活干流程待办
  6. 合流人处理后 → 流程继续向下

场景 2:异表单子线程退回后分流人重发

  1. 某异表单分支处理人 退回到分流节点(可选「全部子线程退回」)
  2. 分流人进入 MyFLDealThread 专用页面
  3. 对退回分支点击 发送(可填写小纸条传达修改要求)
  4. 该异表单分支恢复运行 → 全部处理完成后干流程回到 运行态

场景 3:合流阶段补发与终止

  1. 合流人打开 ThreadDtl 发现遗漏人员 → 增加子线程 输入账号
  2. 某异表单分支异常 → 在 ThreadDtl 中 终止 该分支
  3. 系统重算合流通过率 → 满足条件则自动推进合流

场景 4:发送前预置异表单处理人

  1. 分流节点配置 PreplaceWokerEnable=2
  2. 分流人点击发送 → 自动弹出 PreplaceWoker 组织树
  3. 为各异表单分支预选处理人 → 确认后执行分流发送

六、代码索引(便于对照)

模块 关键文件
异表单分流发送核心 CCFlow/Components/BP.WF/WF/WorkNode.cs(NodeSend_24_UnSameSheet、NodeSend_53_UnSameSheet_To_HeLiu)
分流多选节点 CCFlow/Components/BP.WF/Dev2Interface.cs(WorkOpt_GetToNodes)
增删子线程 API CCFlow/Components/BP.WF/Dev2Interface.cs(Node_FHL_AddSubThread、Flow_DeleteSubThread)
分流人页面 API CCFlow/Components/BP.WF/HttpHandler/WF_MyFlow.cs(ThreadDtl_*)
子线程管理弹窗 Vue3/src/WF/WorkOpt/ThreadDtl.vue
分流目标选择 Vue3/src/WF/WorkOpt/ToNodes.vue
分流退回处理页 Vue3/src/WF/MyFLDealThread.vue
预置处理人 Vue3/src/WF/WorkOpt/PreplaceWoker.vue
退回联动 Vue3/src/WF/WorkOpt/ReturnWork.vue
审核组件 Vue3/src/WF/WorkOpt/WorkCheck.vue、WorkCheckParse.vue、WorkCheckParseTrack.vue、WorkCheckParseTrackTime.vue
流程轨迹 Vue3/src/WF/WorkOpt/OneWork.vue、OneWork/TimeBase.vue
节点设计配置 Vue3/src/WF/Admin/AttrNode/NodeExt.ts、BtnLab.ts
接收人规则 Vue3/src/WF/Admin/AttrNode/AccepterRole/GPE_AccepterRole.ts
枚举定义 CCFlow/Components/BP.WF/EnumLib.cs(RunModel、ThreadKillRole、DeliveryWay)

文档版本:依据当前工作区代码静态分析生成。

相关推荐
愚农搬码4 天前
Flowable工作流引擎如何适配国产数据库?以达梦数据库举例说明
工作流引擎
songgeb4 天前
mspec体验:基于SDD的轻量AI工作流
ai编程·工作流引擎
大龄码农有梦想4 天前
企业工作流系统如何设计用户、部门、角色、岗位、动态关系五类流程办理人?
工作流引擎·flowable·流程引擎·oa·工作流系统·选人规则·bpm平台
愚农搬码7 天前
工作流里的转办、委托和工作移交的业务语义与技术实现
工作流引擎
大龄码农有梦想7 天前
工作流中的子流程节点能否驳回到父流程?
工作流引擎·流程引擎·oa·bpm·子流程·驳回·退回
愚农搬码8 天前
工作流中的子流程节点能否驳回到父流程?
工作流引擎
愚农搬码8 天前
流程图上的回退线与运行时动态回退,应该选择哪一种?
工作流引擎
大龄码农有梦想8 天前
开源流程引擎 Camunda 如何实现任意节点跳转?
工作流引擎·流程引擎·camunda·oa·bpn·流程跳转·会签
愚农搬码11 天前
在开源流程引擎 Flowable 里如何实现任意节点跳转?
工作流引擎
Behavior16 天前
一条指令,让 Claude Code 每天定时帮你追热点:动态工作流Workflows从 0 到 1 全流程
claude·workflow·工作流引擎