Appearance
规范 06 · 统一门面(JeeflowFacade)
面向"接口即 POST + JSON body"的框架风格:集成方只实现一个转发 controller, 把 body JSON 转成 Map 传入门面,所有流程能力通过
action路由。 设计动机(为什么需要门面、与 boot2/boot3 端点的关系)见 设计原理 07 · 管理扩展与门面。
入口契约
text
Map<String,Object> flow(String action, Map<String,Object> args)action:boot2/boot3 端点路径的短名(见 action 清单)- 返回统一结构(对齐 mldong
CommonResult):code=0成功 /code!=0失败(msg 描述)
text
{ "code": 0, "msg": "操作成功", "data": { ... } }- 操作人(operator)约定:门面不感知登录态——
args.operator显式传入(demo 风格), 集成方可覆盖为自定义实现(如从 LoginUserHolder 注入)
action 清单
| 分组 | action | 说明 |
|---|---|---|
| 流程定义 | processDefine/page | 分页查询(别名 t) |
processDefine/detail | 详情(含 jsonObject 流程图) | |
processDefine/startAndExecute | 发起并自动完成申请节点 | |
processDefine/deploy | 部署:JSON → ModelParser 校验 → 版本管理写入 define | |
processDefine/redeploy | 按 ID 覆盖更新定义内容 | |
processDefine/remove | 删除定义 | |
processDefine/upAndDown | 启用/停用(state 0/1) | |
| 流程实例 | processInstance/page | 分页(t.operator 过滤) |
processInstance/detail | 实例详情 + 任务列表 | |
processInstance/startAndExecute | 同 processDefine/startAndExecute | |
processInstance/withdraw | 撤回(级联废弃 doing 任务) | |
| 流程任务 | processTask/todoList | 我的待办分页 |
processTask/doneList | 我的已办分页 | |
processTask/execute | 处理待办(submitType 全枚举分发,对齐 boot3 execute) | |
| 流程设计 | processDesign/page | 设计稿分页 |
processDesign/detail | 设计稿详情(含历史列表) | |
processDesign/save | 保存设计(写 design + 追加 his 快照) | |
processDesign/remove | 删除设计稿 | |
processDesign/deploy | 发布设计稿 → 生成/升级 define(同 processDefine/deploy 语义) | |
| 委托代理 | processSurrogate/page | 委托分页 |
processSurrogate/save | 新增/更新委托 | |
processSurrogate/remove | 删除委托 | |
| 流程定义(视图) | processDefine/getLastByName | 按编码查最新版本定义 |
| 流程实例(视图) | processInstance/highLight | 流程高亮:活跃/历史节点 + 路径补全(对齐 boot3 HighLightVO) |
processInstance/approvalRecord | 审批记录:实例全部历史任务 | |
processInstance/getAssigneeTextData | 参与人回显文本(label:任务显示名:参与者) | |
processInstance/createCCInstance | 创建抄送(actorIds 数组) | |
processInstance/updateCCStatus | 更新抄送已读状态 | |
processInstance/ccList | 我的抄送分页(依赖核心分页 SPI pageCcInstances) | |
| 流程任务(视图) | processTask/detail | 任务详情(参与者 + executable + taskModel) |
processTask/jumpAbleTaskNameList | 可跳转节点(已办非会签节点去重) | |
processTask/candidatePage | 执行候选人:模型候选配置 → 用户信息;无候选 → 用户搜索(IUserSearchProvider) | |
processTask/surrogate | 单任务委托(转交他人,addTaskActor) | |
processTask/addCandidate | 加签(addTaskActor) | |
processTask/latest | 实例最新进行中任务 |
deploy 语义
- 入参 JSON → ModelParser 解析出
name/displayName/type - 按 name 查最新 define:存在 →
version+1插新记录;不存在 → 新记录(version 从 0 起) - 设计稿发布时同时更新 design 的
is_deployed=1
execute 分发(对齐 boot3 ProcessTaskController.execute)
| submitType | 引擎方法 |
|---|---|
| 0 APPLY / 1 AGREE / 20 会签拒绝 | executeProcessTask |
| 2 REJECT | executeAndJumpToEnd |
| 3 ROLLBACK | executeAndJumpTask(target=null) |
| 4 JUMP | executeAndJumpTask(target=args.taskName) |
| 5 重新提交 | 业务方语义(发起人重新发起,门面透传) |
| 6 ROLLBACK_TO_OPERATOR | executeAndJumpToFirstTaskNode |
IUserSearchProvider(可选 SPI)
processTask/candidatePage 的"无候选 → 用户分页搜索"依赖集成方用户系统,通过可选 SPI 注入:
text
interface IUserSearchProvider:
page(query): PageResult<Map> # 用户分页搜索(query 透传 pageNum/pageSize/搜索条件)
findById(userId): Map # 单用户信息(候选映射用)- 未注入时:模型候选命中(
candidateUsers等配置)仍可用UserProvider.getUser逐个映射; 用户分页搜索返回明确错误 - 各语言注入位置:Java 构造器;Go
facade.New参数/字段;Python/Node 构造参数