跳转至

团队(TeamController)

提供 KMS 知识管理模块「团队协作域」(tkm)下的团队管理能力:团队的创建/更新/删除/查询、团队名称更新、我的团队列表、团队序列号生成、团队详情查询,以及团队与专委会(领域)模块开关状态查询。所有端点均返回 JSON 资源(最后一个 realmAndTeam 端点返回原始 JSON 字符串,详见 #9)。

  • 接口类型:REST 资源(@RestController,类级与所有方法级 produces = MediaType.APPLICATION_JSON_VALUE
  • 基址${myapps.context-path.kms:}/api/kms(类级 @RequestMapping 仅声明单一前缀,/kms 备用前缀;与 SearchController/FileController 不同)
  • Tag:kms团队模块

公共说明

  • 鉴权(据源码 KmsMvcConfig + KmsSecurityFilterKmsMvcConfig 注册全局 Servlet 过滤器 KmsSecurityFilter(URL 模式 /*,context-path 为 / 时为 /kms/*)。本控制器路径 /api/kms/teams/**/api/kms/myTeams/api/kms/realmAndTeam 均不在 KmsSecurityFilter.isExcludeURI 的豁免名单内(豁免仅覆盖 /login.*/admin/domain.*/tray/service/authtimeservice/OfficeServer.*outsideshare/.*/preview、静态资源后缀、actuator/health 等)。过滤器调用 Security.getUserIdFromToken(request),取不到用户则返回 HTTP 401因此所有端点均需 accessToken,可通过以下任一方式传递(据 Security.getUserIdFromToken):query 参数 accessToken、query 参数 access_token(移动端)、请求头 accessToken、Cookie accessToken、请求头 Authorization: Bearer <token>。完整鉴权机制见 index.md「鉴权说明」。
  • 执行用户:控制器内 getUser()(继承自 AbstractBaseController)调用 Security.getUserIdFromToken(request) 还原当前用户 id,再经 Feign(UserAPI.getUserById)装载 KmsUseruserCode 参数
  • 响应结构:统一 Resource(见 ../index.md「统一响应结构」),字段为 errcode/errmsg/data/errors。KMS 的 ResourceAbstractBaseController 内部类,其构造器对 data 执行 ESAPI.encode(data) 做 XSS 编码,故 data 中的 HTML 特殊字符会被转义。
  • HTTP 状态码与错误码(据源码 AbstractBaseController 全局异常处理):成功默认 HTTP 200;InvalidRequestException → HTTP 400 / errcode=400;UnauthorizedException → HTTP 403 / errcode=403;ForbiddenException → HTTP 403 / errcode=403;ResourceNotFoundException → HTTP 404 / errcode=404;其他 Exception → HTTP 500 / errcode=500。
  • @RequestParam 默认必填:未标 required=false 且无 defaultValue 的 query 参数按 Spring 约定为必填。
  • 路径变量teamId 为 KMS 内部主键(明文 id)。

1. 创建团队

创建一个新的团队。请求体为 Team 对象 JSON;服务端会自动填充 creator/creatorId/domainId(取自当前登录用户)。

  • 接口类型:REST 资源
  • 请求方式POST
  • 请求路径/teams(完整:{kms-context}/api/kms/teams
  • 鉴权:是(需 accessToken,据源码)
  • Tag:kms团队模块

请求参数

参数名 位置 类型 必填 说明
body body object Team 对象 JSON,见下方请求体

请求体

{
  "name": "研发一组",
  "serialNumber": "T20260804001",
  "description": "研发协作团队"
}

请求示例

POST /api/kms/teams?accessToken=__TOKEN__ HTTP/1.1
Content-Type: application/json

{ "name": "研发一组", "serialNumber": "T20260804001", "description": "研发协作团队" }

响应

结构:统一 Resourcedata:创建后的 Team 对象(含服务端回填的 creator/creatorId/domainId)。

失败示例(请求体为空)

{ "errcode": 400, "errmsg": "团队数据为空", "data": null, "errors": null }


2. 更新团队

更新指定 Id 的团队信息(全量更新)。teamId 为空或请求体为 null 时抛 InvalidRequestException(HTTP 400)。

  • 接口类型:REST 资源
  • 请求方式PUT
  • 请求路径/teams/{teamId}(完整:{kms-context}/api/kms/teams/{teamId}
  • 鉴权:是(需 accessToken,据源码)
  • Tag:kms团队模块

请求参数

参数名 位置 类型 必填 说明
teamId path string 团队Id
body body object Team 对象 JSON(请求体 id 为空时,服务端用路径 teamId 补齐)

请求体

{ "name": "研发一组(更新)", "description": "更新后的描述" }

请求示例

PUT /api/kms/teams/__TEAMID__?accessToken=__TOKEN__ HTTP/1.1
Content-Type: application/json

{ "name": "研发一组(更新)", "description": "更新后的描述" }

响应

结构:统一 Resourcedata:更新后的 Team 对象。

失败示例(参数有误)

{ "errcode": 400, "errmsg": "团队为空", "data": null, "errors": null }


3. 更新团队名称

仅更新指定团队的名称。teamName 非空时,服务端先取出团队、重置名称并刷新成员列表后落库。

  • 接口类型:REST 资源
  • 请求方式PUT
  • 请求路径/teams/{teamId}/name(完整:{kms-context}/api/kms/teams/{teamId}/name
  • 鉴权:是(需 accessToken,据源码)
  • Tag:kms团队模块

请求参数

参数名 位置 类型 必填 说明
teamId path string 团队Id
teamName query string 新团队名称

请求示例

PUT /api/kms/teams/__TEAMID__/name?teamName=新团队名&accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 Resourcedata:更新后的 Team 对象(含刷新后的 members 列表)。

据源码:当 teamName 为空时方法直接 return null;(不经过 Resource 包装,Spring 将写入空响应体)。建议调用方始终传入非空名称。


4. 删除团队

按团队 Id 列表批量删除团队。删除前会以当前用户做权限校验。

  • 接口类型:REST 资源
  • 请求方式DELETE
  • 请求路径/teams(完整:{kms-context}/api/kms/teams
  • 鉴权:是(需 accessToken,据源码)
  • Tag:kms团队模块

请求参数

参数名 位置 类型 必填 说明
body body array(string) 待删除团队Id数组

请求体

["__TEAMID1__", "__TEAMID2__"]

请求示例

DELETE /api/kms/teams?accessToken=__TOKEN__ HTTP/1.1
Content-Type: application/json

["__TEAMID1__", "__TEAMID2__"]

响应

结构:统一 Resourcedataboolean,固定为 true(删除由 teamService.delete(select, user) 完成,过程中抛出的异常由全局处理器映射)。


5. 获取团队集合

按多条件分页查询团队列表。可通过 isMyTeams=true 限定为「我参与的团队」。

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/teams(完整:{kms-context}/api/kms/teams
  • 鉴权:是(需 accessToken,据源码)
  • Tag:kms团队模块

请求参数

参数名 位置 类型 必填 说明
isMyTeams query string 是否仅查询我参与的团队(字符串布尔值,如 "true"/"false"
serialNumber query string 团队编号过滤
creator query string 创建者过滤
departmentId query string 所属部门Id过滤
teamName query string 团队名称关键字
beginTime query string 起始时间戳(毫秒,字符串型)
endTime query string 截止时间戳(毫秒,字符串型)
linesPerPage query string 每页条数(字符串型数字)
pageNo query string 页码(字符串型数字)

请求示例

GET /api/kms/teams?isMyTeams=true&pageNo=1&linesPerPage=20&accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 ResourcedataDataPackage<Team>,团队分页数据。

失败示例(分页参数缺失)

{ "errcode": 400, "errmsg": "每页显示的条数为空或者现在页数为空", "data": null, "errors": null }


6. 获取我的团队

返回当前用户创建或参与的团队列表(不分页,以列表形式返回)。

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/myTeams(完整:{kms-context}/api/kms/myTeams
  • 鉴权:是(需 accessToken,据源码)
  • Tag:kms团队模块

请求参数

无。

请求示例

GET /api/kms/myTeams?accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 ResourcedataList<Team>,我创建或参与的团队列表。


7. 获取团队序列号

生成并返回一个新的团队序列号(供前端创建团队时预填)。

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/teams/serialNumber(完整:{kms-context}/api/kms/teams/serialNumber
  • 鉴权:是(需 accessToken,据源码)
  • Tag:kms团队模块

请求参数

无。

请求示例

GET /api/kms/teams/serialNumber?accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 ResourcedataString,新生成的团队序列号。


8. 获取团队信息

按团队 Id 获取团队详情。团队不存在时抛 ResourceNotFoundException(HTTP 404)。

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/teams/{teamId}(完整:{kms-context}/api/kms/teams/{teamId}
  • 鉴权:是(需 accessToken,据源码)
  • Tag:kms团队模块

请求参数

参数名 位置 类型 必填 说明
teamId path string 团队Id

请求示例

GET /api/kms/teams/__TEAMID__?accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 ResourcedataTeam 对象(据源码,返回前会将 subscription 字段置为 true)。

失败示例(团队不存在)

{ "errcode": 404, "errmsg": "未查询到指定团队", "data": null, "errors": null }


9. 获取团队和专委会状态

返回「团队(kmTeam)」与「专委会(kmRealm)」模块的启用状态映射。

据源码:本端点方法返回类型为 String(而非 Resource),由 JsonUtil.bean2Json(maps) 序列化为 JSON 字符串直接写入响应体;当前实现中读取企业域 systemModuleConfigJson 的逻辑被整体注释,maps 实际为空 HashMap,故响应体固定为 {}。鉴权仍受 KmsSecurityFilter 控制,需 accessToken。

  • 接口类型:REST 资源(返回类型为原始 JSON 字符串,非统一 Resource
  • 请求方式GET
  • 请求路径/realmAndTeam(完整:{kms-context}/api/kms/realmAndTeam
  • 鉴权:是(需 accessToken,据源码)
  • Tag:kms团队模块

请求参数

无。

请求示例

GET /api/kms/realmAndTeam?accessToken=__TOKEN__ HTTP/1.1

响应

结构:原始 JSON 字符串( 统一 Resource)。Content-Type 仍为 application/jsondataMap<String, Object> 序列化结果;据源码当前实现固定返回 {}(企业域配置读取逻辑已被注释)。

示例

{}