Skip to content

流程引擎底座 详细设计文档 ​

文档版本:1.01 | 最近核对日期:2026-11-04

本文记录底座的页面与路由、接口契约、关键类与调用链、流程变量约定和异常/事务边界。业务规则见需求分析,架构与流程模型见概要设计。

装配与开关 ​

  • 全部后端组件通过 @ConditionalOnEnable 条件装配,warm-flow.enabled=true 时生效。
  • WarmFlowConfig 实现 SmartInitializingSingleton:Warm-Flow 初始化可能早于业务全局监听器实例化,全部单例就绪后补执行 FlowEngine.initGlobalListener,防止引擎永久持有空监听器。
  • LiteFlow 链定义在 resources/liteflow/:startProcessChain、completeTaskChain、taskOperationChain(task-chain.el.xml)、deleteInstanceChain(instance-chain.el.xml)。

页面与路由 ​

页面路由/文件功能
流程分类views/workflow/category/index.vue分类树维护、导出
流程定义views/workflow/processDefinition/index.vue定义列表(左侧分类树)、新增/修改/删除/复制/导入/导出/发布/取消发布/激活/挂起
流程设计器views/workflow/processDefinition/design.vue,固定路由 /workflow/design/index定义可视化编辑(CLASSICS 模型),从定义列表「修改流程/查看流程」进入;路由固定注册于 src/router/index.ts,不依赖菜单
流程实例views/workflow/processInstance/index.vue运行中/已完成实例、变量、当前办理人、作废/删除
SpEL 表达式views/workflow/spel/index.vue表达式维护与预览
我的待办views/workflow/task/taskWaiting.vue待办列表、办理入口
我的已办views/workflow/task/taskFinish.vue已办列表
我的发起views/workflow/task/myDocument.vue发起实例、取消申请
我的抄送views/workflow/task/taskCopyList.vue抄送记录
所有待办views/workflow/task/allTaskWaiting.vue全平台待办、修改办理人、催办

办理页组件复用:办理动作面板 components/Process/FlowActionPanel.vue、审批时间线 FlowTimeline.vue、流程图 flowChart.vue(入口 components/FlowChartEntry)、下一办理人选择 components/NextHandlerPicker(基于通用 UserSelect)。业务流程办理页按业务归属在 src/router/flowFormRoutes.ts 固定注册,选人规范见流程图编排规范·流程办理界面与选人。

接口契约 ​

后端路径前缀 /workflow;权限码以 @SaCheckPermission 与 SYS_MENU.PERMS 逐字一致为准。

任务 /workflow/task(FlwTaskController) ​

接口权限码说明
POST /startWorkFlow任务发起入口启动流程,返回实例与首个任务;入参 StartProcessBo(businessId、flowCode、variables、handler、bizExt)
POST /completeTask任务归属校验办理任务;CompleteTaskBo(任务 ID、办理意见、消息类型、办理人、变量、附件)
GET /pageByTaskWait、/pageByTaskFinish、/pageByTaskCopy—我的待办/已办/抄送分页
GET /pageByAllTaskWait、/pageByAllTaskFinishworkflow:task:list所有待办/已办分页
GET /getTask/{taskId}—任务详情
POST /getNextNodeList—下一节点列表(选人/预览)
POST /terminationTask—终止流程
POST /taskOperation/{taskOperation}任务归属校验运行时任务操作:delegateTask 委派、transferTask 转办、addSignature 加签、reductionSignature 减签
PUT /updateAssignee/{userId}workflow:task:edit修改办理人
POST /backProcess任务归属校验退回到指定节点
GET /getBackTaskNode/{taskId}/{nowNodeCode}—可退回节点列表
GET /currentTaskAllUser/{taskId}—当前节点候选办理人
POST /urgeTaskworkflow:task:edit催办

实例 /workflow/instance(FlwInstanceController) ​

接口权限码说明
GET /pageByRunning、/pageByFinishworkflow:instance:list运行中/已完成实例分页
GET /pageByCurrentworkflow:instance:currentList当前办理人相关实例
GET /getInfo/{businessId}workflow:instance:query按业务单据查实例详情
DELETE /deleteByBusinessIds/{businessIds}、/deleteByInstanceIds/{instanceIds}workflow:instance:remove删除实例(含历史)
DELETE /deleteHisByInstanceIds/{instanceIds}workflow:instance:remove仅删除历史任务
PUT /cancelProcessApply—发起人取消申请
PUT /active/{id}workflow:instance:active激活/挂起切换
POST /invalidworkflow:instance:invalid作废
GET /instanceVariable/{instanceId}、PUT /updateVariableworkflow:instance:variableQuery / workflow:instance:variable变量查询/更新
GET /flowHisTaskList/{businessId}—业务单据历史任务

定义 /workflow/definition(FlwDefinitionController)与分类 /workflow/category(FlwCategoryController) ​

接口权限码
GET /definition/list、/definition/unPublishList、GET /definition/{id}、GET /definition/xmlString/{id}workflow:definition:list / workflow:definition:query
POST /definition、PUT /definitionworkflow:definition:add / workflow:definition:edit
PUT /definition/publish/{id}、PUT /definition/unPublish/{id}workflow:definition:publish
DELETE /definition/{ids}workflow:definition:remove
POST /definition/copy/{id}workflow:definition:copy
POST /definition/importDef、POST /definition/exportDef/{id}workflow:definition:import / workflow:definition:export
PUT /definition/active/{id}workflow:definition:active(激活/挂起)
GET /category/list、GET /category/{categoryId}、GET /category/categoryTreeworkflow:category:list / workflow:category:query
POST /category、PUT /categoryworkflow:category:add / workflow:category:edit
DELETE /category/{categoryId}workflow:category:remove
POST /category/exportworkflow:category:export

SpEL /workflow/spel(FlwSpelController) ​

接口权限码
GET /spel/list、GET /spel/{id}workflow:spel:list / workflow:spel:query
POST /spel、PUT /spel、DELETE /spel/{ids}workflow:spel:add / workflow:spel:edit / workflow:spel:remove

业务契约 com.bokun.workflow.api ​

WorkflowService 门面:startWorkFlow(StartProcessDTO)、completeTask(CompleteTaskDTO)、startCompleteTask(StartProcessDTO)(启动并办理首节点,类级事务)、deleteInstance(businessIds)、getBusinessStatus(businessId)、getBusinessStatusByTaskId(taskId)、setVariable/instanceVariable、getInstanceIdByBusinessId、getFlowVersionByBusinessId(businessId, flowCode)(实例未建时回查当前发布版本)、listCurrentTaskIds(businessIds, userId)、currentTaskAssigneeIds(businessIds)、getTaskNodeCode(taskId)。

关键类与调用链 ​

类职责
service.impl.WorkflowServiceImpl契约门面实现,委托 IFlwTaskService/IFlwInstanceService
service.impl.FlwTaskServiceImpl任务办理、退回、任务操作、启动;驱动 LiteFlow 链
`liteflow.startcomplete
listener.WorkflowGlobalListenerWarm-Flow 全局监听:start 解析节点扩展、assignment 解析办理人、finish 发布事件与消息收敛
listener.WorkflowSideEffectListener抄送落库、待办消息、结果消息的副作用消费
listener.WorkflowTaskStartHandler任务开始扩展点接口,业务可注册实现
handler.FlowProcessEventHandler引擎回调 → 发布 ProcessEvent/ProcessTaskEvent/ProcessDeleteEvent
handler.WorkflowPermissionHandler办理权限判定(任务归属、流程状态、豁免变量)
handler.WorkflowTaskCompletionEventPublisher任务完成事件发布
service.impl.FlwChartExtServiceImplWarm-Flow ChartExtService:流程图节点提示合并历史任务与运行任务
rule.SpelRuleComponent / service.impl.FlwSpelServiceImpl网关条件 SpEL 执行与表达式维护
service.impl.FlwNodeExtServiceImpl节点 ext 扩展配置解析(按钮权限、抄送、变量)

办理主链路:FlwTaskController.completeTask → FlwTaskServiceImpl → completeTaskChain(准备/执行/自动续办)→ 引擎任务跳转 → WorkflowGlobalListener.finish → FlowProcessEventHandler 发布 ProcessEvent/ProcessTaskEvent → 业务监听器;同时 WorkflowSideEffectListener 消费 WorkflowCopyEvent、WorkflowTaskMessageEvent、WorkflowResultMessageEvent。

流程变量约定(FlowConstant) ​

变量用途
businessId、businessCode、initiator、initiatorDeptId业务关联与发起人上下文
nextHandlerId动态下一办理人(节点权限表达式 ${nextHandlerId})
PASS:<节点码> / BACK:<节点码>办理/退回时指定的该节点办理人;正向消费一次并从实例变量与引擎侧清理,驳回指定人保留供重复驳回
flowCopyList、messageType、messageNotice、submit、autoPass抄送列表、消息类型(1 站内信/2 邮箱/3 短信)、通知内容、申请人提交标识、自动续办
ignore、ignoreDepute、ignoreCooperate系统后台办理的权限/委派/会签票签校验豁免
__workflowSourceNodeCode、__workflowSourceNodeName任务事件内部元数据:来源(刚办理)节点,避免业务监听器把当前办理信息误判为下一节点

一次性变量在 finish 消费后统一从引擎移除,防止残留影响后续节点办理。

异常与事务 ​

  • 办理入口统一校验:任务存在性、当前办理人归属、流程状态(非终态)、节点类型约束(如加签/减签限会签或票签),不满足返回业务异常,不静默降级。
  • WorkflowServiceImpl.startCompleteTask 类级 @Transactional,保证"启动 + 首节点办理"原子性;删除实例链先发布 ProcessDeleteEvent 再执行删除,业务模块在自身事务内清理关联数据。
  • WarmFlowConfig 补注册全局监听器属于启动期自愈,不依赖运行时重试。
  • 后台自动办理无登录用户上下文,通过 ignore 显式豁免权限;仅限系统内调用,接口侧仍按任务归属校验用户发起的办理。

流程定义资源 ​

各业务流程 JSON 位于 digital-construction-modules/digital-construction-workflow/src/main/resources/flow/<业务域>/(如 bidding、planning、survey、engineering-change、cost-unit、investment、operation-dock、quality、sqe、czw、engineering-procedure),通过 importDef 导入发布。编排、锚点与版本规则遵循流程图编排规范,双环境同步步骤见表结构与流程定义双环境同步。