跳转至

ApplicationAuthtimeController(软件/应用管理)

管理企业域下的软件绑定:企业域已绑定/未绑定软件分页列表、添加/移除软件、软件排序;软件列表、软件数据源列表查询;导出菜单-角色权限关系、角色-用户权限关系(Excel),导出软件基础数据 SQL 文件。

  • 类级基址${myapps.context-path.manager:}/api/authtime(完整路径:{manager-context}/api/authtime<相对路径>
  • Tag:软件管理模块
  • 控制器源码obpm-manager/src/main/java/cn/myapps/manager/authtime/controller/application/ApplicationAuthtimeController.java
  • 公共说明
  • 类继承 BaseAuthTimeController,通过其 success(errmsg, data) / error(errcode, errmsg, errors) 返回统一 Resource(字段 errcode/errmsg/data/errors,结构见 ../index.md「统一响应结构」)。
  • 多数端点在 try/catch 内捕获 Exceptione.printStackTrace() 后返回 errcode=500errmsg=e.getMessage()data=null(HTTP 状态码 200);业务校验失败常用 errcode=1(如「未选择软件」)。
  • exportBaseData 返回 void,直接写二进制流到响应输出流(非统一 Resource),异常向上抛由 Spring 默认异常处理。
  • exportRoleMenuAuthority / exportRoleUserAuthority 返回 Resource,但实现先把 Excel 写入响应输出流再 return success("ok", "成功"),此时响应已提交,返回值实际不被写入响应体(响应体为 Excel 二进制;异常分支虽返回 errcode=500Resource,但若响应头已写出,客户端仍可能拿到部分 Excel 流)。
  • 鉴权说明见 index.md「鉴权说明」(adminToken JWT)。
  • 路径变量:domainid / domainId 为企业域 id;applicationid / applicationId 为软件 id。
  • 控制器源码未声明类级 @Tag,本文档按所属业务域命名为「软件管理模块」。

1. 企业域软件列表

分页查询指定企业域已绑定的(且已启用的)软件列表,支持按 name 模糊过滤。结果在内存中分页。

  • 接口类型:REST 资源
  • 请求方式POST
  • 请求路径/domain/{domainid}/applications/bind(完整:{manager-context}/api/authtime/domain/{domainid}/applications/bind
  • 鉴权:是(需管理员 adminToken,详见 index.md「鉴权说明」)
  • Tag:软件管理模块

请求参数

参数名 位置 类型 必填 说明
domainid path string 企业域 id
content body JSON 过滤包体(字段见下)
_pagelines query string 每页条数,缺省 10
_currpage query string 当前页码,缺省 1

请求体

JSON 对象(application/json):

字段 类型 必填 说明
name string 软件名称模糊关键词(包含匹配)

请求示例

POST /api/authtime/domain/__P1UD2yVWpnFpUedONr/applications/bind?_currpage=1&_pagelines=20 HTTP/1.1
Content-Type: application/json

{ "name": "协同" }

响应

结构:统一 Resource(见 ../index.md「统一响应结构」)。 dataDataPackage<Application>,字段:

字段 类型 说明
linesPerPage int 每页条数
pageCount int 总页数
pageNo int 当前页码
rowCount int 总记录数
datas array\<Application> 已绑定且已启用的软件数组

成功示例

{
  "errcode": 0,
  "errmsg": "ok",
  "data": {
    "linesPerPage": 20,
    "pageCount": 1,
    "pageNo": 1,
    "rowCount": 1,
    "datas": [ { "id": "__APP01", "name": "协同办公" } ]
  },
  "errors": null
}
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }


2. 查询未添加软件列表

分页查询指定企业域**未绑定**的(且已启用的)软件列表,支持按 name 模糊过滤。结果在内存中分页。

  • 接口类型:REST 资源
  • 请求方式POST
  • 请求路径/domain/{domainid}/applications/unbind(完整:{manager-context}/api/authtime/domain/{domainid}/applications/unbind
  • 鉴权:是
  • Tag:软件管理模块

请求参数

参数名 位置 类型 必填 说明
domainid path string 企业域 id
content body JSON 过滤包体(字段见下)
_pagelines query string 每页条数,缺省 10
_currpage query string 当前页码,缺省 1

请求体

JSON 对象(application/json):

字段 类型 必填 说明
name string 软件名称模糊关键词

请求示例

POST /api/authtime/domain/__P1UD2yVWpnFpUedONr/applications/unbind?_currpage=1&_pagelines=20 HTTP/1.1
Content-Type: application/json

{ "name": "" }

响应

结构:统一 ResourcedataDataPackage<Application>(结构同「企业域软件列表」)。

成功示例

{
  "errcode": 0,
  "errmsg": "ok",
  "data": {
    "linesPerPage": 20,
    "pageCount": 1,
    "pageNo": 1,
    "rowCount": 2,
    "datas": [ { "id": "__APP02", "name": "客户管理" } ]
  },
  "errors": null
}
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }


3. 移除软件

从企业域移除已绑定软件,并同步清理该软件-企业域下的角色(RoleHelper.removeRole)。isAll=true 时移除该企业域下所有已绑定软件;否则按 ids 数组移除,ids 为空返回 errcode=1

  • 接口类型:REST 资源
  • 请求方式DELETE
  • 请求路径/domain/{domainid}/application(完整:{manager-context}/api/authtime/domain/{domainid}/application
  • 鉴权:是
  • Tag:软件管理模块

请求参数

参数名 位置 类型 必填 说明
domainid path string 企业域 id
isAll query boolean 是否移除全部已绑定软件,缺省 false
ids body string[] 待移除的软件 id 数组(isAll=false 时必填,空数组返回 errcode=1

请求体

application/json,字符串数组(isAll=true 时可省略):

[ "__APP01", "__APP02" ]

请求示例

DELETE /api/authtime/domain/__P1UD2yVWpnFpUedONr/application?isAll=false HTTP/1.1
Content-Type: application/json

[ "__APP01" ]

响应

结构:统一 Resourcedata:字符串 "移除成功"

条件 errcode errmsg data
isAll=falseids 为空 1 未选择软件 null
成功 0 ok 移除成功
抛异常 500 <异常信息> null

成功示例

{ "errcode": 0, "errmsg": "ok", "data": "移除成功", "errors": null }
失败示例
{ "errcode": 1, "errmsg": "未选择软件", "data": null, "errors": null }


4. 添加软件

向企业域批量添加软件绑定,并为每个软件授权默认角色(RoleHelper.authRole)。ids 为空返回 errcode=1

  • 接口类型:REST 资源
  • 请求方式PUT
  • 请求路径/domain/{domainid}/application(完整:{manager-context}/api/authtime/domain/{domainid}/application
  • 鉴权:是
  • Tag:软件管理模块

请求参数

参数名 位置 类型 必填 说明
domainid path string 企业域 id
ids body string[] 待添加的软件 id 数组(空数组返回 errcode=1

请求体

application/json,字符串数组:

[ "__APP01", "__APP02" ]

请求示例

PUT /api/authtime/domain/__P1UD2yVWpnFpUedONr/application HTTP/1.1
Content-Type: application/json

[ "__APP01" ]

响应

结构:统一 Resourcedata:字符串 "添加成功"

条件 errcode errmsg data
ids 为空 1 未选择软件 null
成功 0 ok 添加成功
抛异常 500 <异常信息> null

注:源码注释中标注「添加软件时执行数据初始化」的一段已被注释掉,当前实现不再在添加软件时执行 SQL 初始化。

成功示例

{ "errcode": 0, "errmsg": "ok", "data": "添加成功", "errors": null }
失败示例
{ "errcode": 1, "errmsg": "未选择软件", "data": null, "errors": null }


5. 查找数据源列表

按软件 id 查询该软件下配置的数据源列表。

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/application/{applicationId}/datasource/list(完整:{manager-context}/api/authtime/application/{applicationId}/datasource/list
  • 鉴权:是
  • Tag:软件管理模块

请求参数

参数名 位置 类型 必填 说明
applicationId path string 软件 id

请求示例

GET /api/authtime/application/__APP01/datasource/list HTTP/1.1

响应

结构:统一 ResourcedataCollection<DataSource>(数据源列表,元素含数据源名称、类型、连接配置等)。

成功示例

{
  "errcode": 0,
  "errmsg": "ok",
  "data": [ { "id": "__DS01", "name": "默认数据源", "type": "mysql" } ],
  "errors": null
}
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }


6. 查询软件列表

查询所有已启用的非系统软件(type != Application.SYSTEM_TYPE),支持按 name 模糊过滤。由于文件系统扫描时软件文件名为 *.application,当 nameapplication 的子串时会再做一次软件名包含校验,避免误命中。

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/applications(完整:{manager-context}/api/authtime/applications
  • 鉴权:是
  • Tag:软件管理模块

请求参数

参数名 位置 类型 必填 说明
name query string 软件名称模糊关键词(缺省视作空串)

请求示例

GET /api/authtime/applications?name=协同 HTTP/1.1

响应

结构:统一 ResourcedataList<Application>(已启用的非系统软件数组)。

成功示例

{
  "errcode": 0,
  "errmsg": "ok",
  "data": [ { "id": "__APP01", "name": "协同办公" } ],
  "errors": null
}
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }


7. 导出菜单角色权限关系

按软件 id 导出该软件的「菜单-角色」权限关系为 Excel 文件(文件名 角色&菜单.xls),含 PC 与移动端菜单;公共权限菜单标注「所有用户可用」,未分配角色的菜单标注「此菜单未进行角色权限分配」。

  • 接口类型:REST 资源(二进制流)
  • 请求方式GET
  • 请求路径/domain/applications/{applicationid}/exportrolemenuauthority(完整:{manager-context}/api/authtime/domain/applications/{applicationid}/exportrolemenuauthority
  • 鉴权:是
  • Tag:软件管理模块

请求参数

参数名 位置 类型 必填 说明
applicationid path string 软件 id

请求示例

GET /api/authtime/domain/applications/__APP01/exportrolemenuauthority HTTP/1.1

响应

  • Content-Typeappliction/excel(源码原样拼写,注意拼写)
  • Content-Dispositionattachment;fileName=<URL 编码后的「角色&菜单.xls」>
  • 状态码:200(成功)
  • 响应体:Excel 二进制流(无统一 Resource

注:方法签名返回 Resource,实现先把 workbook 写入响应输出流再 return success("ok", "成功"),此时响应已提交,返回值实际不被写入响应体。异常分支虽返回 errcode=500Resource,但若响应头已写出,客户端仍可能拿到部分 Excel 流或损坏响应。

成功示例

HTTP 200
Content-Type: appliction/excel
Content-Disposition: attachment;fileName=%E8%A7%92%E8%89%B2%26%E8%8F%9C%E5%8D%95.xls

<Excel 二进制流>
失败示例
若响应头未写出,返回统一 Resource:{ "errcode":500, "errmsg":"<异常信息>", "data":null, "errors":null }
若响应头已写出,客户端可能拿到部分 Excel 流或损坏响应。


8. 导出角色用户权限关系

按企业域 + 软件导出该软件的「角色-部门-用户」权限关系为 Excel 文件(文件名 角色&用户.xls),以角色与部门为准列举该部门下的用户名称。部门按层级结构名展示,跨企业域的部门会被过滤。

  • 接口类型:REST 资源(二进制流)
  • 请求方式GET
  • 请求路径/domain/{domainid}/applications/{applicationid}/exportroleuserauthority(完整:{manager-context}/api/authtime/domain/{domainid}/applications/{applicationid}/exportroleuserauthority
  • 鉴权:是
  • Tag:软件管理模块

请求参数

参数名 位置 类型 必填 说明
domainid path string 企业域 id(部门按此过滤跨域)
applicationid path string 软件 id

请求示例

GET /api/authtime/domain/__P1UD2yVWpnFpUedONr/applications/__APP01/exportroleuserauthority HTTP/1.1

响应

  • Content-Typeappliction/excel(源码原样拼写,注意拼写)
  • Content-Dispositionattachment;fileName=<URL 编码后的「角色&用户.xls」>
  • 状态码:200(成功)
  • 响应体:Excel 二进制流(无统一 Resource

注:同「7. 导出菜单角色权限关系」,方法返回的 Resource 实际不被写入响应体。

成功示例

HTTP 200
Content-Type: appliction/excel
Content-Disposition: attachment;fileName=%E8%A7%92%E8%89%B2%26%E7%94%A8%E6%88%B7.xls

<Excel 二进制流>
失败示例
若响应头未写出,返回统一 Resource:{ "errcode":500, "errmsg":"<异常信息>", "data":null, "errors":null }
若响应头已写出,客户端可能拿到部分 Excel 流或损坏响应。


9. 导出基础数据

按企业域 + 软件导出该软件的基础数据 SQL 文件:定位到软件 workspace 目录上级的 database 子目录,遍历其中第一个以 .sql 结尾的文件并以下载流返回;目录不存在或无 .sql 文件时响应体写入纯文本 暂无数据

  • 接口类型:REST 资源(二进制流)
  • 请求方式GET
  • 请求路径/domain/{domainId}/applications/{applicationId}/data/export(完整:{manager-context}/api/authtime/domain/{domainId}/applications/{applicationId}/data/export
  • 鉴权:是
  • Tag:软件管理模块

请求参数

参数名 位置 类型 必填 说明
domainId path string 企业域 id(路径变量,方法签名持有但实际逻辑未直接使用)
applicationId path string 软件 id

请求示例

GET /api/authtime/domain/__P1UD2yVWpnFpUedONr/applications/__APP01/data/export HTTP/1.1

响应

  • Content-Typeapplication/x-download; charset=UTF-8
  • Content-Dispositionattachment;filename="<URL 编码后的 SQL 文件名>"(命中 .sql 文件时设置)
  • 状态码:200
  • 响应体:命中时为 SQL 文件二进制;未命中时为纯文本 暂无数据
条件 行为
database 目录存在且含 .sql 文件 设置 Content-Disposition 为该文件名,写入文件字节
目录不存在 / 无 .sql 文件 不设置 Content-Disposition,响应体写入纯文本 暂无数据
抛异常 由 Spring 默认异常处理(HTTP 500,无统一 Resource 体)

注:本端点返回 void,无 try/catch,异常向上抛。

成功示例

HTTP 200
Content-Type: application/x-download; charset=UTF-8
Content-Disposition: attachment;filename="init-data.sql"

<SQL 文件二进制>
失败示例
HTTP 200
Content-Type: application/x-download; charset=UTF-8

暂无数据


10. 软件排序

按软件 id 列表(逗号分隔的 JSON 数组文本)整体覆盖企业域的软件绑定顺序(直接写入 DomainVO.bindApplicatons)。

  • 接口类型:REST 资源
  • 请求方式PUT
  • 请求路径/domain/{domainId}/applications/sort(完整:{manager-context}/api/authtime/domain/{domainId}/applications/sort
  • 鉴权:是
  • Tag:软件管理模块

请求参数

参数名 位置 类型 必填 说明
domainId path string 企业域 id
ids body string 软件 id 列表的 JSON 数组文本,如 ["__APP01","__APP02"],原样写入 bindApplicatons

请求体

application/json,字符串(控制器以 String 接收,原样写入域对象 bindApplicatons):

"[\"__APP01\",\"__APP02\"]"

注:源码未对入参做非空/格式校验,调用方需自行保证传入合法的 JSON 数组文本。

请求示例

PUT /api/authtime/domain/__P1UD2yVWpnFpUedONr/applications/sort HTTP/1.1
Content-Type: application/json

"[\"__APP01\",\"__APP02\"]"

响应

结构:统一 Resourcedatanull

注:本端点方法签名 throws Exception,未捕获异常时由 Spring 默认异常处理(HTTP 500,无统一 Resource 体)。

成功示例

{ "errcode": 0, "errmsg": "ok", "data": null, "errors": null }
失败示例
HTTP 500,无统一 Resource 体(异常未捕获,由 Spring 默认异常处理)