驰骋CCFlow-同表单分合流-功能列表

CCFlow 同表单分流需求列表

依据代码整理:CCFlow/Components/BP.WFVue3/src/WF/WorkOptVue3/src/WF/Admin/AttrNodeVue3/src/WF/MyFLDealThread.vueVue3/src/WF/ToolBar.vue
说明:本文档聚焦 同表单子线程(RunModel=4 / SubThreadSameWorkID) 及其与 分流(FL)/分合流(FHL)/合流(HL) 节点的协同能力;异表单分流(RunModel=5)仅在对比或共用机制处提及。


一、总体架构

同表单分流采用「干流程(FID=0)+ 子线程(FID=干流程WorkID)」双层实例结构,子线程与干流程 共用同一张物理表单表(Flow.PTable),通过 FID 字段关联。

层级节点类型(RunModel)数据特征典型作用
干流程0 线形 / 2 分流 / 3 分合流 / 1 合流WorkID 为主键,FID=0发起、分流、合流汇总
子线程4 同表单独立 WorkIDFID=干流程WorkID并行处理同一表单的不同人员任务

典型拓扑:普通节点 → 分流/分合流节点 → 同表单子线程节点(可多个处理人)→ 合流节点 → 后续节点

核心后端入口:WorkNode.NodeSend_24_SameSheet(分流到同表单)、WorkNode.NodeSend_53_SameSheet_To_HeLiu(子线程到合流)。


二、功能需求明细表

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

功能类别功能名称功能说明需求场景概述
节点类型同表单子线程节点RunModel=4SubThreadSameWorkID),节点工作类型为 SubThreadWork;与异表单(5)区分多人并行处理同一份主表数据,如多部门会签、多专业并行审批
节点类型分流节点RunModel=2(FL),向下可连接同表单子线程将干流程拆分为多条并行子线程
节点类型分合流节点RunModel=3(FHL),兼具分流与合流能力一个节点完成分流下发与合流汇总,简化流程图
节点类型合流节点RunModel=1(HL),等待子线程按通过率到达后激活干流程待办汇总各子线程结果后继续主流程
流程约束分流仅连一条同表单路径分流节点若仅有一个后续节点且为同表单,调用 NodeSend_24_SameSheet标准同表单分流场景
流程约束禁止多同表单并行分支分流同时启动多个同表单子线程节点时报错 workflow_error_5避免同一分流点产生多套同表单分支
流程约束禁止同异表单混发分流同时启动同表单与异表单子线程时报错 workflow_error_4保证分支类型一致
流程约束普通节点不可直连子线程线形节点直接连接同表单/异表单子线程节点报错 workflow_error_3子线程必须由分流/分合流节点发起
流程约束合流节点不可下连子线程合流节点下连接子线程节点报错 workflow_error_6子线程只能在合流之前运行
表单权限同表单主键规则同表单子线程(及按接收人生成 WorkID 的异表单)表单权限 WhoIsPK 必须为 WorkID(OID),不能为 FID保证每个子线程独立读写自己的表单实例
表单校验物理表一致性FlowCheckError.CheckMode_SpecTable 强制同表单子线程 PTable 与流程主表一致设计期自动修复/告警,防止表单映射错误
完成通过率PassRate合流节点 PassRate(默认 100),按「已到达合流子线程数 / 总子线程数 × 100」判断是否激活干流程待办允许部分子线程完成即可合流(如 3 人中 2 人完成)
子线程删除方式ThreadKillRole合流节点:0 不能删除(须全部完成)、1 手工删除、2 自动删除未完成子线程合流前仍有子线程未完成时的处理策略(WorkNodePlus.DealHeLiuState
增加子线程ThreadIsCanAdd分流/分合流节点:当前节点已发出子线程后,是否允许追加子线程;要求后续仅一条子线程路径流程运行中补发遗漏处理人
增加子线程(合流)ThreadIsCanAddOfHL合流节点是否允许增加子线程(ThreadDtl.vueFID==0 时判断)合流阶段补录子线程
删除子线程ThreadIsCanDel分流/分合流节点:子线程退回后,是否允许删除/撤销整体发送部分子线程退回后由分流人清理
移交子线程ThreadIsCanShift是否允许移交已发出的子线程(配置项,默认关闭)子线程处理人变更
退回联动IsKillEtcThread子线程节点退回规则:0 不删除其它子线程、1 删除其它子线程、2 由退回人决定(ReturnWork.vue 复选框)一个子线程退回分流点时,其余子线程是否一并取消
按钮权限子线程按钮ThreadEnable 控制工具栏「子线程」按钮;ThreadLab 自定义标签分流人/合流人查看子线程明细入口
按钮权限预置处理人PreplaceWokerEnable:发送前/单独维护子线程接收人(PreplaceWoker.vue 组织树选人)分流前预先指定各子线程处理人

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

功能类别功能名称功能说明需求场景概述
接收人按明细表确定子线程接收人ByDtlAsSubThreadEmps:读取分流节点表单明细表,须含 UserNoDeliveryParas 指定字段;仅子线程节点可用报销明细每行指定一个审批人,自动按行发起子线程
接收人按 SQL 确定接收人与数据BySQLAsSubThreadEmpsAndData:执行节点 SQL,结果集同时提供人员与行数据;按索引复制到各子线程主表外部数据源驱动多人并行,且每人携带不同业务字段
接收人按绑定部门(子线程)BySetDeptAsSubthread:绑定部门中一人完成即该部门子线程结束;返回 GroupMark按部门维度并行,部门内任一人员处理即可
接收人按绑定人员ByBindEmp 等常规规则固定人员列表发起子线程
接收人子线程通用数据源SubThreadByGenerDBSrc 等扩展方式与流程数据源组件联动
校验非子线程误配明细表/SQL/部门子线程方式配置在非子线程节点时抛异常设计期防止接收人规则与节点类型不匹配
校验明细表无数据明细表方式找不到 UserNo 字段或无数据时报错并提示检查分流节点明细表发起前数据完整性校验

(三)运行期 — 分流下发(干流程 → 同表单子线程)

功能类别功能名称功能说明需求场景概述
分流发送同表单分流核心逻辑NodeSend_24_SameSheet:由分流/分合流节点向同表单子线程节点发送一次发送产生 N 条子线程待办
数据复制主表数据复制复制干流程 rptGe、当前 HisWork 到各子线程 Work;设置 mywk.FID = 干流程WorkIDRec = 接收人各处理人看到相同基础表单内容
数据复制明细表数据复制从分流节点明细表(MapDtls)复制到子线程;支持多明细表子线程继承分流节点填写的明细
数据复制SQL/明细行级复制BySQLAsSubThreadEmpsAndData / ByDtlAsSubThreadEmps 时按 idxDataRow 复制到对应子线程主表每人处理不同明细行数据
数据复制附件复制SendToSameSheet_CopyData 复制 FrmAttachmentDB,重映射 FrmIDRefPKVal;单附件/多附件主键规则分别处理子线程可查看分流节点上传的附件
数据复制签名/电子签章复制复制 FrmEleDB(非图片类),重映射节点表单 ID继承分流节点表单签章
实例标识子线程 WorkID 生成默认 DBAccess.GenerOID("WorkID") 或 GUID 模式;每个接收人一条子线程实例独立跟踪每条子线程
实例标识分合流再次分流复用若曾走过分合流,按「同节点+同FID+同人员」查找历史 WorkID 并复用数据子线程退回后再次下发不丢历史
分组批次GroupMark 分组ItIsHaveSubThreadGroupMark=true 时,同 GroupMark 仅生成一个 WorkID,多人共享子线程实例按部门/批次分组,组内一人完成即可
分组批次重复人员去重启用 GroupMark 时对 EmpNo+GroupMark 去重,删除重复 GenerWorkerList避免同组重复待办
状态维护ThreadCount 归零分流时 HisGenerWorkFlow.SetPara("ThreadCount", 0)为合流通过率计算准备计数
状态维护节点名称追加分流时 NodeName 追加子线程节点名干流程列表展示当前所在分支
轨迹记录分流前进记录 ActionType.ForwardFL(分流前进)轨迹图/时间轴标识分流动作
异常防护同表单重复发送分流点下同表单已发送后再次发送会检测并报错(#region 如果是分流点下同表单发送失败再次发送就出现错误防止重复拆分子线程
发送失败发送失败回滚分流发送异常时回滚机制,避免干流程与子线程状态不一致保证数据一致性

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

功能类别功能名称功能说明需求场景概述
待办打开子线程独立待办子线程处理人待办 WorkID 为子线程 ID,FID 指向干流程;MyFlowTree 等同表单节点特殊处理处理人仅看到自己的子任务
表单访问查看子线程表单ThreadDtl.OpenFrm / MyFLDealThread.OpenFrm 打开 MyView,传入 WorkID/FID/FK_Node分流人从管理界面查看任意子线程表单
子线程发送子线程向下运行RunModel.SubThreadSameWorkID 节点向下发送,动作类型 ActionType.SubThreadForward子线程内各节点正常审批
子线程发送子线程到合流NodeSend_53_SameSheet_To_HeLiu:子线程完成后向合流节点汇聚并行分支汇入主流程
数据汇总合流主表数据合并将子线程报表数据写回合流点干流程主表(排除系统字段)合流后主表单体现各子线程填写结果
数据汇总合流明细汇总GenerHieLiuHuiZhongDtlData_2013 生成合流汇总从表数据多子线程明细合并展示
数据汇总同表单绑定不重复拷贝合流节点与子线程绑定相同 NodeFrmIDisCopyData=false避免重复覆盖已合并数据
通过率合流到达计数记录 ThreadCount,计算 passRate = ThreadCount / 总子线程数 × 100判断合流条件
通过率达到通过率激活待办passRate >= PassRate 时,合流节点 GenerWorkerList.IsPass 置 0,干流程处理人可见待办满足比例后推进主流程
通过率未达通过率隐藏待办未达标时合流节点 IsPass=3(在途不可见状态)等待更多子线程完成
轨迹记录子线程前进ActionType.SubThreadForward,前端 WorkCheckParseTrack/TimeBase 绿色展示时间轴区分子线程与普通过件
轨迹记录合流前进ActionType.ForwardHL标识合流节点激活
提示信息到达合流提示提示「流程已运行到合流节点」「您是第 N 个到达的处理人」处理人了解合流进度

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

功能类别功能名称功能说明需求场景概述
子线程退回退回到分流节点子线程节点可退回到上游分流/分合流节点;WFState=ReturnSta子线程处理人认为需发起人修改后重办
退回规则全部子线程退回选项IsKillEtcThread=1 时退回并删除其它子线程;ReturnWork.vue 展示「全部子线程退回」复选框一人退回即终止其余并行任务
退回规则由退回人决定IsKillEtcThread=2 时退回人勾选是否删除其它子线程灵活处理部分退回
分流人界面子线程退回处理页MyFLDealThread.vue:分流人打开后展示退回子线程、可发起节点、运行中子线程分流人集中处理退回后的子线程
分流人界面退回子线程列表展示退回节点、退回人、日期、退回原因;支持「发送」「终止」逐条处理已退回子线程
分流人界面可发起子线程节点WF_ThreadNode 列表,展示可追加子线程的节点(ThreadIsCanAdd=1 且非同表单多路径)补发新的子线程
分流人界面运行中子线程GenerWorkFlow 卡片展示标题、待办人、发起时间;嵌套 GenerWorkerList 节点/人员/状态总览所有在途子线程
分流人工具栏分流退回专用工具栏Flow_IsCanToFLTread 为真时加载 InitToolBar_ForFenLiu:查看表单、撤销整体发送、增加子线程、轨迹子线程退回后分流人操作集合
单条重发发送退回子线程ThreadDtl_SendSubThreadNode_SendSubTread:恢复子线程为运行态,更新待办,支持小纸条 ScripMsg分流人修改后重新下发该子线程
单条重发末条子线程重发联动若所有退回子线程已处理,自动将干流程置为运行态并跳转 MyView全部分支恢复后回到主流程
子线程退回ThreadDtl 单条退回ThreadDtl.ReturnThread 打开 ReturnWorkFromPage=ThreadDtl,预选退回目标分流人从子线程管理界面代为退回
撤销退回撤销子线程退回UnReturnThread 调用 MyView_UnReturn误退回后恢复
分流人判断是否分流退回态Flow_IsCanToFLTreadFID!=0WFState=ReturnSta 且当前在 FL/FHL 节点决定是否进入分流处理模式

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

功能类别功能名称功能说明需求场景概述
子线程管理弹窗ThreadDtl 组件ToolBar 点击「子线程」打开 ThreadDtl 弹窗(宽 70%);合流节点干流程人查看查看所有子线程运行明细
子线程列表按 GenerWorkFlow 分组每张卡片对应一条子线程实例:标题、待办人员、发起时间一览子线程概况
子线程列表节点处理明细表列:节点、处理人、状态(已完成/未读/已读未处理)、应完成日期、实际完成日期掌握子线程内部进度
子线程列表空状态无子线程时展示「当前暂时没有子线程」占位合流节点尚未下发或已全部结束
增加子线程合流节点增加ThreadIsCanAddOfHLFID==0 时显示「增加子线程」;输入人员账号(逗号分隔)合流阶段补录漏发人员
增加子线程分流节点增加ThreadIsCanAdd 且后续仅一条子线程路径;DoSubFlowAddEmpsNode_FHL_AddSubThread分流后补发新人员
增加子线程新增从下一节点执行提示「新增加的人员,从分流节点的下一个节点开始执行」补发人员不重复走子线程入口
增加子线程人员校验校验账号存在性,支持中英文逗号/分号分隔防止无效人员
增加子线程数据复制新建 GenerWorkFlowGenerWorkerListwkSub.Copy(wk) 复制干流程表单新子线程继承当前主表数据
终止子线程手工终止ThreadDtl_DelSubThreadFlow_DeleteSubThreadDoDeleteWorkFlowByReal分流人终止异常/多余子线程
终止子线程终止权限ThreadKillRole=1(手工删除)时 ThreadDtl 显示「终止」链接按节点配置控制是否可删
终止子线程终止后合流重算删除后按剩余子线程重算合流 PassRate,可能自动激活合流待办或恢复分流待办终止子线程后自动调整主流程状态
终止子线程全部终止后恢复分流若所有子线程已删除,恢复分流节点处理人待办并跳转 MyFlow所有分支取消后回到分流人
撤销整体发送UnSendAllThread删除 FID 下全部子线程,分流节点待办恢复,WFState=Running,记录 DeleteSubThread 轨迹分流人整体收回所有子线程
撤销整体发送权限控制ThreadIsCanDel=true 且当前用户为分流发送人防止非发起人误操作
单条删除KillSubThread分流节点删除单条已退回子线程(WF_MyFlow清理退回后不再需要的子线程
轨迹记录删除子线程ActionType.DeleteSubThread,记录删除原因(手工删除/自动删除/分流点手工删除等)审计子线程被终止的原因

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

功能类别功能名称功能说明需求场景概述
撤销发送合流节点撤销撤销前删除 FID 下所有子线程实例(Flow_DeleteSubThread合流后发现异常需回到分流
撤销发送分合流撤销DoUnSendInFeiLiuHeiliu:恢复分流节点待办,删除合流及子线程待办分合流节点专用撤销
合流前检查未完成子线程阻断DealHeLiuStateThreadKillRole=None 时存在未完成子线程则禁止合流节点向下发送,并列出人员与节点强制全部完成再推进
合流前检查手工删除提示ThreadKillRole=ByHand 时提示「请通知处理完成或强制删除子流程」允许人工干预未完成分支
合流前检查自动删除ThreadKillRole=ByAuto 时自动 Flow_DeleteSubThread 删除未完成子线程后继续超时或不再等待的场景
撤销范围SpanSubTheadNodes递归计算合流点与上游分流点之间所有子线程节点 ID,用于统计与撤销精确定义子线程节点范围

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

功能类别功能名称功能说明需求场景概述
流程轨迹OneWork 多页签OneWork_GetTabs 返回轨迹图(Truck)、时间轴(TimeBase)、时间表(Table)查看整单(含子线程)运转情况
时间轴子线程待办展示TimeBase.vue:分流/合流/分合流节点下,按 gwl.FID === WorkID 过滤展示子线程待办干流程处理人看到各子线程当前处理人
时间轴分流前进着色ActionType.ForwardFL 绿色标识区分分流与普通发送
时间轴子线程前进着色ActionType.SubThreadForward 绿色标识区分子线程内部流转
时间轴合流前进着色ActionType.ForwardHL 绿色标识标识合流动作
轨迹图分流节点到达判断Track.vueForwardFL 做特殊到达判断流程图正确展示分流状态
审核组件干/子 WorkID 切换WorkCheck.vue 使用 RealWorkID || WorkID 加载审核数据子线程处理人审核自己的节点
审核轨迹普通/轨迹/时间模式WorkCheckParse / WorkCheckParseTrack / WorkCheckParseTrackTime 三套展现按节点审核组件配置展示
审核轨迹分流/子线程动作标签分别展示「分流前进」「子线程前进」「合流前进」审核轨迹中读懂分支动作
审核轨迹待办状态展示「处理中」「未开始」等中间态当前节点尚未完成时

(九)运行期 — 催办、预置处理人与辅助能力

功能类别功能名称功能说明需求场景概述
催办子流程催办Flow_DoPress(workID, msg, isPressSubFlow=true) 支持催办子线程待办分流人催促子线程处理人
预置处理人组织树选人PreplaceWoker.vue 调用 SelectEmps_Init 按部门懒加载人员树发送前指定各子线程接收人
预置处理人发送前强制打开PreplaceWokerEnable=2 发送前自动弹出预置界面确保分流前人员已确定
待办过滤同表单待办识别GL_MyPressWork 等列表对 RunModel=4/5FID!=0 做特殊处理待办列表正确显示子线程任务
合流查询合流点子线程查询DB_GenerHLSubFlowDtl_TB 获取同表单合流点上的子线程 GenerWorkerList合流节点展示各分支状态
权限轨迹查看权限Flow_IsCanViewTruck 对子线程节点类型直接返回 true子线程参与人可查看轨迹
退回初始化ThreadDtl 专用退回ReturnWorkFromPage=ThreadDtl 时跳过后端 Return_Init,直接使用传入节点与处理人简化分流人代退回操作

(十)后端 API 与数据实体

功能类别功能名称功能说明需求场景概述
HTTP 接口ThreadDtl_InitWF_MyFlow:加载节点信息、可发起子线程节点、退回子线程、GenerWorkFlow/GenerWorkerListMyFLDealThread 页面初始化
HTTP 接口ThreadDtl_SendSubThread发送单条退回子线程分流人重发
HTTP 接口ThreadDtl_DelSubThread删除/终止子线程,含合流通过率联动子线程管理终止
HTTP 接口ThreadDtl_DelSubThreadWF_WorkOpt:合流节点弹窗内删除子线程ThreadDtl.vue 终止
HTTP 接口Return_DoReturn支持 IsKillEtcThread 参数子线程退回时联动删除其它分支
HTTP 接口MyView_UnReturn撤销子线程退回恢复误操作
HTTP 接口UnSendAllTread撤销整体发送分流人收回全部分支
HTTP 接口InitToolBar / InitToolBar_ForFenLiu常规定义与分流退回专用工具栏前端 ToolBar 按钮渲染
HTTP 接口WorkCheck_Init / WorkTrack_Init审核组件数据,含子线程轨迹表单审核区
HTTP 接口OneWork_GetTabs流程运转页签OneWork.vue
实体方法GenerWorkFlow.DoSubFlowAddEmps干流程实例上增加子线程人员合流/分流补人
实体方法Dev2Interface.Node_FHL_AddSubThread核心增线程逻辑后端统一入口
实体方法Dev2Interface.Flow_DeleteSubThread删除子线程并写轨迹终止/撤销统一入口
实体方法Dev2Interface.Node_FHL_DoReject合流点驳回子线程合流人打回分支
实体方法Dev2Interface.Node_SendSubTread单条子线程重发退回后重办
数据表WF_GenerWorkFlow.FID子线程记录关联干流程 WorkID主从实例关联
数据表WF_GenerWorkerList.FID/IsPass子线程待办;IsPass=-2 表示分流人观察态;IsPass=3 合流在途待办状态机
数据表ND{FlowNo}Track记录 ForwardFL / SubThreadForward / ForwardHL / DeleteSubThread 等全链路审计

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

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

四、典型业务场景串联

场景 1:标准同表单分流会签

  1. 发起人填写表单 → 提交至 分流节点
  2. 分流人发送 → 系统按接收人规则创建 N 条 同表单子线程(复制主表/明细/附件)
  3. 各处理人并行审批 → 子线程内记录 SubThreadForward
  4. 子线程完成 → 合流节点PassRate 判断是否激活干流程待办
  5. 合流人处理后 → 流程继续向下

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

  1. 某子线程处理人 退回到分流节点(可选「全部子线程退回」)
  2. 分流人进入 MyFLDealThread 或专用工具栏模式
  3. 修改表单后对退回子线程点击 发送(可填写小纸条)
  4. 子线程恢复运行 → 全部处理完成后干流程回到 运行态

场景 3:运行中补发与终止

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

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

模块关键文件
分流发送核心CCFlow/Components/BP.WF/WF/WorkNode.csNodeSend_24_SameSheetNodeSend_53_SameSheet_To_HeLiu
合流状态检查CCFlow/Components/BP.WF/WF/WorkNodePlus.csDealHeLiuState
增删子线程 APICCFlow/Components/BP.WF/Dev2Interface.csNode_FHL_AddSubThreadFlow_DeleteSubThread
分流人页面 APICCFlow/Components/BP.WF/HttpHandler/WF_MyFlow.csThreadDtl_*UnSendAllTread
子线程管理弹窗Vue3/src/WF/WorkOpt/ThreadDtl.vue
分流退回处理页Vue3/src/WF/MyFLDealThread.vue
退回联动Vue3/src/WF/WorkOpt/ReturnWork.vue
节点设计配置Vue3/src/WF/Admin/AttrNode/NodeExt.tsBtnLab.ts
时间轴/轨迹Vue3/src/WF/WorkOpt/OneWork/TimeBase.vueWorkCheckParseTrack.vue
枚举定义CCFlow/Components/BP.WF/EnumLib.csRunModelThreadKillRoleDeliveryWay

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驰骋低代码、工作流、表单引擎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值