流程中心运行时(FlowCenterRunTimeController)¶
流程中心(FlowCenter)运行时接口:发起菜单(含常用/置顶维护)、待办/经办/抄送的导航与列表数据、待办全部已读。是前台「流程中心」页面渲染与交互的核心控制器。
- 接口类型:REST 资源(
@RestController继承AbstractRuntimeController,类级produces = APPLICATION_JSON_VALUE) - 基址:
${myapps.context-path.runtime:}/api/runtime - Tag:流程中心运行时模块
公共说明¶
- 鉴权(据源码):类级基址
/api/runtime,所有端点位于/api/runtime/**,在RestSecurityHandlerInterceptor覆盖范围内,且不在豁免名单(豁免仅覆盖/api/runtime/login.*、/api/runtime/dingding/authlogin、/api/runtime/synchronization.*等,详见 login.md「公共说明 · 鉴权」)。拦截器走Security.getUserIdFromToken(request),未取到再尝试Security.getDebugUserIdFromToken(request),两者皆无则拒绝。故需 accessToken(或 debugToken),可通过 Cookie / 请求头 / query 参数任一方式传递。控制器内getUser()必须能取到非空WebUser,否则在DesUtil.decryptTextByUserId(..., getUser().getId())时即抛 NPE。 - 路径变量
{applicationId}:当端点路径含此变量时为必填,经 DES 加密(按当前执行用户密钥),服务端在方法入口处DesUtil.decryptTextByUserId(applicationId, getUser().getId())解密。例外:#2getPendingNavs、#3getProcessedNavs、#4getCarboncopyNavs、#6allRead不含{applicationId}路径变量;其中 #2/#3/#4 的applicationId通过 query 参数(required=false)传入,#6 由服务端按当前用户的企业域遍历所有应用。 - 响应结构:统一
Resource(见 ../index.md「统一响应结构」),字段为errcode/errmsg/data/errors。Resource.data的类型见各端点说明。 - 列表数据加密回写:#5
getPendings、#7getProcesseds、#8getCarboncopy在返回前会遍历data.datas列表,对每行docId(支持xxx--sub父子格式)按当前用户密钥重新 DES 加密后回写。 - HTTP 状态码:所有端点类级标注
@ResponseStatus(HttpStatus.OK),成功默认 200。AbstractRuntimeController的全局异常处理覆盖RuntimeException/Exception(500)、ResourceNotFoundException(404)、MethodArgumentTypeMismatchException(40035)、PathNotFoundException(406)、OBPMValidateException(500)。错误码表见 ../index.md。
1. 获取发起菜单¶
获取当前用户在指定应用下的发起菜单(可按常用、移动端等条件过滤)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/flowcenters/startmenus(完整:{runtime-context}/api/runtime/{applicationId}/flowcenters/startmenus) - 鉴权:是(需 accessToken,据源码)
- Tag:流程中心运行时模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id(DES 加密密文) |
| isUsual | query | boolean | 否 | 是否常用 |
| isUsualList | query | boolean | 否 | 是否常用的添加列表 |
| isMobile | query | boolean | 否 | 是否移动端 |
请求示例¶
GET /api/runtime/__APPID__/flowcenters/startmenus?isUsual=true&isMobile=false HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:统一 Resource(见 ../index.md「统一响应结构」)。
data:List<StartMenuNode>,发起菜单节点列表(已按用户权限过滤)。
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": [
{ "id": "__MENUID__", "name": "请假申请", "applicationId": "__APPID__" }
],
"errors": null
}
2. 获取待办导航¶
获取当前用户的待办分类导航(按应用/流程等维度统计)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/flowcenters/navs/pendings(完整:{runtime-context}/api/runtime/flowcenters/navs/pendings) - 鉴权:是(需 accessToken,据源码)
- Tag:流程中心运行时模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | query | string | 否 | 应用Id(DES 加密密文,按当前用户密钥解密) |
请求示例¶
GET /api/runtime/flowcenters/navs/pendings?applicationId=__APPID__ HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:统一 Resource。
data:List<Map<String, Object>>,待办导航分组列表(每项含分组名、计数等,由服务层 FlowCenterRumTimeService.getPendingNavs 返回)。
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": [
{ "applicationId": "__APPID__", "applicationName": "OA", "count": 5 }
],
"errors": null
}
3. 获取经办导航¶
获取当前用户的经办(已处理)分类导航。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/flowcenters/navs/processeds(完整:{runtime-context}/api/runtime/flowcenters/navs/processeds) - 鉴权:是(需 accessToken,据源码)
- Tag:流程中心运行时模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | query | string | 否 | 应用Id(DES 加密密文,按当前用户密钥解密) |
请求示例¶
GET /api/runtime/flowcenters/navs/processeds?applicationId=__APPID__ HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:统一 Resource。
data:List<Map<String, Object>>,经办导航分组列表(由服务层 FlowCenterRumTimeService.getProcessedNavs 返回)。
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": [
{ "applicationId": "__APPID__", "applicationName": "OA", "count": 12 }
],
"errors": null
}
4. 获取抄送导航¶
获取当前用户的抄送分类导航,可按已读状态过滤。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/flowcenters/navs/carboncopy(完整:{runtime-context}/api/runtime/flowcenters/navs/carboncopy) - 鉴权:是(需 accessToken,据源码)
- Tag:流程中心运行时模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | query | string | 否 | 应用Id(DES 加密密文,按当前用户密钥解密) |
| isread | query | boolean | 否 | 是否已读 |
请求示例¶
GET /api/runtime/flowcenters/navs/carboncopy?applicationId=__APPID__&isread=false HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:统一 Resource。
data:List<Map<String, Object>>,抄送导航分组列表(由服务层 FlowCenterRumTimeService.getCarboncopyNavs 返回)。
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": [
{ "applicationId": "__APPID__", "applicationName": "OA", "count": 3 }
],
"errors": null
}
5. 获取待办数据¶
按应用 Id 分页查询当前用户的待办列表,支持按主题、流程、发起人过滤。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/flowcenters/pendings(完整:{runtime-context}/api/runtime/{applicationId}/flowcenters/pendings) - 鉴权:是(需 accessToken,据源码)
- Tag:流程中心运行时模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id(DES 加密密文) |
| title | query | string | 否 | 主题内容(服务端将 % 转义为 %) |
| initiatorId | query | string | 否 | 发起人Id |
| flowId | query | string | 否 | 流程Id |
| flowname | query | string | 否 | 流程名称 |
| pageNo | query | int | 否 | 当前页,默认 1 |
| linesPerPage | query | int | 否 | 每页显示条数,默认 10 |
| isMobile | query | boolean | 否 | 是否移动端 |
请求示例¶
GET /api/runtime/__APPID__/flowcenters/pendings?title=请假&pageNo=1&linesPerPage=10 HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:统一 Resource。
data:Map<String, Object>,分页结果,含 datas(行列表,每行 docId 已按当前用户密钥重新 DES 加密,支持 xxx--sub 父子格式)等服务层返回的分页字段。
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": {
"datas": [
{ "docId": "__SEALED_DOCID__", "title": "请假申请", "initiatorName": "张三" }
]
},
"errors": null
}
6. 标记所有待办为已读¶
将当前用户在企业域下所有应用(排除系统类型应用)的待办全部标记为已读。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/flowcenters/pendings/allRead(完整:{runtime-context}/api/runtime/flowcenters/pendings/allRead) - 鉴权:是(需 accessToken,据源码)
- Tag:流程中心运行时模块
说明:虽为
GET请求,但服务端有副作用(批量更新已读状态),据源码如实记录。
请求参数¶
无。
请求示例¶
响应¶
结构:统一 Resource。
data:String,成功为 "success";若服务端抛异常返回 errcode=500 + 异常信息。
成功示例:
失败示例:
7. 获取经办数据¶
按应用 Id 分页查询当前用户的经办(已处理)列表,支持按主题、流程、发起人、是否我处理、完成状态过滤。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/flowcenters/processeds(完整:{runtime-context}/api/runtime/{applicationId}/flowcenters/processeds) - 鉴权:是(需 accessToken,据源码)
- Tag:流程中心运行时模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id(DES 加密密文) |
| title | query | string | 否 | 主题内容(服务端将 % 转义为 %) |
| flowId | query | string | 否 | 流程Id |
| initiatorId | query | string | 否 | 发起人Id |
| flowname | query | string | 否 | 流程名称 |
| isMyWorkFlow | query | boolean | 否 | 是否我处理 |
| status | query | string | 否 | 完成状态 |
| pageNo | query | int | 否 | 当前页,默认 1 |
| linesPerPage | query | int | 否 | 每页显示条数,默认 10 |
请求示例¶
GET /api/runtime/__APPID__/flowcenters/processeds?isMyWorkFlow=true&status=completed&pageNo=1&linesPerPage=10 HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:统一 Resource。
data:Map<String, Object>,分页结果,含 datas(行列表,每行 docId 已按当前用户密钥重新 DES 加密,支持 xxx--sub 父子格式)等服务层返回的分页字段。
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": {
"datas": [
{ "docId": "__SEALED_DOCID__", "title": "请假申请", "status": "completed" }
]
},
"errors": null
}
8. 获取抄送数据¶
按应用 Id 分页查询当前用户的抄送列表,支持按主题、流程、发起人、是否已读过滤。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/flowcenters/carboncopy(完整:{runtime-context}/api/runtime/{applicationId}/flowcenters/carboncopy) - 鉴权:是(需 accessToken,据源码)
- Tag:流程中心运行时模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id(DES 加密密文) |
| title | query | string | 否 | 主题内容(服务端将 % 转义为 %) |
| flowId | query | string | 否 | 流程Id |
| initiatorId | query | string | 否 | 发起人Id |
| flowname | query | string | 否 | 流程名称 |
| isMyWorkFlow | query | boolean | 否 | 是否我处理(注意:源码调用服务层时硬编码传 false,据源码) |
| isRead | query | boolean | 否 | 是否已读 |
| pageNo | query | int | 否 | 当前页,默认 1 |
| linesPerPage | query | int | 否 | 每页显示条数,默认 10 |
请求示例¶
GET /api/runtime/__APPID__/flowcenters/carboncopy?isRead=false&pageNo=1&linesPerPage=10 HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:统一 Resource。
data:Map<String, Object>,分页结果,含 datas(行列表,每行 docId 已按当前用户密钥重新 DES 加密,支持 xxx--sub 父子格式)等服务层返回的分页字段。
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": {
"datas": [
{ "docId": "__SEALED_DOCID__", "title": "请假申请", "isRead": false }
]
},
"errors": null
}
9. 新建常用发起菜单¶
将指定发起菜单添加到当前用户的常用列表(应用维度的 UserDefined 配置)。若已有 UserDefined 则追加,否则新建一条 UserDefined。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/{applicationId}/flowcenters/startMenus/{id}/usual(完整:{runtime-context}/api/runtime/{applicationId}/flowcenters/startMenus/{id}/usual) - 鉴权:是(需 accessToken,据源码)
- Tag:流程中心运行时模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id(DES 加密密文) |
| id | path | string | 是 | 发起菜单Id |
请求示例¶
POST /api/runtime/__APPID__/flowcenters/startMenus/__MENUID__/usual HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:统一 Resource。
data:String,固定为 "成功"。
成功示例:
10. 更新常用发起菜单(点击次数)¶
将指定发起菜单的点击次数 count 自增 1;若用户尚无 UserDefined 或常用列表为空,则按全部发起菜单初始化常用列表,命中 id 的初始计数为 1,其余为 0。
- 接口类型:REST 资源
- 请求方式:
PUT - 请求路径:
/{applicationId}/flowcenters/startMenus/{id}/usual(完整:{runtime-context}/api/runtime/{applicationId}/flowcenters/startMenus/{id}/usual) - 鉴权:是(需 accessToken,据源码)
- Tag:流程中心运行时模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id(DES 加密密文) |
| id | path | string | 是 | 发起菜单Id |
请求示例¶
PUT /api/runtime/__APPID__/flowcenters/startMenus/__MENUID__/usual HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:统一 Resource。
data:String,固定为 "成功"。
成功示例:
11. 删除常用发起菜单¶
将指定发起菜单从当前用户的常用列表中移除。
- 接口类型:REST 资源
- 请求方式:
DELETE - 请求路径:
/{applicationId}/flowcenters/startMenus/{id}/usual(完整:{runtime-context}/api/runtime/{applicationId}/flowcenters/startMenus/{id}/usual) - 鉴权:是(需 accessToken,据源码)
- Tag:流程中心运行时模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id(DES 加密密文) |
| id | path | string | 是 | 发起菜单Id |
请求示例¶
DELETE /api/runtime/__APPID__/flowcenters/startMenus/__MENUID__/usual HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:统一 Resource。
data:String,固定为 "成功"(即使 UserDefined 不存在或常用列表为空,亦返回 "成功",据源码)。
成功示例:
12. 置顶 / 取消置顶发起菜单¶
切换指定发起菜单的置顶状态(写入当前用户应用维度的 UserDefined.usualStartMenus 中对应项的 isTop 字段)。
- 接口类型:REST 资源
- 请求方式:
PUT - 请求路径:
/{applicationId}/flowcenters/startMenus/{id}/top(完整:{runtime-context}/api/runtime/{applicationId}/flowcenters/startMenus/{id}/top) - 鉴权:是(需 accessToken,据源码)
- Tag:流程中心运行时模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id(DES 加密密文) |
| id | path | string | 是 | 发起菜单Id |
| isTop | query | boolean | 是 | 是否置顶 |
请求示例¶
PUT /api/runtime/__APPID__/flowcenters/startMenus/__MENUID__/top?isTop=true HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:统一 Resource。
data:null。
成功示例: