跳转到正文

查询与删除

本页用于接入下载列表、详情与删除按钮。先按快速开始完成数据库和认证装配。接口返回下载记录 JSON,实际文件由 filePath 对应的应用或存储服务提供。

选择接口与用户范围

入口依赖 artifactIdURL 前缀记录范围
Appspringboot-business-download-center-controller-app/api/app/download/center当前会话用户所属记录
管理端springboot-business-download-center-controller-admin/api/admin/download/center全部未删除记录,可按 userId 筛选

两项依赖的 groupId 均为 com.own.business,由 Business BOM 管理版本。若要增加管理端,在应用 dependencies 中追加:

xml
<dependency>
    <groupId>com.own.business</groupId>
    <artifactId>springboot-business-download-center-controller-admin</artifactId>
</dependency>

两端均提供以下三个接口,路径加上表中的前缀与应用实际 context path:

方法相对路径请求成功时 data
POST/pageJSON DownloadCenterQuery,无条件时传 {}PageModel<DownloadCenterVo>
GET/id/{id}路径中的记录 ID,无请求体DownloadCenterVo
DELETE/id/{id}路径中的记录 ID,无请求体;可能先进入二次确认true

App 分页强制把 query.userId 覆盖为当前登录用户;详情和删除使用 id + fk_user_id 条件。管理端保留传入筛选条件,不自动限制为当前用户。模块没有工作空间作用域,用户同一账号下的记录不会按工作空间自动分组。

管理端声明权限模块 download-center:分页要求 SEARCH;详情声明 VIEWSEARCH;删除声明 SEARCH + DELETEVIEW + DELETE 两组操作组合。应用需接好相应认证与权限处理,注解不会替应用创建账号、角色或授权数据。

分页查询

请求:POST /api/app/download/center/pageContent-Type: application/json

json
{
  "page": 1,
  "rows": 10,
  "fileName": "报表",
  "fileType": "xlsx",
  "status": 1
}
条件实际匹配方式
fileName非空白时模糊匹配
fileTypefilePath非空白时等值匹配
fileSizenull 时按字节数等值匹配
userIdnull 时按归属用户等值匹配;App 会覆盖为会话用户
statusprogressnull 时等值匹配,0 也是有效条件
page从 1 开始;缺省或不大于 0 时使用 1
rows缺省或不大于 0 时使用 10;最大 100

条件之间为 AND,按 createTime 倒序排列,没有额外的同时间 ID 排序。当前不支持时间范围、文件大小范围、进度范围或自定义排序。虽然 Query 继承了 keywords,服务没有配置通用关键字搜索列,按文件名搜索应使用 fileName

分页响应的业务部分包含 pagerowstotallistisLastPagetotal 为记录总数,不是总页数。空结果时 list 为空列表。分页依赖 PageHelper,单独注册 Mapper 不能替代分页插件装配。公共模型与边界见 Base Business 分页

接口约定与记录字段

普通响应包装为 ResultModel<T>,包含 codemessagedatatsuccesstraceId。成功业务码为 00000,客户端应以业务码判断结果;不要仅根据 HTTP 成功状态或 success=true 判断操作已完成,二次确认挑战也使用该响应包装。

公共响应与 JSON 转换规则集中见 Base 使用与配置,下文补充下载记录的业务字段。

字段类型及含义
idJava Long,下载记录 ID,数据库主键为 bigint、MyBatis-Plus ASSIGN_ID
fileNamefileTypefilePath展示名称、自定义类型、已保存的下载地址
fileSizeJava Long,文件大小,单位字节
userIdJava Long,文件归属用户;对外没有 fkUserId 字段
statusprogress整数状态和进度,取值及维护规则见记录写入与状态维护
createTimemodifiedTime创建及更新时间,LocalDateTime,默认 JSON 格式 yyyy-MM-dd HH:mm:ss,不携带时区偏移
createUserIdcreateUserName创建操作人,可能未填充;不等同于归属用户
modifiedUserIdmodifiedUserName最近修改操作人,可能未填充
version记录版本号;不是任务进度或状态版本协议

框架默认 MVC 将 Long 序列化为字符串,因此 iduserIdfileSize 及审计用户 ID 应按字符串接收;尤其不要用 JavaScript 数值保存大整数 ID。业务可空字段可能为 null,审计字段依注解及应用序列化策略可能省略,isDeleted 不对外输出。

时间字段的格式注解声明 GMT+8,其 Java 类型和数据库 datetime 都不携带时区。应用及数据库应统一时间口径;接口没有时间范围筛选参数。

获取详情与访问文件

请求:GET /api/app/download/center/id/{id}。把 {id} 替换成列表返回的记录 ID。

找不到记录、记录已逻辑删除,或 App 用户访问他人的记录时,默认抛出业务异常 business_not_found(未查询到指定的信息),不会返回成功的空 VO。HTTP 状态和完整错误包装由应用异常处理决定。

详情原样返回 filePath。它不是文件流接口,不会根据 status 阻止详情查询,也不会判断文件是否过期或存在。界面通常在 status=1 且地址可用时展示下载动作,文件服务仍需独立执行其访问控制。

删除与二次确认

请求:DELETE /api/app/download/center/id/{id},管理端使用对应管理前缀。两端都标记了 @AopRequestConfirm

二次确认自动配置要求 Servlet/AOP 相关类以及 StoreClientStoreLockManager Bean;满足装配条件且 own.confirm.enabled 为默认 true 时执行确认流程。缺少 Store 等前提时,不能假定注解一定会拦截删除。Store 接入示例见快速开始

默认处理器下的调用流程:

  1. 首次发起 DELETE,返回业务码 C0001 和确认提示,实际删除尚未执行。
  2. 从响应 data.keydata.token 取得请求头名与令牌,向用户展示 message
  3. 用户确认后,在令牌有效期内,使用相同登录身份、请求方法、地址和参数重发请求,并添加 data.key: data.token 请求头。
  4. 收到 code=00000data=true 后刷新列表。

默认请求头名为 X-RequestConfirm-token,注解默认有效期为 30 秒。客户端应使用响应实际返回的 key,不硬编码令牌,也不把 C0001 当成删除成功;应用若覆盖异常处理器,则按实际响应协议对接。

删除使用基础 PO 的逻辑删除规则,把 is_deleted0 更新为 1,后续普通查询不可见。它不删除实际文件,不取消正在运行的生成任务,也不提供恢复、批量删除或过期清理接口。通用确认提示中的“所有资料会被删除”不是文件清理实现承诺。

服务不根据删除影响行数返回不同结果:在确认及认证流程通过、且数据库调用没有异常时,重复删除、不存在的 ID,以及 App 删除不属于自己的 ID,都可能返回 data=true。App 的用户过滤仍然有效,不能据此认为他人的记录已被删除。