设计时大屏页面管理(BigScreenDesignTimeController)¶
大屏页面(BigScreen)设计时资源管理:页面的增删改查(含批量删除)、页面图表数据查询(Feign 转发到 runtime),以及大屏资源文件的上传与下载。
- 接口类型:REST 资源
- 基址:
${myapps.context-path.designer:}/api/designtime/applications(类级@RequestMapping,produces = APPLICATION_JSON_VALUE) - Tag:设计时-大屏模块
公共说明¶
- 鉴权:是(需 designerToken)。控制器继承自
AbstractDesignTimeController(基类为@RestController),通过Security.getDesignerIdFromToken(request)从 designerToken JWT 中解析设计器用户。鉴权机制详见 index.md「鉴权说明」。 - 路径变量:
{applicationId}、{pageId}、{id}、{componentId}、{fileName}均为**明文设计时 ID**(与 designer 其他控制器一致,非 runtime 的 DES 加密密文)。 - 响应:除上传/下载外为统一
Resource(见 ../index.md「统一响应结构」)。成功errcode=0;保存类接口捕获OBPMValidateException(如「名称已经存在!」)时返回errcode=40001,其他异常默认errcode=500,errmsg为异常信息。 - HTTP 方法:受
CommonSecurityFilter限制,仅允许GET/POST/HEAD/OPTIONS。 - HTTP 状态码:新建/更新页面接口返回
201 Created(@ResponseStatus),列表/详情/删除/图表数据接口200 OK;统一Resource仍以errcode表达业务结果。上传/下载端点直接返回ResponseEntity,不走统一Resource。 - 请求体约定:新建/更新页面接收原始 JSON 字符串(
@RequestBody String content,反序列化为BigScreen);批量删除接收 JSON 字符串数组(@RequestBody String content,由 JsonPath 解析为List<String>)。
1. 获取页面列表¶
分页获取指定应用下的大屏页面列表,可按名称查询。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/bigscreen(完整:{designer-context}/api/designtime/applications/{applicationId}/bigscreen) - 鉴权:是(需 designerToken)
- Tag:设计时-大屏模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id |
| name | query | string | 否 | 按页面名称查询关键字 |
| requestType | query | string | 否 | 请求类型(形参声明,未实际参与过滤) |
| status | query | string | 否 | 状态(形参声明,未实际参与过滤) |
| pageNo | query | int | 否 | 当前页数(缺省 1) |
| linesPerPage | query | int | 否 | 每页行数(缺省 10) |
说明:
requestType/status形参在控制器中声明但未传入服务层;保留以便后续扩展。
请求示例¶
响应¶
结构:统一 Resource(见 ../index.md「统一响应结构」)。
data:DataPackage<BigScreen>(含分页字段与 datas)。
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": {
"linesPerPage": 10,
"pageNo": 1,
"pageCount": 1,
"rowCount": 2,
"datas": [
{ "id": "...", "name": "页面名称", "applicationid": "...", "parentId": "...", "templateContext": "...", "...": "..." }
]
},
"errors": null
}
2. 获取页面详情¶
按页面Id获取完整大屏页面对象。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/bigscreen/{pageId} - 鉴权:是(需 designerToken)
- Tag:设计时-大屏模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id |
| pageId | path | string | 是 | 页面Id |
响应¶
data:BigScreen 完整对象(含 templateContext 设计器 JSON、uri 缓存路径等)。
{ "errcode": 0, "errmsg": "ok", "data": { "id": "...", "name": "...", "applicationid": "...", "parentId": "...", "templateContext": "...", "...": "..." }, "errors": null }
3. 新建页面¶
在指定应用下新建大屏页面。请求体反序列化为 BigScreen,强制将 applicationid/parentId 设为当前应用Id,再做同名校验(OBPMValidateException → errcode=40001)后保存。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/{applicationId}/bigscreen - 鉴权:是(需 designerToken)
- Tag:设计时-大屏模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id |
| content | body | string(JSON) | 是 | 页面对象 JSON |
请求体¶
对应 BigScreen 对象的 JSON(含 name、templateContext 等;applicationid/parentId 由服务端覆盖)。
响应¶
data:JSONObject,仅含 id(新建页面Id)。HTTP 状态码 201 Created。
4. 更新页面¶
按页面Id更新大屏页面。服务端先读取旧页面并克隆,再覆盖 name 与 templateContext(清空 uri 缓存),同名校验通过后调用 update。id 以路径变量为准。
- 接口类型:REST 资源
- 请求方式:
PUT - 请求路径:
/{applicationId}/bigscreen/{pageId} - 鉴权:是(需 designerToken)
- Tag:设计时-大屏模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id |
| pageId | path | string | 是 | 页面Id |
| content | body | string(JSON) | 是 | 页面对象 JSON(至少含 name、templateContext) |
响应¶
data:null(成功)。HTTP 状态码 201 Created(源码沿用 @ResponseStatus(CREATED),虽然语义为更新)。
5. 删除页面(可批量)¶
按页面Id数组批量删除大屏页面(含路径信息收集)。
- 接口类型:REST 资源
- 请求方式:
DELETE - 请求路径:
/{applicationId}/bigscreen - 鉴权:是(需 designerToken)
- Tag:设计时-大屏模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id |
| content | body | string(JSON) | 是 | 页面Id数组(JSON 数组字符串,由 JsonPath 解析为 List<String>) |
请求体¶
响应¶
data:String,固定为 "删除成功"。
6. 获取页面图表数据¶
按页面Id、组件Id、域Id获取大屏组件的图表数据。该接口通过 RuntimeFeignService 转发到 runtime 服务查询实际业务数据,返回结构以 runtime 端为准。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/bigscreen/{id}/components/{componentId}/data - 鉴权:是(需 designerToken)
- Tag:设计时-大屏模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id |
| id | path | string | 是 | 页面Id |
| componentId | path | string | 是 | 大屏组件Id |
| domainId | query | string | 是 | 域Id(标注 @RequestParam,默认必填) |
请求示例¶
GET /api/designtime/applications/{applicationId}/bigscreen/{id}/components/{componentId}/data?domainId=<domainId> HTTP/1.1
响应¶
data:透传 runtime 返回的 Resource.data(图表组件数据,结构以 runtime 实际返回为准)。
7. 上传大屏资源文件¶
上传一个大屏资源文件(图片等)到指定应用的工作区资源目录,返回访问该文件的下载URI。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/{applicationId}/bigscreen/upload(完整:{designer-context}/api/designtime/applications/{applicationId}/bigscreen/upload) - 鉴权:是(需 designerToken)
- Tag:设计时-大屏模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id |
| file | body(form-data) | file | 是 | 待上传的文件(@RequestParam("file") MultipartFile) |
请求示例¶
POST /api/designtime/applications/{applicationId}/bigscreen/upload HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
响应¶
结构:直接返回 ResponseEntity<FileResponse>(HTTP 200),不走统一 Resource 封装。
body:FileResponse,结构 {fileName, fileDownloadUri, fileType, size}。其中 fileDownloadUri 固定为 /designer/api/designtime/applications/{applicationId}/bigscreen/download/{fileName}。
{
"fileName": "<存储后的文件名>",
"fileDownloadUri": "/designer/api/designtime/applications/{applicationId}/bigscreen/download/<fileName>",
"fileType": "image/png",
"size": 12345
}
8. 下载大屏资源文件¶
按文件名下载此前上传的大屏资源文件,以 attachment 形式返回二进制流。
- 接口类型:REST 资源(二进制)
- 请求方式:
GET - 请求路径:
/{applicationId}/bigscreen/download/{fileName:.+}(完整:{designer-context}/api/designtime/applications/{applicationId}/bigscreen/download/{fileName:.+}) - 鉴权:是(需 designerToken)
- Tag:设计时-大屏模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id |
| fileName | path | string | 是 | 文件名(:.+ 正则占位允许含 .) |
说明:
fileName路径变量使用:.+正则,避免 Spring MVC 将扩展名误当作内容协商后缀而截断。
请求示例¶
响应¶
结构:ResponseEntity<Resource>(HTTP 200),不走统一 Resource 封装。
- Content-Type:根据 Files.probeContentType 探测,探测失败时回落 application/octet-stream。
- Content-Disposition:attachment; filename="<fileName>"。
- body:文件二进制流(org.springframework.core.io.Resource)。