跳转至

报表(ReportController)

提供 KMS 知识管理模块「报表域」的能力:按关键字、操作类型、部门、用户、时间范围查询/导出操作日志报表(含按分类名+用户列表导出分类报表)。本控制器共 3 个端点;#2、#3 为二进制响应(直接写 HttpServletResponse 输出流,返回 Excel 文件),不返回 JSON Resource。

  • 接口类型:REST 资源(@Controller,非 @RestController;#1 方法级 produces = MediaType.APPLICATION_JSON_VALUE 并加 @ResponseBody 返回 JSON,#2/#3 返回 void、直接写响应流)
  • 基址:${myapps.context-path.kms:}/api/kms(类级 @RequestMapping 仅声明单一前缀)
  • Tag:kms报表模块

公共说明

  • 鉴权(据源码 KmsMvcConfig + KmsSecurityFilter):KmsMvcConfig 注册全局 Servlet 过滤器 KmsSecurityFilter(URL 模式 /*,context-path 为 / 时为 /kms/*)。本控制器路径 /api/kms/reports/**、/api/kms/category/report/export 不在 KmsSecurityFilter.isExcludeURI 的豁免名单内(豁免仅覆盖 /login.*、/admin、/domain.*、/tray/service、/authtime、service/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(),按入参 userId/deptId/region 过滤。
  • 响应结构:#1 为统一 Resource(见 ../index.md「统一响应结构」);#2、#3 为 Excel 二进制流,非 JSON。
  • 时间参数解析:startDate/endDate/beginTime/endTime 为字符串型毫秒时间戳。#1 中服务端会按当天 0 点 / 23:59:59 截断(/1000*3600*24*... 并按本机时区偏移修正);#2、#3 则**直接按原始毫秒值**构造 Date,不做截断。
  • 路径变量:本控制器无路径变量。

1. 查询报告

按关键字、区域、操作类型、部门、用户、时间范围分页查询操作日志(据 @Operation(summary = "查询报告"))。

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

请求参数

参数名 位置 类型 必填 说明
keyWord query string 否 关键字(模糊匹配)
region query int 否 区域
operationType query int 否 操作类型(默认 0)
deptId query string 否 部门Id
userId query string 否 用户Id
startDate query string(long) 否 起始时间(毫秒时间戳字符串;服务端按当天 0 点截断)
endDate query string(long) 否 截止时间(毫秒时间戳字符串;服务端按当天 23:59:59 截断)
pageNo query int 否 页码(默认 1)
linesPerPage query int 否 每页条数(默认 10)

请求示例

GET /api/kms/reports/query?keyWord=下载&operationType=1&pageNo=1&linesPerPage=20&accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 Resource。 data:DataPackage<Logs>,日志分页数据。

成功示例:

{
  "errcode": 0,
  "errmsg": "ok",
  "data": {
    "pageNo": 1,
    "linesPerPage": 20,
    "rowCount": 88,
    "datas": [ { "id": "__LOGID__", "operationType": 1, "content": "下载文件 方案.docx" } ]
  },
  "errors": null
}


2. 导出报告

按区域、操作类型、部门、用户、时间范围将操作日志导出为 Excel 文件(据 @Operation(summary = "导出报告"))。响应体为二进制 Excel 流,非 JSON。

  • 接口类型:REST 资源(直接写 HttpServletResponse 输出流)
  • 请求方式:GET
  • 请求路径:/reports/export(完整:{kms-context}/api/kms/reports/export)
  • 鉴权:是(需 accessToken,据源码)
  • Tag:kms报表模块

请求参数

参数名 位置 类型 必填 说明
region query int 否 区域
operationType query int 是 操作类型
deptId query string 否 部门Id
userId query string 否 用户Id
startDate query string(long) 否 起始时间(毫秒时间戳字符串,直接解析为 Date,不做截断)
endDate query string(long) 否 截止时间(毫秒时间戳字符串,直接解析为 Date,不做截断)

请求示例

GET /api/kms/reports/export?operationType=1&startDate=1722729600000&endDate=1722816000000&accessToken=__TOKEN__ HTTP/1.1

响应

结构:二进制 Excel 文件流,非 JSON Resource。

响应头 值
Content-Type appliction/excel(注意:源码原文如此拼写,非标准 application/vnd.ms-excel;客户端按二进制下载即可)
Content-Disposition attachment;fileName=报表.xls(文件名按 UTF-8 → ISO-8859-1 编码)
状态码 200

说明:Excel 内容由 ReportService.exportToExcel(...) 直接写入响应输出流;服务端不返回 JSON。客户端按 Content-Disposition 中的文件名保存即可。


3. 导出分类报告

按分类名、用户列表、时间范围导出分类报表为 Excel 文件(据 @Operation(summary = "导出分类报告"))。响应体为二进制 Excel 流,非 JSON。

  • 接口类型:REST 资源(直接写 HttpServletResponse 输出流)
  • 请求方式:GET
  • 请求路径:/category/report/export(完整:{kms-context}/api/kms/category/report/export)
  • 鉴权:是(需 accessToken,据源码)
  • Tag:kms报表模块

请求参数

参数名 位置 类型 必填 说明
categoryName query string 否 分类名称
userIds query string[] 否 用户Id列表(Spring 自动按形参名 userIds 绑定多个 query 参数)
beginTime query string(long) 否 起始时间(毫秒时间戳字符串;仅当 beginTime、endTime 均非空时才生效,直接解析为 Date)
endTime query string(long) 否 截止时间(毫秒时间戳字符串;仅当 beginTime、endTime 均非空时才生效)

请求示例

GET /api/kms/category/report/export?categoryName=报告&userIds=__UID1__&userIds=__UID2__&beginTime=1722729600000&endTime=1722816000000&accessToken=__TOKEN__ HTTP/1.1

响应

结构:二进制 Excel 文件流,非 JSON Resource。

响应头 值
Content-Type appliction/excel(注意:源码原文如此拼写,同 #2)
Content-Disposition attachment;fileName=报表.xls(文件名按 UTF-8 → ISO-8859-1 编码)
状态码 200

说明:Excel 内容由 ReportService.exportToListFile(...) 直接写入响应输出流;服务端不返回 JSON。