Browse Source

完成部分接口和ui开发

master
DU 1 month ago
parent
commit
5d91e750f7
  1. 1
      .gitignore
  2. 78
      AGENTS.md
  3. 12
      README.md
  4. 67
      docs/api/README.md
  5. 19991
      docs/api/catalog.json
  6. 68
      docs/api/modules/00-common-controller.md
  7. 153
      docs/api/modules/00-test-controller.md
  8. 1184
      docs/api/modules/01-hazard-management.md
  9. 215
      docs/api/modules/02-hazard-flow.md
  10. 211
      docs/api/modules/03-hazard-flow-config.md
  11. 464
      docs/api/modules/04-points-balance.md
  12. 485
      docs/api/modules/05-points-transaction.md
  13. 451
      docs/api/modules/06-points-rule.md
  14. 803
      docs/api/modules/07-points-appeal.md
  15. 484
      docs/api/modules/08-exchange-order.md
  16. 461
      docs/api/modules/09-exchange-item.md
  17. 449
      docs/api/modules/10-exchange-order-track.md
  18. 537
      docs/api/modules/11-exchange-config.md
  19. 467
      docs/api/modules/12-exchange-operation-log.md
  20. 565
      docs/api/modules/13-anti-farm-config.md
  21. 157
      docs/api/modules/14-mall-integration.md
  22. 431
      docs/api/modules/15-data-analysis.md
  23. 413
      docs/api/modules/16-audit-log.md
  24. 419
      docs/api/modules/17-flow-definition.md
  25. 958
      docs/api/modules/18-flow-task.md
  26. 147
      docs/api/modules/19-flow-instance.md
  27. 42
      docs/api/modules/20-flow-common.md
  28. 95
      docs/api/modules/21-flow-sign-task.md
  29. 54
      docs/api/modules/22-flow-sign.md
  30. 139
      docs/api/modules/23-user-message.md
  31. 43
      docs/api/modules/24-message.md
  32. 62
      docs/api/modules/25-system-tool.md
  33. 102
      docs/api/page-api-map.md
  34. 558
      docs/api/schemas.md
  35. 74
      docs/development/CURRENT_STATUS.md
  36. 231
      docs/development/CURRENT_TASK.md
  37. 50
      docs/development/DEVELOPMENT_LOG.md
  38. 134
      docs/development/README.md
  39. 4
      package.json
  40. 58
      src/api/hazard/audit.js
  41. 8
      src/api/hazard/ledger.js
  42. 18
      src/router/index.js
  43. 9
      src/views/flowable/hazardConfig/index.vue
  44. 9
      src/views/flowable/switchLog/index.vue
  45. 443
      src/views/hazard/audit/components/AuditActionForm.vue
  46. 97
      src/views/hazard/audit/components/FlowSyncPanel.vue
  47. 166
      src/views/hazard/audit/components/HazardReportPanel.vue
  48. 199
      src/views/hazard/audit/index.vue
  49. 55
      src/views/hazard/ledger/index.vue
  50. 9
      src/views/points/management/index.vue
  51. 1
      unused-files.json

1
.gitignore vendored

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
.DS_Store
node_modules/
dist/
scripts/
npm-debug.log*
yarn-debug.log*
yarn-error.log*

78
AGENTS.md

@ -0,0 +1,78 @@ @@ -0,0 +1,78 @@
# AI 开发协作规则
本文件适用于 `zhongyou_web` 整个项目。任何新开的 AI/Codex 窗口,在修改代码前必须执行以下流程。
## 一、开始开发前
1. 确认工作目录是 `C:\Du\work\duu\zhongyou\zhongyou_web`。
2. 完整阅读:
- `docs/development/README.md`
- `docs/development/CURRENT_STATUS.md`
- `docs/development/CURRENT_TASK.md`
- `docs/api/README.md`
- 涉及现有业务页面时,再读 `docs/api/page-api-map.md`
3. 执行 `git status --short`,检查用户已有改动;不得覆盖、回退或清理不属于当前任务的修改。
4. 检查用户点名的页面、相邻页面、`src/api` 请求封装、动态路由和公共组件,确认现状后再制定方案。
5. 在 `docs/development/CURRENT_TASK.md` 中先写清楚本次目标、范围、拟用接口、字段映射、风险和验收方式,然后才开始编码。
## 二、接口使用规则
1. 优先从 `docs/api/page-api-map.md` 按页面找接口;找不到时搜索 `docs/api/catalog.json`,再阅读 `docs/api/modules/` 下的对应模块和 `docs/api/schemas.md`。
2. Vue 页面内不直接调用 URL。请求统一封装到 `src/api/` 下相应业务文件中。
3. `public/static/config.js` 的 `MyConfig.BASE_API` 已包含 `/gd_dataserver`。`api.json` 中路径常为 `/gd_dataserver/gd_dataserver/...`,在 `src/api` 中通常只写第二个前缀之后的路径,例如:
```js
// api.json:
// /gd_dataserver/gd_dataserver/flowable/hazard/todoList
// 前端请求封装通常应写:
url: '/flowable/hazard/todoList'
```
实现前必须对照现有请求和部署配置确认,不能机械复制完整路径。
4. 当前请求拦截器默认发送 `Authorization: Bearer <token>`,但 `api.json` 声明的是 `X-Access-Token`。在没有联调证据前,不得擅自全局修改鉴权头;发现 401 时先与后端确认。
5. 接口模型、原型字段和页面字段不一致时,应建立明确映射并记录在 `CURRENT_TASK.md`;不得虚构字段。
6. OpenAPI 定义不完整时先记录阻塞点并向用户/后端确认。尤其注意:
- “切换日志”没有明确的独立列表接口。
- “手动调整积分”说明需要用户与积分值,但请求体仅声明单个整数,格式不完整。
- 多个通用 CRUD 响应只声明为 `object`,需要结合真实响应确认 `data/list/total` 结构。
## 三、页面开发规则
1. 新页面默认目录结构:
```text
src/views/<module>/<page>/
├─ index.vue
└─ components/
```
2. 页面专用组件放到本页面的 `components/`,可复用的跨业务组件才放 `src/components/`。
3. API 文件按业务模块划分,避免一个接口一个文件,也避免所有新接口堆到通用文件。
4. 菜单来自后端“系统管理 → 菜单管理”。新增页面时必须同时给出:菜单名称、上级菜单、菜单类型、路由地址、组件路径、权限字符和最终访问地址。
5. 列表页至少考虑:加载状态、查询/重置、分页、空数据、接口错误;删除/停用/审批等操作需要确认提示。
6. 不为了“看起来完成”而写假数据。接口未确认时保留清晰的空态或阻塞说明。
## 四、验证与交付
1. 修改 Vue/JS 后至少执行相关静态检查,并执行生产构建:
```powershell
& 'C:\Du\Modules\nvm\v22.14.0\npm.cmd' run build:prod
```
2. 当前项目是 Vue 2 + Vue CLI 4 + Webpack 4;构建脚本已包含 `--openssl-legacy-provider`,用于兼容 Node 22/OpenSSL 3。
3. `Browserslist` 过期和资源体积通常是警告,不等于构建失败;交付时要区分 warning 和 error。
4. 完成开发后必须更新:
- `docs/development/CURRENT_STATUS.md`:当前已实现/未实现状态。
- `docs/development/DEVELOPMENT_LOG.md`:追加本次改动、接口、验证和遗留问题。
- `docs/api/page-api-map.md`:页面实际使用的接口或字段发生变化时更新。
- `docs/development/CURRENT_TASK.md`:标记完成情况和剩余事项。
5. 最终回复必须说明:完成内容、关键文件、实际使用接口、验证结果、仍需用户或后端确认的内容。
## 五、禁止事项
- 不回退用户现有改动,不对无关文件做批量格式化。
- 不直接编辑 `dist`;通过构建生成。
- 不手工修改自动生成的 `docs/api/modules/`、`docs/api/schemas.md`、`docs/api/catalog.json`。`api.json` 更新后运行 `npm run docs:api`。
- 不在未授权时修改生产地址、Token 策略或调用真实的删除/审批/扣减积分接口。
- 不声称接口联调成功,除非实际拿到成功响应并核对数据结构。

12
README.md

@ -1,3 +1,13 @@ @@ -1,3 +1,13 @@
## 项目开发资料
- [前端开发手册](./docs/development/README.md)
- [当前开发状态](./docs/development/CURRENT_STATUS.md)
- [当前任务模板](./docs/development/CURRENT_TASK.md)
- [开发日志](./docs/development/DEVELOPMENT_LOG.md)
- [API 接口资料中心](./docs/api/README.md)
新开的 AI 开发窗口必须先阅读项目根目录的 [AGENTS.md](./AGENTS.md),梳理任务、接口和字段后再修改代码。
## 开发
```bash
@ -27,4 +37,4 @@ npm run build:stage @@ -27,4 +37,4 @@ npm run build:stage
# 构建生产环境
npm run build:prod
```
```

67
docs/api/README.md

@ -0,0 +1,67 @@ @@ -0,0 +1,67 @@
# API 接口资料中心
> 本目录由项目上级目录的 `api.json` 生成,用于开发时快速定位接口、用途和字段。不要直接手工修改 `modules/`、`schemas.md` 和 `catalog.json`;源文件更新后重新运行生成脚本。
## 文档概况
- OpenAPI:`3.0.3`
- 文档标题:标题:管理系统_接口文档
- 文档版本:版本号:3.8.7
- 服务地址:`http://www.bjsdqc.cn:10090`
- 鉴权定义:`X-Access-Token`(apiKey,header: X-Access-Token)
- 接口数量:278
- 数据模型:32
## 开发时怎么查
1. 先打开 [页面接口映射](./page-api-map.md),按页面找到需要的接口和主要字段。
2. 再进入下方对应业务模块,查看完整请求参数、请求体和响应模型。
3. 需要跨模块全文检索时,在本目录搜索接口中文名、字段名或 URL 片段。
4. 程序化检索使用 [catalog.json](./catalog.json),数据模型统一查看 [schemas.md](./schemas.md)。
## 业务模块
| 模块 | 接口数 | 文档 |
| --- | --- | --- |
| common-controller | 2 | [打开](./modules/00-common-controller.md) |
| test-controller-1 | 5 | [打开](./modules/00-test-controller.md) |
| 隐患信息管理 | 21 | [打开](./modules/01-hazard-management.md) |
| 隐患上报流程 | 6 | [打开](./modules/02-hazard-flow.md) |
| 隐患流程模板配置 | 6 | [打开](./modules/03-hazard-flow-config.md) |
| 用户积分账户 | 15 | [打开](./modules/04-points-balance.md) |
| 积分流水明细 | 14 | [打开](./modules/05-points-transaction.md) |
| 积分规则配置 | 14 | [打开](./modules/06-points-rule.md) |
| 积分申诉管理 | 21 | [打开](./modules/07-points-appeal.md) |
| 积分兑换订单管理 | 14 | [打开](./modules/08-exchange-order.md) |
| 兑换物品管理 | 14 | [打开](./modules/09-exchange-item.md) |
| 兑换订单追踪 | 14 | [打开](./modules/10-exchange-order-track.md) |
| 兑换安全配置 | 16 | [打开](./modules/11-exchange-config.md) |
| 兑换操作日志 | 14 | [打开](./modules/12-exchange-operation-log.md) |
| 防刷分管控配置 | 18 | [打开](./modules/13-anti-farm-config.md) |
| 商城端接口对接 | 4 | [打开](./modules/14-mall-integration.md) |
| 数据分析 | 17 | [打开](./modules/15-data-analysis.md) |
| 操作审计日志 | 13 | [打开](./modules/16-audit-log.md) |
| 流程定义 | 11 | [打开](./modules/17-flow-definition.md) |
| 工作流流程任务管理 | 23 | [打开](./modules/18-flow-task.md) |
| 工作流流程实例管理 | 4 | [打开](./modules/19-flow-instance.md) |
| 工作流流程_公用信息 | 1 | [打开](./modules/20-flow-common.md) |
| 工作流流程_签字审批 | 2 | [打开](./modules/21-flow-sign-task.md) |
| 流程审批_签字 | 1 | [打开](./modules/22-flow-sign.md) |
| 用户消息中心 | 5 | [打开](./modules/23-user-message.md) |
| 消息处理接口 | 1 | [打开](./modules/24-message.md) |
| 系统工具 | 2 | [打开](./modules/25-system-tool.md) |
## 更新文档
在 `zhongyou_web` 目录执行:
```powershell
npm run docs:api
```
## 联调注意事项
- OpenAPI 中的服务器地址和多数路径都含有 `/gd_dataserver`,部分完整路径出现两次;前端接入时应结合 `VUE_APP_BASE_API` 与请求代理确认,避免重复拼接。
- 大部分接口声明使用请求头 `X-Access-Token`。商城对接接口还单独声明了 `token` 请求头,联调前需向后端确认两者的关系。
- 一些通用 CRUD 接口的响应只声明为 `object`,页面字段应以具体实体模型和真实响应为准。
- 本文档描述接口能力,不代表当前登录角色一定拥有调用权限。

19991
docs/api/catalog.json

File diff suppressed because it is too large Load Diff

68
docs/api/modules/00-common-controller.md

@ -0,0 +1,68 @@ @@ -0,0 +1,68 @@
# common-controller
本模块共 2 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 文件删除接口 | POST | `/gd_dataserver/gd_dataserver/common/deletefile` | - |
| 文件删除接口 | POST | `/gd_dataserver/gd_dataserver/common/deletefilelist` | - |
## 接口详情
### 文件删除接口
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/common/deletefile`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deletefileUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| fileName | query | 是 | string | fileName | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 文件删除接口
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/common/deletefilelist`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deletefilelistUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| fileNamelist | query | 是 | string | fileNamelist | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

153
docs/api/modules/00-test-controller.md

@ -0,0 +1,153 @@ @@ -0,0 +1,153 @@
# test-controller-1
本模块共 5 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 获取用户列表 | GET | `/gd_dataserver/gd_dataserver/test/user/list` | - |
| 新增用户 | POST | `/gd_dataserver/gd_dataserver/test/user/save` | - |
| 更新用户 | PUT | `/gd_dataserver/gd_dataserver/test/user/update` | - |
| 获取用户详细 | GET | `/gd_dataserver/gd_dataserver/test/user/{userId}` | - |
| 删除用户信息 | DELETE | `/gd_dataserver/gd_dataserver/test/user/{userId}` | - |
## 接口详情
### 获取用户列表
- **用途:** 接口文档未提供用途说明。
- **请求:** `GET /gd_dataserver/gd_dataserver/test/user/list`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `userListUsingGET_1`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: R«List«UserEntity»» |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 新增用户
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/test/user/save`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `saveUsingPOST_2`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| mobile | query | 否 | string | 用户手机 | - |
| password | query | 否 | string | 用户密码 | - |
| userId | query | 否 | integer / int32 | 用户id | - |
| username | query | 否 | string | 用户名称 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: R«string» |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 更新用户
- **用途:** 接口文档未提供用途说明。
- **请求:** `PUT /gd_dataserver/gd_dataserver/test/user/update`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `updateUsingPUT`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`UserEntity`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| mobile | 否 | string | 用户手机 | - |
| password | 否 | string | 用户密码 | - |
| userId | 否 | integer / int32 | 用户ID | - |
| username | 否 | string | 用户名称 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: R«string» |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 获取用户详细
- **用途:** 接口文档未提供用途说明。
- **请求:** `GET /gd_dataserver/gd_dataserver/test/user/{userId}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getUserUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| userId | path | 是 | integer / int32 | 用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: R«UserEntity» |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 删除用户信息
- **用途:** 接口文档未提供用途说明。
- **请求:** `DELETE /gd_dataserver/gd_dataserver/test/user/{userId}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteUsingDELETE_2`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| userId | path | 是 | integer / int32 | 用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: R«string» |
| 204 | No Content | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |

1184
docs/api/modules/01-hazard-management.md

File diff suppressed because it is too large Load Diff

215
docs/api/modules/02-hazard-flow.md

@ -0,0 +1,215 @@ @@ -0,0 +1,215 @@
# 隐患上报流程
本模块共 6 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 审批隐患流程 | POST | `/gd_dataserver/gd_dataserver/flowable/hazard/complete` | 审批通过或驳回,需携带taskId、comment、result等信息。成功返回 data 为 null;失败返回 error 信息。 |
| 隐患流程详情 | GET | `/gd_dataserver/gd_dataserver/flowable/hazard/detail/{id}` | 返回 data 为 HazardReport 对象,包含完整隐患字段及流程状态信息。主要字段:id、reportNo、hazardName、status-状态编码、flowStatus-流程状态、canApprove-是否可审批。 |
| 上报隐患并提交流程 | POST | `/gd_dataserver/gd_dataserver/flowable/hazard/submitFlow` | 先调用uploadAttachment上传附件,再将report和attachments一起提交。成功返回 data 为流程实例ID字符串;失败返回 error 信息。 |
| 切换隐患流程等级 | POST | `/gd_dataserver/gd_dataserver/flowable/hazard/switchLevel` | 审批过程中重新评估隐患等级,作废当前流程并以新等级重新启动审批。等级编码:general-一般隐患 / major-较大隐患 / critical-重大隐患。返回新流程实例ID。 |
| 隐患流程待办/已办列表 | GET | `/gd_dataserver/gd_dataserver/flowable/hazard/todoList` | 返回 data 为 PageInfo 分页对象。list 中每条记录为 HazardReport 对象,包含 id、reportNo、hazardName、status、createTime 等字段。支持 pageNum、pageSize 等筛选参数。 |
| 上传隐患附件文件 | POST | `/gd_dataserver/gd_dataserver/flowable/hazard/uploadAttachment` | 上传文件到服务器,返回 data 为 HazardAttachment 数组,每个元素包含:id、fileName-文件名、filePath-文件路径、fileSize-文件大小、fileType-MIME类型、attachmentType-附件类型。前端在调用submitFlow时将附件数据传入 |
## 接口详情
### 审批隐患流程
- **用途:** 审批通过或驳回,需携带taskId、comment、result等信息。成功返回 data 为 null;失败返回 error 信息。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/hazard/complete`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `completeUsingPOST_2`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流签字任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | 部署ID | - |
| file | 否 | string | 拍照 | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| qz | 否 | string | 任务签字 | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| taskName | 否 | string | 任务名称 | - |
| type | 否 | string | 业务类型 | - |
| userId | 否 | string | 用户Id | - |
| userName | 否 | string | 用户名称 | - |
| variables | 否 | object | 流程变量信息 | - |
| zyxkid | 否 | string | 作业许可Id | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 隐患流程详情
- **用途:** 返回 data 为 HazardReport 对象,包含完整隐患字段及流程状态信息。主要字段:id、reportNo、hazardName、status-状态编码、flowStatus-流程状态、canApprove-是否可审批。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/hazard/detail/{id}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `detailUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | path | 是 | integer / int64 | 隐患ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 上报隐患并提交流程
- **用途:** 先调用uploadAttachment上传附件,再将report和attachments一起提交。成功返回 data 为流程实例ID字符串;失败返回 error 信息。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/hazard/submitFlow`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `submitFlowUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`隐患上报流程提交请求`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| attachments | 否 | array<隐患附件> | 附件列表(先调用uploadAttachment接口获取) | - |
| report | 是 | 隐患信息 | 隐患信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 切换隐患流程等级
- **用途:** 审批过程中重新评估隐患等级,作废当前流程并以新等级重新启动审批。等级编码:general-一般隐患 / major-较大隐患 / critical-重大隐患。返回新流程实例ID。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/hazard/switchLevel`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `switchLevelUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| reportId | query | 是 | integer / int64 | 隐患记录ID | - |
| newHazardLevel | query | 是 | string | 目标等级编码(general/major/critical) | - |
| switchReason | query | 否 | string | 切换原因 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 隐患流程待办/已办列表
- **用途:** 返回 data 为 PageInfo 分页对象。list 中每条记录为 HazardReport 对象,包含 id、reportNo、hazardName、status、createTime 等字段。支持 pageNum、pageSize 等筛选参数。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/hazard/todoList`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `todoListUsingGET_1`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| params | query | 是 | object<string, string> | 查询参数(支持pageNum/pageSize等) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 上传隐患附件文件
- **用途:** 上传文件到服务器,返回 data 为 HazardAttachment 数组,每个元素包含:id、fileName-文件名、filePath-文件路径、fileSize-文件大小、fileType-MIME类型、attachmentType-附件类型。前端在调用submitFlow时将附件数据传入
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/hazard/uploadAttachment`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `uploadAttachmentUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| attachmentType | query | 否 | string | 附件类型:IMAGE-图片 VIDEO-视频 DOCUMENT-文档 OTHER-其他 | - |
请求体:
- Content-Type:`application/json`
- 模型:`string / binary`
- 必填:文档未标记
- Content-Type:`application/octet-stream`
- 模型:`string / binary`
- 必填:文档未标记
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

211
docs/api/modules/03-hazard-flow-config.md

@ -0,0 +1,211 @@ @@ -0,0 +1,211 @@
# 隐患流程模板配置
本模块共 6 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 修改流程模板配置 | PUT | `/gd_dataserver/gd_dataserver/flowable/hazardFlowConfig` | 修改流程Key、流程名称等信息。不可修改厂区ID和隐患等级。 |
| 新增流程模板配置 | POST | `/gd_dataserver/gd_dataserver/flowable/hazardFlowConfig` | 配置某个厂区的某个隐患等级对应的Flowable流程Key。二级管理员无需传deptId/deptName,系统自动填充所属厂区。每个厂区的每个等级只能配置一条(唯一约束)。 |
| 查询流程模板配置列表 | GET | `/gd_dataserver/gd_dataserver/flowable/hazardFlowConfig/list` | 系统管理员返回所有配置;二级管理员自动过滤为所属厂区的配置。可选按厂区ID、隐患等级筛选。 |
| 获取当前厂区已配置的流程模板 | GET | `/gd_dataserver/gd_dataserver/flowable/hazardFlowConfig/myFactoryConfigs` | 前端上报隐患时调用,返回当前用户所属厂区已配置的隐患等级和对应流程信息,用于前端展示可选的隐患等级下拉。 |
| 获取流程模板配置详情 | GET | `/gd_dataserver/gd_dataserver/flowable/hazardFlowConfig/{id}` | - |
| 删除流程模板配置 | DELETE | `/gd_dataserver/gd_dataserver/flowable/hazardFlowConfig/{id}` | 逻辑删除,将状态置为停用。 |
## 接口详情
### 修改流程模板配置
- **用途:** 修改流程Key、流程名称等信息。不可修改厂区ID和隐患等级。
- **请求:** `PUT /gd_dataserver/gd_dataserver/flowable/hazardFlowConfig`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `editUsingPUT`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`隐患流程模板配置`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createBy | 否 | string | - | - |
| createByName | 否 | string | - | - |
| createTime | 否 | string / date-time | - | - |
| deptId | 是 | string | 部门ID(厂区) | 100 |
| deptName | 否 | string | 部门名称 | 一厂 |
| flowKey | 是 | string | Flowable流程定义Key | hazard_general_flow |
| flowName | 否 | string | 流程名称 | 一般隐患奖励审批流程 |
| hazardLevel | 是 | string | 隐患等级编码(general-一般/major-较大/critical-重大) | general |
| hazardLevelName | 否 | string | 隐患等级名称 | 一般隐患 |
| id | 否 | integer / int64 | 主键ID | - |
| params | 否 | object | - | - |
| status | 否 | string | 状态(0停用 1正常) | 1 |
| updateBy | 否 | string | - | - |
| updateByName | 否 | string | - | - |
| updateTime | 否 | string / date-time | - | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 新增流程模板配置
- **用途:** 配置某个厂区的某个隐患等级对应的Flowable流程Key。二级管理员无需传deptId/deptName,系统自动填充所属厂区。每个厂区的每个等级只能配置一条(唯一约束)。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/hazardFlowConfig`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`隐患流程模板配置`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createBy | 否 | string | - | - |
| createByName | 否 | string | - | - |
| createTime | 否 | string / date-time | - | - |
| deptId | 是 | string | 部门ID(厂区) | 100 |
| deptName | 否 | string | 部门名称 | 一厂 |
| flowKey | 是 | string | Flowable流程定义Key | hazard_general_flow |
| flowName | 否 | string | 流程名称 | 一般隐患奖励审批流程 |
| hazardLevel | 是 | string | 隐患等级编码(general-一般/major-较大/critical-重大) | general |
| hazardLevelName | 否 | string | 隐患等级名称 | 一般隐患 |
| id | 否 | integer / int64 | 主键ID | - |
| params | 否 | object | - | - |
| status | 否 | string | 状态(0停用 1正常) | 1 |
| updateBy | 否 | string | - | - |
| updateByName | 否 | string | - | - |
| updateTime | 否 | string / date-time | - | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询流程模板配置列表
- **用途:** 系统管理员返回所有配置;二级管理员自动过滤为所属厂区的配置。可选按厂区ID、隐患等级筛选。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/hazardFlowConfig/list`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `listUsingGET_1`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| pageNum | query | 是 | integer / int32 | 当前页码 | - |
| pageSize | query | 是 | integer / int32 | 每页条数 | - |
| deptId | query | 否 | string | 厂区部门ID(不传则按当前用户权限自动过滤) | - |
| hazardLevel | query | 否 | string | 隐患等级编码(general/major/critical) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 获取当前厂区已配置的流程模板
- **用途:** 前端上报隐患时调用,返回当前用户所属厂区已配置的隐患等级和对应流程信息,用于前端展示可选的隐患等级下拉。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/hazardFlowConfig/myFactoryConfigs`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `myFactoryConfigsUsingGET`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 获取流程模板配置详情
- **用途:** 接口文档未提供用途说明。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/hazardFlowConfig/{id}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getInfoUsingGET_1`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | path | 是 | integer / int64 | 配置ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 删除流程模板配置
- **用途:** 逻辑删除,将状态置为停用。
- **请求:** `DELETE /gd_dataserver/gd_dataserver/flowable/hazardFlowConfig/{id}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `removeUsingDELETE_1`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | path | 是 | integer / int64 | 配置ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 204 | No Content | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |

464
docs/api/modules/04-points-balance.md

@ -0,0 +1,464 @@ @@ -0,0 +1,464 @@
# 用户积分账户
本模块共 15 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 新增 | POST | `/gd_dataserver/gd_dataserver/business/points/balance/add` | 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。 |
| 批量新增 | POST | `/gd_dataserver/gd_dataserver/business/points/balance/addBatch` | 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。 |
| 新增并返回保存的数据 | POST | `/gd_dataserver/gd_dataserver/business/points/balance/addReturn` | 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。 |
| 手动调整积分(PC管理端) | POST | `/gd_dataserver/gd_dataserver/business/points/balance/adjust` | 管理员手动补发或扣减指定用户的积分。points为正数补发,为负数扣减。操作会同时生成积分流水(bizType=MANUAL_ADD/MANUAL_DEDUCT)和审计日志。返回 data 为 boolean,true-调整成功。 |
| 根据属性删除 | GET | `/gd_dataserver/gd_dataserver/business/points/balance/delete` | 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。 |
| 主键删除 | GET | `/gd_dataserver/gd_dataserver/business/points/balance/deleteById` | 根据主键ID删除单条记录,成功返回 data 为 null。 |
| 批量删除 | GET | `/gd_dataserver/gd_dataserver/business/points/balance/deleteByIds` | 根据ID列表批量删除记录,成功返回 data 为 null。 |
| 查询所有 | GET | `/gd_dataserver/gd_dataserver/business/points/balance/getAll` | 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。 |
| 查询用户积分账户 | GET | `/gd_dataserver/gd_dataserver/business/points/balance/getByUserId/{userId}` | 返回 data 为 AccountBalance 对象。字段:userId-用户ID、availableBalance-可用积分余额、frozenBalance-冻结积分、totalIncome-历史总入账、totalOutcome-历史总出账。 |
| 分页查询 | GET | `/gd_dataserver/gd_dataserver/business/points/balance/getListByPage` | 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。 |
| 详情 | GET | `/gd_dataserver/gd_dataserver/business/points/balance/info` | 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。 |
| 条件查询 | GET | `/gd_dataserver/gd_dataserver/business/points/balance/list` | 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。 |
| 查询当前用户积分账户(APP端) | GET | `/gd_dataserver/gd_dataserver/business/points/balance/my` | 返回 data 为 AccountBalance 对象。字段:userId-用户ID、availableBalance-可用积分余额、frozenBalance-冻结积分、totalIncome-历史总入账、totalOutcome-历史总出账。 |
| 逻辑删除 | GET | `/gd_dataserver/gd_dataserver/business/points/balance/removeById` | 根据主键ID逻辑删除单条记录,成功返回 data 为 null。 |
| 修改 | POST | `/gd_dataserver/gd_dataserver/business/points/balance/updateById` | 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。 |
## 接口详情
### 新增
- **用途:** 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/balance/add`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addOneUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`用户积分账户`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| availableBalance | 否 | integer / int32 | 可用积分余额 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| frozenBalance | 否 | integer / int32 | 冻结积分余额 | - |
| id | 否 | integer / int64 | 主键ID | - |
| totalIncome | 否 | integer / int32 | 历史总入账积分 | - |
| totalOutcome | 否 | integer / int32 | 历史总出账积分 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| userId | 否 | integer / int64 | 用户ID | - |
| version | 否 | integer / int32 | 乐观锁版本号 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量新增
- **用途:** 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/balance/addBatch`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addBatchUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`array<用户积分账户>`
- 必填:文档未标记
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 新增并返回保存的数据
- **用途:** 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/balance/addReturn`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addReturnUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`用户积分账户`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| availableBalance | 否 | integer / int32 | 可用积分余额 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| frozenBalance | 否 | integer / int32 | 冻结积分余额 | - |
| id | 否 | integer / int64 | 主键ID | - |
| totalIncome | 否 | integer / int32 | 历史总入账积分 | - |
| totalOutcome | 否 | integer / int32 | 历史总出账积分 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| userId | 否 | integer / int64 | 用户ID | - |
| version | 否 | integer / int32 | 乐观锁版本号 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 手动调整积分(PC管理端)
- **用途:** 管理员手动补发或扣减指定用户的积分。points为正数补发,为负数扣减。操作会同时生成积分流水(bizType=MANUAL_ADD/MANUAL_DEDUCT)和审计日志。返回 data 为 boolean,true-调整成功。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/balance/adjust`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `adjustPointsUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/x-www-form-urlencoded`
- 模型:`integer / int32`
- 必填:文档未标记
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 根据属性删除
- **用途:** 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/balance/delete`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| availableBalance | query | 否 | integer / int32 | 可用积分余额 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| frozenBalance | query | 否 | integer / int32 | 冻结积分余额 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| totalIncome | query | 否 | integer / int32 | 历史总入账积分 | - |
| totalOutcome | query | 否 | integer / int32 | 历史总出账积分 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| userId | query | 否 | integer / int64 | 用户ID | - |
| version | query | 否 | integer / int32 | 乐观锁版本号 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 主键删除
- **用途:** 根据主键ID删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/balance/deleteById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteOneUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量删除
- **用途:** 根据ID列表批量删除记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/balance/deleteByIds`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_1`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| ids | query | 是 | string | ID列表(逗号分隔) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询所有
- **用途:** 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/balance/getAll`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getAllUsingGET`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询用户积分账户
- **用途:** 返回 data 为 AccountBalance 对象。字段:userId-用户ID、availableBalance-可用积分余额、frozenBalance-冻结积分、totalIncome-历史总入账、totalOutcome-历史总出账。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/balance/getByUserId/{userId}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getByUserIdUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| userId | path | 是 | integer / int64 | 用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 分页查询
- **用途:** 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/balance/getListByPage`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListByPageUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| availableBalance | query | 否 | integer / int32 | 可用积分余额 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| frozenBalance | query | 否 | integer / int32 | 冻结积分余额 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| pageNum | query | 是 | integer / int32 | 页码 | - |
| totalIncome | query | 否 | integer / int32 | 历史总入账积分 | - |
| totalOutcome | query | 否 | integer / int32 | 历史总出账积分 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| userId | query | 否 | integer / int64 | 用户ID | - |
| version | query | 否 | integer / int32 | 乐观锁版本号 | - |
| pageSize | query | 是 | integer / int32 | 每页条数 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 详情
- **用途:** 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/balance/info`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `infoUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 条件查询
- **用途:** 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/balance/list`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| availableBalance | query | 否 | integer / int32 | 可用积分余额 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| frozenBalance | query | 否 | integer / int32 | 冻结积分余额 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| totalIncome | query | 否 | integer / int32 | 历史总入账积分 | - |
| totalOutcome | query | 否 | integer / int32 | 历史总出账积分 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| userId | query | 否 | integer / int64 | 用户ID | - |
| version | query | 否 | integer / int32 | 乐观锁版本号 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询当前用户积分账户(APP端)
- **用途:** 返回 data 为 AccountBalance 对象。字段:userId-用户ID、availableBalance-可用积分余额、frozenBalance-冻结积分、totalIncome-历史总入账、totalOutcome-历史总出账。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/balance/my`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `myBalanceUsingGET`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 逻辑删除
- **用途:** 根据主键ID逻辑删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/balance/removeById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 修改
- **用途:** 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/balance/updateById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `updateByIdUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`用户积分账户`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| availableBalance | 否 | integer / int32 | 可用积分余额 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| frozenBalance | 否 | integer / int32 | 冻结积分余额 | - |
| id | 否 | integer / int64 | 主键ID | - |
| totalIncome | 否 | integer / int32 | 历史总入账积分 | - |
| totalOutcome | 否 | integer / int32 | 历史总出账积分 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| userId | 否 | integer / int64 | 用户ID | - |
| version | 否 | integer / int32 | 乐观锁版本号 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

485
docs/api/modules/05-points-transaction.md

@ -0,0 +1,485 @@ @@ -0,0 +1,485 @@
# 积分流水明细
本模块共 14 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 新增 | POST | `/gd_dataserver/gd_dataserver/business/points/transaction/add` | 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。 |
| 批量新增 | POST | `/gd_dataserver/gd_dataserver/business/points/transaction/addBatch` | 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。 |
| 新增并返回保存的数据 | POST | `/gd_dataserver/gd_dataserver/business/points/transaction/addReturn` | 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。 |
| 根据属性删除 | GET | `/gd_dataserver/gd_dataserver/business/points/transaction/delete` | 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。 |
| 主键删除 | GET | `/gd_dataserver/gd_dataserver/business/points/transaction/deleteById` | 根据主键ID删除单条记录,成功返回 data 为 null。 |
| 批量删除 | GET | `/gd_dataserver/gd_dataserver/business/points/transaction/deleteByIds` | 根据ID列表批量删除记录,成功返回 data 为 null。 |
| 查询所有 | GET | `/gd_dataserver/gd_dataserver/business/points/transaction/getAll` | 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。 |
| 分页查询 | GET | `/gd_dataserver/gd_dataserver/business/points/transaction/getListByPage` | 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。 |
| 详情 | GET | `/gd_dataserver/gd_dataserver/business/points/transaction/info` | 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。 |
| 条件查询 | GET | `/gd_dataserver/gd_dataserver/business/points/transaction/list` | 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。 |
| 查询我的积分流水(APP端) | GET | `/gd_dataserver/gd_dataserver/business/points/transaction/myList` | 返回 data 为 PageInfo 分页对象。list 中每条记录为 PointsTransactionLog 对象,主要字段:txnNo-流水号、userId-用户ID、bizId-业务单号、bizType-业务类型(REPORT-上报奖励/EXCHANGE-兑换扣减/REFUND-退款/APPEAL_ADD-申诉补发/APPEAL_DEDUCT-申诉扣减/MALL_DEDUCT-商城扣减/MALL_REFUND-商城退款)、amount-变动积分(正=入账,负=出账)、beforeBalance-变动前余额、afterBalance-变动后余额、status-状态(1有效/2已冲正)、createTime-创建时间。 |
| 逻辑删除 | GET | `/gd_dataserver/gd_dataserver/business/points/transaction/removeById` | 根据主键ID逻辑删除单条记录,成功返回 data 为 null。 |
| 积分冲正 | POST | `/gd_dataserver/gd_dataserver/business/points/transaction/reverse/{logId}` | 根据流水ID冲正该笔积分变动,原流水标记为已冲正(status=2),并生成反向流水。返回 data 为 boolean,true-冲正成功。 |
| 修改 | POST | `/gd_dataserver/gd_dataserver/business/points/transaction/updateById` | 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。 |
## 接口详情
### 新增
- **用途:** 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/transaction/add`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addOneUsingPOST_11`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`积分流水明细`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| afterBalance | 否 | integer / int32 | 变动后可用余额 | - |
| afterFrozen | 否 | integer / int32 | 变动后冻结余额 | - |
| amount | 否 | integer / int32 | 变动积分(正数=入账,负数=出账) | - |
| beforeBalance | 否 | integer / int32 | 变动前可用余额 | - |
| beforeFrozen | 否 | integer / int32 | 变动前冻结余额 | - |
| bizId | 否 | string | 业务单号 | - |
| bizType | 否 | string | 业务类型:REPORT-隐患上报奖励 EXCHANGE-兑换扣减 REFUND-退款回滚 FREEZE-冻结 UNFREEZE-解冻 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| id | 否 | integer / int64 | 主键ID | - |
| operator | 否 | string | 操作人 | - |
| remark | 否 | string | 备注 | - |
| status | 否 | integer / int32 | 状态:1-有效 2-已冲正 | - |
| txnNo | 否 | string | 流水号 | - |
| userId | 否 | integer / int64 | 用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量新增
- **用途:** 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/transaction/addBatch`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addBatchUsingPOST_11`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`array<积分流水明细>`
- 必填:文档未标记
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 新增并返回保存的数据
- **用途:** 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/transaction/addReturn`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addReturnUsingPOST_11`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`积分流水明细`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| afterBalance | 否 | integer / int32 | 变动后可用余额 | - |
| afterFrozen | 否 | integer / int32 | 变动后冻结余额 | - |
| amount | 否 | integer / int32 | 变动积分(正数=入账,负数=出账) | - |
| beforeBalance | 否 | integer / int32 | 变动前可用余额 | - |
| beforeFrozen | 否 | integer / int32 | 变动前冻结余额 | - |
| bizId | 否 | string | 业务单号 | - |
| bizType | 否 | string | 业务类型:REPORT-隐患上报奖励 EXCHANGE-兑换扣减 REFUND-退款回滚 FREEZE-冻结 UNFREEZE-解冻 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| id | 否 | integer / int64 | 主键ID | - |
| operator | 否 | string | 操作人 | - |
| remark | 否 | string | 备注 | - |
| status | 否 | integer / int32 | 状态:1-有效 2-已冲正 | - |
| txnNo | 否 | string | 流水号 | - |
| userId | 否 | integer / int64 | 用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 根据属性删除
- **用途:** 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/transaction/delete`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteUsingGET_11`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| afterBalance | query | 否 | integer / int32 | 变动后可用余额 | - |
| afterFrozen | query | 否 | integer / int32 | 变动后冻结余额 | - |
| amount | query | 否 | integer / int32 | 变动积分(正数=入账,负数=出账) | - |
| beforeBalance | query | 否 | integer / int32 | 变动前可用余额 | - |
| beforeFrozen | query | 否 | integer / int32 | 变动前冻结余额 | - |
| bizId | query | 否 | string | 业务单号 | - |
| bizType | query | 否 | string | 业务类型:REPORT-隐患上报奖励 EXCHANGE-兑换扣减 REFUND-退款回滚 FREEZE-冻结 UNFREEZE-解冻 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| operator | query | 否 | string | 操作人 | - |
| remark | query | 否 | string | 备注 | - |
| status | query | 否 | integer / int32 | 状态:1-有效 2-已冲正 | - |
| txnNo | query | 否 | string | 流水号 | - |
| userId | query | 否 | integer / int64 | 用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 主键删除
- **用途:** 根据主键ID删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/transaction/deleteById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteOneUsingGET_11`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量删除
- **用途:** 根据ID列表批量删除记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/transaction/deleteByIds`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_23`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| ids | query | 是 | string | ID列表(逗号分隔) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询所有
- **用途:** 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/transaction/getAll`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getAllUsingGET_11`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 分页查询
- **用途:** 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/transaction/getListByPage`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListByPageUsingGET_11`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| afterBalance | query | 否 | integer / int32 | 变动后可用余额 | - |
| afterFrozen | query | 否 | integer / int32 | 变动后冻结余额 | - |
| amount | query | 否 | integer / int32 | 变动积分(正数=入账,负数=出账) | - |
| beforeBalance | query | 否 | integer / int32 | 变动前可用余额 | - |
| beforeFrozen | query | 否 | integer / int32 | 变动前冻结余额 | - |
| bizId | query | 否 | string | 业务单号 | - |
| bizType | query | 否 | string | 业务类型:REPORT-隐患上报奖励 EXCHANGE-兑换扣减 REFUND-退款回滚 FREEZE-冻结 UNFREEZE-解冻 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| operator | query | 否 | string | 操作人 | - |
| pageNum | query | 是 | integer / int32 | 页码 | - |
| remark | query | 否 | string | 备注 | - |
| status | query | 否 | integer / int32 | 状态:1-有效 2-已冲正 | - |
| txnNo | query | 否 | string | 流水号 | - |
| userId | query | 否 | integer / int64 | 用户ID | - |
| pageSize | query | 是 | integer / int32 | 每页条数 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 详情
- **用途:** 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/transaction/info`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `infoUsingGET_11`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 条件查询
- **用途:** 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/transaction/list`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListUsingGET_11`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| afterBalance | query | 否 | integer / int32 | 变动后可用余额 | - |
| afterFrozen | query | 否 | integer / int32 | 变动后冻结余额 | - |
| amount | query | 否 | integer / int32 | 变动积分(正数=入账,负数=出账) | - |
| beforeBalance | query | 否 | integer / int32 | 变动前可用余额 | - |
| beforeFrozen | query | 否 | integer / int32 | 变动前冻结余额 | - |
| bizId | query | 否 | string | 业务单号 | - |
| bizType | query | 否 | string | 业务类型:REPORT-隐患上报奖励 EXCHANGE-兑换扣减 REFUND-退款回滚 FREEZE-冻结 UNFREEZE-解冻 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| operator | query | 否 | string | 操作人 | - |
| remark | query | 否 | string | 备注 | - |
| status | query | 否 | integer / int32 | 状态:1-有效 2-已冲正 | - |
| txnNo | query | 否 | string | 流水号 | - |
| userId | query | 否 | integer / int64 | 用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询我的积分流水(APP端)
- **用途:** 返回 data 为 PageInfo 分页对象。list 中每条记录为 PointsTransactionLog 对象,主要字段:txnNo-流水号、userId-用户ID、bizId-业务单号、bizType-业务类型(REPORT-上报奖励/EXCHANGE-兑换扣减/REFUND-退款/APPEAL_ADD-申诉补发/APPEAL_DEDUCT-申诉扣减/MALL_DEDUCT-商城扣减/MALL_REFUND-商城退款)、amount-变动积分(正=入账,负=出账)、beforeBalance-变动前余额、afterBalance-变动后余额、status-状态(1有效/2已冲正)、createTime-创建时间。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/transaction/myList`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `myListUsingGET_3`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| afterBalance | query | 否 | integer / int32 | 变动后可用余额 | - |
| afterFrozen | query | 否 | integer / int32 | 变动后冻结余额 | - |
| amount | query | 否 | integer / int32 | 变动积分(正数=入账,负数=出账) | - |
| beforeBalance | query | 否 | integer / int32 | 变动前可用余额 | - |
| beforeFrozen | query | 否 | integer / int32 | 变动前冻结余额 | - |
| bizId | query | 否 | string | 业务单号 | - |
| bizType | query | 否 | string | 业务类型:REPORT-隐患上报奖励 EXCHANGE-兑换扣减 REFUND-退款回滚 FREEZE-冻结 UNFREEZE-解冻 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| operator | query | 否 | string | 操作人 | - |
| pageNum | query | 否 | integer / int32 | 页码 | - |
| remark | query | 否 | string | 备注 | - |
| status | query | 否 | integer / int32 | 状态:1-有效 2-已冲正 | - |
| txnNo | query | 否 | string | 流水号 | - |
| userId | query | 否 | integer / int64 | 用户ID | - |
| pageSize | query | 否 | integer / int32 | 每页数量 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 逻辑删除
- **用途:** 根据主键ID逻辑删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/transaction/removeById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_22`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 积分冲正
- **用途:** 根据流水ID冲正该笔积分变动,原流水标记为已冲正(status=2),并生成反向流水。返回 data 为 boolean,true-冲正成功。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/transaction/reverse/{logId}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `reverseTransactionUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| logId | path | 是 | integer / int64 | 原流水ID | - |
| reason | query | 否 | string | 冲正原因 | - |
| operator | query | 是 | string | 操作人 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 修改
- **用途:** 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/transaction/updateById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `updateByIdUsingPOST_11`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`积分流水明细`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| afterBalance | 否 | integer / int32 | 变动后可用余额 | - |
| afterFrozen | 否 | integer / int32 | 变动后冻结余额 | - |
| amount | 否 | integer / int32 | 变动积分(正数=入账,负数=出账) | - |
| beforeBalance | 否 | integer / int32 | 变动前可用余额 | - |
| beforeFrozen | 否 | integer / int32 | 变动前冻结余额 | - |
| bizId | 否 | string | 业务单号 | - |
| bizType | 否 | string | 业务类型:REPORT-隐患上报奖励 EXCHANGE-兑换扣减 REFUND-退款回滚 FREEZE-冻结 UNFREEZE-解冻 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| id | 否 | integer / int64 | 主键ID | - |
| operator | 否 | string | 操作人 | - |
| remark | 否 | string | 备注 | - |
| status | 否 | integer / int32 | 状态:1-有效 2-已冲正 | - |
| txnNo | 否 | string | 流水号 | - |
| userId | 否 | integer / int64 | 用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

451
docs/api/modules/06-points-rule.md

@ -0,0 +1,451 @@ @@ -0,0 +1,451 @@
# 积分规则配置
本模块共 14 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 新增 | POST | `/gd_dataserver/gd_dataserver/business/points/rule/add` | 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。 |
| 批量新增 | POST | `/gd_dataserver/gd_dataserver/business/points/rule/addBatch` | 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。 |
| 新增并返回保存的数据 | POST | `/gd_dataserver/gd_dataserver/business/points/rule/addReturn` | 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。 |
| 计算积分 | GET | `/gd_dataserver/gd_dataserver/business/points/rule/calculatePoints` | 根据隐患等级和类别查询对应奖励积分。返回 data 为 Integer 类型的积分数值,如 50。 |
| 根据属性删除 | GET | `/gd_dataserver/gd_dataserver/business/points/rule/delete` | 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。 |
| 主键删除 | GET | `/gd_dataserver/gd_dataserver/business/points/rule/deleteById` | 根据主键ID删除单条记录,成功返回 data 为 null。 |
| 批量删除 | GET | `/gd_dataserver/gd_dataserver/business/points/rule/deleteByIds` | 根据ID列表批量删除记录,成功返回 data 为 null。 |
| 查询所有 | GET | `/gd_dataserver/gd_dataserver/business/points/rule/getAll` | 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。 |
| 分页查询 | GET | `/gd_dataserver/gd_dataserver/business/points/rule/getListByPage` | 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。 |
| 详情 | GET | `/gd_dataserver/gd_dataserver/business/points/rule/info` | 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。 |
| 条件查询 | GET | `/gd_dataserver/gd_dataserver/business/points/rule/list` | 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。 |
| 逻辑删除 | GET | `/gd_dataserver/gd_dataserver/business/points/rule/removeById` | 根据主键ID逻辑删除单条记录,成功返回 data 为 null。 |
| 积分规则试算 | GET | `/gd_dataserver/gd_dataserver/business/points/rule/trialCalculate` | 模拟积分计算过程,返回匹配的规则详情和计算结果。返回 data 为对象,包含:hazardLevel-输入的隐患等级、hazardCategory-输入的隐患类别、matchedRule-匹配到的规则对象{id,ruleName,points,priority}或null、calculatedPoints-计算得到的积分数值(无匹配时为0)。 |
| 修改 | POST | `/gd_dataserver/gd_dataserver/business/points/rule/updateById` | 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。 |
## 接口详情
### 新增
- **用途:** 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/rule/add`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addOneUsingPOST_10`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`积分规则配置`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | 创建时间 | - |
| enabled | 否 | integer / int32 | 是否启用:0-禁用 1-启用 | - |
| hazardCategory | 否 | string | 隐患类别 | - |
| hazardLevel | 否 | integer / int32 | 隐患等级 | - |
| id | 否 | integer / int64 | 主键ID | - |
| points | 否 | integer / int32 | 奖励积分 | - |
| priority | 否 | integer / int32 | 优先级(数字越大优先级越高) | - |
| remark | 否 | string | 备注 | - |
| ruleCode | 否 | string | 规则编码 | - |
| ruleName | 否 | string | 规则名称 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量新增
- **用途:** 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/rule/addBatch`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addBatchUsingPOST_10`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`array<积分规则配置>`
- 必填:文档未标记
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 新增并返回保存的数据
- **用途:** 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/rule/addReturn`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addReturnUsingPOST_10`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`积分规则配置`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | 创建时间 | - |
| enabled | 否 | integer / int32 | 是否启用:0-禁用 1-启用 | - |
| hazardCategory | 否 | string | 隐患类别 | - |
| hazardLevel | 否 | integer / int32 | 隐患等级 | - |
| id | 否 | integer / int64 | 主键ID | - |
| points | 否 | integer / int32 | 奖励积分 | - |
| priority | 否 | integer / int32 | 优先级(数字越大优先级越高) | - |
| remark | 否 | string | 备注 | - |
| ruleCode | 否 | string | 规则编码 | - |
| ruleName | 否 | string | 规则名称 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 计算积分
- **用途:** 根据隐患等级和类别查询对应奖励积分。返回 data 为 Integer 类型的积分数值,如 50。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/rule/calculatePoints`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `calculatePointsUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| hazardLevel | query | 是 | string | 隐患等级编码 | - |
| hazardCategory | query | 是 | string | 隐患类别编码 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 根据属性删除
- **用途:** 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/rule/delete`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteUsingGET_10`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| enabled | query | 否 | integer / int32 | 是否启用:0-禁用 1-启用 | - |
| hazardCategory | query | 否 | string | 隐患类别 | - |
| hazardLevel | query | 否 | integer / int32 | 隐患等级 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| points | query | 否 | integer / int32 | 奖励积分 | - |
| priority | query | 否 | integer / int32 | 优先级(数字越大优先级越高) | - |
| remark | query | 否 | string | 备注 | - |
| ruleCode | query | 否 | string | 规则编码 | - |
| ruleName | query | 否 | string | 规则名称 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 主键删除
- **用途:** 根据主键ID删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/rule/deleteById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteOneUsingGET_10`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量删除
- **用途:** 根据ID列表批量删除记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/rule/deleteByIds`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_21`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| ids | query | 是 | string | ID列表(逗号分隔) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询所有
- **用途:** 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/rule/getAll`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getAllUsingGET_10`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 分页查询
- **用途:** 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/rule/getListByPage`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListByPageUsingGET_10`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| enabled | query | 否 | integer / int32 | 是否启用:0-禁用 1-启用 | - |
| hazardCategory | query | 否 | string | 隐患类别 | - |
| hazardLevel | query | 否 | integer / int32 | 隐患等级 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| pageNum | query | 是 | integer / int32 | 页码 | - |
| points | query | 否 | integer / int32 | 奖励积分 | - |
| priority | query | 否 | integer / int32 | 优先级(数字越大优先级越高) | - |
| remark | query | 否 | string | 备注 | - |
| ruleCode | query | 否 | string | 规则编码 | - |
| ruleName | query | 否 | string | 规则名称 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| pageSize | query | 是 | integer / int32 | 每页条数 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 详情
- **用途:** 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/rule/info`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `infoUsingGET_10`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 条件查询
- **用途:** 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/rule/list`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListUsingGET_10`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| enabled | query | 否 | integer / int32 | 是否启用:0-禁用 1-启用 | - |
| hazardCategory | query | 否 | string | 隐患类别 | - |
| hazardLevel | query | 否 | integer / int32 | 隐患等级 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| points | query | 否 | integer / int32 | 奖励积分 | - |
| priority | query | 否 | integer / int32 | 优先级(数字越大优先级越高) | - |
| remark | query | 否 | string | 备注 | - |
| ruleCode | query | 否 | string | 规则编码 | - |
| ruleName | query | 否 | string | 规则名称 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 逻辑删除
- **用途:** 根据主键ID逻辑删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/rule/removeById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_20`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 积分规则试算
- **用途:** 模拟积分计算过程,返回匹配的规则详情和计算结果。返回 data 为对象,包含:hazardLevel-输入的隐患等级、hazardCategory-输入的隐患类别、matchedRule-匹配到的规则对象{id,ruleName,points,priority}或null、calculatedPoints-计算得到的积分数值(无匹配时为0)。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/rule/trialCalculate`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `trialCalculateUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| hazardLevel | query | 是 | string | 隐患等级编码 | - |
| hazardCategory | query | 是 | string | 隐患类别编码 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 修改
- **用途:** 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/rule/updateById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `updateByIdUsingPOST_10`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`积分规则配置`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | 创建时间 | - |
| enabled | 否 | integer / int32 | 是否启用:0-禁用 1-启用 | - |
| hazardCategory | 否 | string | 隐患类别 | - |
| hazardLevel | 否 | integer / int32 | 隐患等级 | - |
| id | 否 | integer / int64 | 主键ID | - |
| points | 否 | integer / int32 | 奖励积分 | - |
| priority | 否 | integer / int32 | 优先级(数字越大优先级越高) | - |
| remark | 否 | string | 备注 | - |
| ruleCode | 否 | string | 规则编码 | - |
| ruleName | 否 | string | 规则名称 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

803
docs/api/modules/07-points-appeal.md

@ -0,0 +1,803 @@ @@ -0,0 +1,803 @@
# 积分申诉管理
本模块共 21 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 受理申诉 | POST | `/gd_dataserver/gd_dataserver/business/points/appeal/accept/{id}` | 将申诉状态从待受理(0)改为处理中(1)。返回 data 为 boolean。 |
| 新增 | POST | `/gd_dataserver/gd_dataserver/business/points/appeal/add` | 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。 |
| 批量新增 | POST | `/gd_dataserver/gd_dataserver/business/points/appeal/addBatch` | 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。 |
| 新增并返回保存的数据 | POST | `/gd_dataserver/gd_dataserver/business/points/appeal/addReturn` | 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。 |
| 审批申诉流程 | POST | `/gd_dataserver/gd_dataserver/business/points/appeal/completeFlow` | 审批通过或驳回申诉流程节点。成功返回 data 为 null;失败返回 error 信息。 |
| 根据属性删除 | GET | `/gd_dataserver/gd_dataserver/business/points/appeal/delete` | 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。 |
| 主键删除 | GET | `/gd_dataserver/gd_dataserver/business/points/appeal/deleteById` | 根据主键ID删除单条记录,成功返回 data 为 null。 |
| 批量删除 | GET | `/gd_dataserver/gd_dataserver/business/points/appeal/deleteByIds` | 根据ID列表批量删除记录,成功返回 data 为 null。 |
| 获取申诉详情 | GET | `/gd_dataserver/gd_dataserver/business/points/appeal/detail/{id}` | 返回 data 为 PointsAppeal 对象,包含完整申诉字段及流程进度信息。 |
| 查询所有 | GET | `/gd_dataserver/gd_dataserver/business/points/appeal/getAll` | 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。 |
| 分页查询 | GET | `/gd_dataserver/gd_dataserver/business/points/appeal/getListByPage` | 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。 |
| 处理申诉 | POST | `/gd_dataserver/gd_dataserver/business/points/appeal/handle/{id}` | 通过或驳回申诉,可选调整积分。approved=true时状态改为已通过(2),approved=false时改为已驳回(3)。adjustPoints为正数补发积分,负数扣减积分,不传则不调整。返回 data 为 boolean。 |
| 详情 | GET | `/gd_dataserver/gd_dataserver/business/points/appeal/info` | 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。 |
| 条件查询 | GET | `/gd_dataserver/gd_dataserver/business/points/appeal/list` | 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。 |
| 查询我的申诉记录(APP端) | GET | `/gd_dataserver/gd_dataserver/business/points/appeal/myList` | 返回 data 为 PageInfo 分页对象。list 中每条记录为 PointsAppeal 对象,主要字段:id、appealNo-申诉编号、appealType-申诉类型(REJECT/POINTS/OTHER)、status-状态(0待受理/1处理中/2已通过/3已驳回/4已撤回)、statusName-状态名称、handleRemark-处理意见、adjustPoints-调整积分、createTime。 |
| 逻辑删除 | GET | `/gd_dataserver/gd_dataserver/business/points/appeal/removeById` | 根据主键ID逻辑删除单条记录,成功返回 data 为 null。 |
| 提交申诉(APP端) | POST | `/gd_dataserver/gd_dataserver/business/points/appeal/submit` | 填写申诉类型、理由等信息,申诉人信息从登录用户获取。返回 data 为 PointsAppeal 对象,包含 id、appealNo-申诉编号、status-状态(0待受理)。 |
| 提交申诉并启动流程(APP端) | POST | `/gd_dataserver/gd_dataserver/business/points/appeal/submitFlow` | 提交申诉并自动启动 Flowable 审批流程。成功返回 data 为流程实例ID字符串;失败返回 error 信息。 |
| 申诉流程待办列表 | GET | `/gd_dataserver/gd_dataserver/business/points/appeal/todoList` | 返回 data 为 PageInfo 分页对象。list 中每条记录为 PointsAppeal 对象,包含 id、appealNo、userName、appealType-申诉类型、appealReason-申诉理由、status-状态、createTime。 |
| 修改 | POST | `/gd_dataserver/gd_dataserver/business/points/appeal/updateById` | 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。 |
| 撤回申诉(APP端) | POST | `/gd_dataserver/gd_dataserver/business/points/appeal/withdraw/{id}` | 仅待受理状态(status=0)可撤回,撤回后状态改为已撤回(4)。返回 data 为 boolean。 |
## 接口详情
### 受理申诉
- **用途:** 将申诉状态从待受理(0)改为处理中(1)。返回 data 为 boolean。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/appeal/accept/{id}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `acceptAppealUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | path | 是 | integer / int64 | 申诉ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 新增
- **用途:** 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/appeal/add`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addOneUsingPOST_9`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`积分申诉`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| adjustPoints | 否 | integer / int32 | 调整积分(正数补发,负数扣减) | - |
| appealNo | 否 | string | 申诉编号 | - |
| appealReason | 否 | string | 申诉理由 | - |
| appealType | 否 | string | 申诉类型:REJECT-审核驳回申诉 POINTS-积分异议 OTHER-其他 | - |
| attachmentUrls | 否 | string | 附件URL(JSON数组) | - |
| canApprove | 否 | boolean | 当前用户是否可审批此流程 | false |
| createTime | 否 | string / date-time | 创建时间 | - |
| flowInstanceId | 否 | string | 流程实例ID(预留) | - |
| flowStatus | 否 | integer / int32 | 流程状态:0-无流程 1-进行中 2-已完成 | - |
| handleRemark | 否 | string | 处理意见/结果说明 | - |
| handleTime | 否 | string / date-time | 处理时间 | - |
| handleUserId | 否 | integer / int64 | 处理人用户ID | - |
| handleUserName | 否 | string | 处理人姓名 | - |
| id | 否 | integer / int64 | 主键ID | - |
| isInitiator | 否 | boolean | 当前用户是否为此流程发起人 | false |
| reportId | 否 | integer / int64 | 关联隐患上报ID | - |
| reportNo | 否 | string | 关联隐患编号 | - |
| status | 否 | string | 申诉状态:0-待受理 1-处理中 2-已通过 3-已驳回 4-已撤回 | - |
| statusName | 否 | string | 申诉状态名称 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| userId | 否 | integer / int64 | 申诉人用户ID | - |
| userName | 否 | string | 申诉人姓名 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量新增
- **用途:** 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/appeal/addBatch`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addBatchUsingPOST_9`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`array<积分申诉>`
- 必填:文档未标记
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 新增并返回保存的数据
- **用途:** 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/appeal/addReturn`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addReturnUsingPOST_9`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`积分申诉`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| adjustPoints | 否 | integer / int32 | 调整积分(正数补发,负数扣减) | - |
| appealNo | 否 | string | 申诉编号 | - |
| appealReason | 否 | string | 申诉理由 | - |
| appealType | 否 | string | 申诉类型:REJECT-审核驳回申诉 POINTS-积分异议 OTHER-其他 | - |
| attachmentUrls | 否 | string | 附件URL(JSON数组) | - |
| canApprove | 否 | boolean | 当前用户是否可审批此流程 | false |
| createTime | 否 | string / date-time | 创建时间 | - |
| flowInstanceId | 否 | string | 流程实例ID(预留) | - |
| flowStatus | 否 | integer / int32 | 流程状态:0-无流程 1-进行中 2-已完成 | - |
| handleRemark | 否 | string | 处理意见/结果说明 | - |
| handleTime | 否 | string / date-time | 处理时间 | - |
| handleUserId | 否 | integer / int64 | 处理人用户ID | - |
| handleUserName | 否 | string | 处理人姓名 | - |
| id | 否 | integer / int64 | 主键ID | - |
| isInitiator | 否 | boolean | 当前用户是否为此流程发起人 | false |
| reportId | 否 | integer / int64 | 关联隐患上报ID | - |
| reportNo | 否 | string | 关联隐患编号 | - |
| status | 否 | string | 申诉状态:0-待受理 1-处理中 2-已通过 3-已驳回 4-已撤回 | - |
| statusName | 否 | string | 申诉状态名称 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| userId | 否 | integer / int64 | 申诉人用户ID | - |
| userName | 否 | string | 申诉人姓名 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 审批申诉流程
- **用途:** 审批通过或驳回申诉流程节点。成功返回 data 为 null;失败返回 error 信息。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/appeal/completeFlow`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `completeFlowUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流签字任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | 部署ID | - |
| file | 否 | string | 拍照 | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| qz | 否 | string | 任务签字 | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| taskName | 否 | string | 任务名称 | - |
| type | 否 | string | 业务类型 | - |
| userId | 否 | string | 用户Id | - |
| userName | 否 | string | 用户名称 | - |
| variables | 否 | object | 流程变量信息 | - |
| zyxkid | 否 | string | 作业许可Id | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 根据属性删除
- **用途:** 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/appeal/delete`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteUsingGET_9`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| adjustPoints | query | 否 | integer / int32 | 调整积分(正数补发,负数扣减) | - |
| appealNo | query | 否 | string | 申诉编号 | - |
| appealReason | query | 否 | string | 申诉理由 | - |
| appealType | query | 否 | string | 申诉类型:REJECT-审核驳回申诉 POINTS-积分异议 OTHER-其他 | - |
| attachmentUrls | query | 否 | string | 附件URL(JSON数组) | - |
| canApprove | query | 否 | boolean | 当前用户是否可审批此流程 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| flowInstanceId | query | 否 | string | 流程实例ID(预留) | - |
| flowStatus | query | 否 | integer / int32 | 流程状态:0-无流程 1-进行中 2-已完成 | - |
| handleRemark | query | 否 | string | 处理意见/结果说明 | - |
| handleTime | query | 否 | string / date-time | 处理时间 | - |
| handleUserId | query | 否 | integer / int64 | 处理人用户ID | - |
| handleUserName | query | 否 | string | 处理人姓名 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| isInitiator | query | 否 | boolean | 当前用户是否为此流程发起人 | - |
| reportId | query | 否 | integer / int64 | 关联隐患上报ID | - |
| reportNo | query | 否 | string | 关联隐患编号 | - |
| status | query | 否 | string | 申诉状态:0-待受理 1-处理中 2-已通过 3-已驳回 4-已撤回 | - |
| statusName | query | 否 | string | 申诉状态名称 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| userId | query | 否 | integer / int64 | 申诉人用户ID | - |
| userName | query | 否 | string | 申诉人姓名 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 主键删除
- **用途:** 根据主键ID删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/appeal/deleteById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteOneUsingGET_9`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量删除
- **用途:** 根据ID列表批量删除记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/appeal/deleteByIds`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_19`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| ids | query | 是 | string | ID列表(逗号分隔) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 获取申诉详情
- **用途:** 返回 data 为 PointsAppeal 对象,包含完整申诉字段及流程进度信息。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/appeal/detail/{id}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getDetailUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | path | 是 | integer / int64 | 申诉ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询所有
- **用途:** 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/appeal/getAll`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getAllUsingGET_9`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 分页查询
- **用途:** 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/appeal/getListByPage`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListByPageUsingGET_9`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| adjustPoints | query | 否 | integer / int32 | 调整积分(正数补发,负数扣减) | - |
| appealNo | query | 否 | string | 申诉编号 | - |
| appealReason | query | 否 | string | 申诉理由 | - |
| appealType | query | 否 | string | 申诉类型:REJECT-审核驳回申诉 POINTS-积分异议 OTHER-其他 | - |
| attachmentUrls | query | 否 | string | 附件URL(JSON数组) | - |
| canApprove | query | 否 | boolean | 当前用户是否可审批此流程 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| flowInstanceId | query | 否 | string | 流程实例ID(预留) | - |
| flowStatus | query | 否 | integer / int32 | 流程状态:0-无流程 1-进行中 2-已完成 | - |
| handleRemark | query | 否 | string | 处理意见/结果说明 | - |
| handleTime | query | 否 | string / date-time | 处理时间 | - |
| handleUserId | query | 否 | integer / int64 | 处理人用户ID | - |
| handleUserName | query | 否 | string | 处理人姓名 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| isInitiator | query | 否 | boolean | 当前用户是否为此流程发起人 | - |
| pageNum | query | 是 | integer / int32 | 页码 | - |
| reportId | query | 否 | integer / int64 | 关联隐患上报ID | - |
| reportNo | query | 否 | string | 关联隐患编号 | - |
| status | query | 否 | string | 申诉状态:0-待受理 1-处理中 2-已通过 3-已驳回 4-已撤回 | - |
| statusName | query | 否 | string | 申诉状态名称 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| userId | query | 否 | integer / int64 | 申诉人用户ID | - |
| userName | query | 否 | string | 申诉人姓名 | - |
| pageSize | query | 是 | integer / int32 | 每页条数 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 处理申诉
- **用途:** 通过或驳回申诉,可选调整积分。approved=true时状态改为已通过(2),approved=false时改为已驳回(3)。adjustPoints为正数补发积分,负数扣减积分,不传则不调整。返回 data 为 boolean。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/appeal/handle/{id}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `handleAppealUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | path | 是 | integer / int64 | 申诉ID | - |
| approved | query | 是 | boolean | 是否通过 | - |
| handleRemark | query | 是 | string | 处理意见 | - |
| adjustPoints | query | 否 | integer / int32 | 调整积分(正数补发,负数扣减,不传则不调整) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 详情
- **用途:** 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/appeal/info`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `infoUsingGET_9`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 条件查询
- **用途:** 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/appeal/list`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListUsingGET_9`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| adjustPoints | query | 否 | integer / int32 | 调整积分(正数补发,负数扣减) | - |
| appealNo | query | 否 | string | 申诉编号 | - |
| appealReason | query | 否 | string | 申诉理由 | - |
| appealType | query | 否 | string | 申诉类型:REJECT-审核驳回申诉 POINTS-积分异议 OTHER-其他 | - |
| attachmentUrls | query | 否 | string | 附件URL(JSON数组) | - |
| canApprove | query | 否 | boolean | 当前用户是否可审批此流程 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| flowInstanceId | query | 否 | string | 流程实例ID(预留) | - |
| flowStatus | query | 否 | integer / int32 | 流程状态:0-无流程 1-进行中 2-已完成 | - |
| handleRemark | query | 否 | string | 处理意见/结果说明 | - |
| handleTime | query | 否 | string / date-time | 处理时间 | - |
| handleUserId | query | 否 | integer / int64 | 处理人用户ID | - |
| handleUserName | query | 否 | string | 处理人姓名 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| isInitiator | query | 否 | boolean | 当前用户是否为此流程发起人 | - |
| reportId | query | 否 | integer / int64 | 关联隐患上报ID | - |
| reportNo | query | 否 | string | 关联隐患编号 | - |
| status | query | 否 | string | 申诉状态:0-待受理 1-处理中 2-已通过 3-已驳回 4-已撤回 | - |
| statusName | query | 否 | string | 申诉状态名称 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| userId | query | 否 | integer / int64 | 申诉人用户ID | - |
| userName | query | 否 | string | 申诉人姓名 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询我的申诉记录(APP端)
- **用途:** 返回 data 为 PageInfo 分页对象。list 中每条记录为 PointsAppeal 对象,主要字段:id、appealNo-申诉编号、appealType-申诉类型(REJECT/POINTS/OTHER)、status-状态(0待受理/1处理中/2已通过/3已驳回/4已撤回)、statusName-状态名称、handleRemark-处理意见、adjustPoints-调整积分、createTime。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/appeal/myList`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `myListUsingGET_2`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| adjustPoints | query | 否 | integer / int32 | 调整积分(正数补发,负数扣减) | - |
| appealNo | query | 否 | string | 申诉编号 | - |
| appealReason | query | 否 | string | 申诉理由 | - |
| appealType | query | 否 | string | 申诉类型:REJECT-审核驳回申诉 POINTS-积分异议 OTHER-其他 | - |
| attachmentUrls | query | 否 | string | 附件URL(JSON数组) | - |
| canApprove | query | 否 | boolean | 当前用户是否可审批此流程 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| flowInstanceId | query | 否 | string | 流程实例ID(预留) | - |
| flowStatus | query | 否 | integer / int32 | 流程状态:0-无流程 1-进行中 2-已完成 | - |
| handleRemark | query | 否 | string | 处理意见/结果说明 | - |
| handleTime | query | 否 | string / date-time | 处理时间 | - |
| handleUserId | query | 否 | integer / int64 | 处理人用户ID | - |
| handleUserName | query | 否 | string | 处理人姓名 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| isInitiator | query | 否 | boolean | 当前用户是否为此流程发起人 | - |
| pageNum | query | 否 | integer / int32 | 页码 | - |
| reportId | query | 否 | integer / int64 | 关联隐患上报ID | - |
| reportNo | query | 否 | string | 关联隐患编号 | - |
| status | query | 否 | string | 申诉状态:0-待受理 1-处理中 2-已通过 3-已驳回 4-已撤回 | - |
| statusName | query | 否 | string | 申诉状态名称 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| userId | query | 否 | integer / int64 | 申诉人用户ID | - |
| userName | query | 否 | string | 申诉人姓名 | - |
| pageSize | query | 否 | integer / int32 | 每页数量 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 逻辑删除
- **用途:** 根据主键ID逻辑删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/appeal/removeById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_18`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 提交申诉(APP端)
- **用途:** 填写申诉类型、理由等信息,申诉人信息从登录用户获取。返回 data 为 PointsAppeal 对象,包含 id、appealNo-申诉编号、status-状态(0待受理)。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/appeal/submit`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `submitAppealUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`积分申诉`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| adjustPoints | 否 | integer / int32 | 调整积分(正数补发,负数扣减) | - |
| appealNo | 否 | string | 申诉编号 | - |
| appealReason | 否 | string | 申诉理由 | - |
| appealType | 否 | string | 申诉类型:REJECT-审核驳回申诉 POINTS-积分异议 OTHER-其他 | - |
| attachmentUrls | 否 | string | 附件URL(JSON数组) | - |
| canApprove | 否 | boolean | 当前用户是否可审批此流程 | false |
| createTime | 否 | string / date-time | 创建时间 | - |
| flowInstanceId | 否 | string | 流程实例ID(预留) | - |
| flowStatus | 否 | integer / int32 | 流程状态:0-无流程 1-进行中 2-已完成 | - |
| handleRemark | 否 | string | 处理意见/结果说明 | - |
| handleTime | 否 | string / date-time | 处理时间 | - |
| handleUserId | 否 | integer / int64 | 处理人用户ID | - |
| handleUserName | 否 | string | 处理人姓名 | - |
| id | 否 | integer / int64 | 主键ID | - |
| isInitiator | 否 | boolean | 当前用户是否为此流程发起人 | false |
| reportId | 否 | integer / int64 | 关联隐患上报ID | - |
| reportNo | 否 | string | 关联隐患编号 | - |
| status | 否 | string | 申诉状态:0-待受理 1-处理中 2-已通过 3-已驳回 4-已撤回 | - |
| statusName | 否 | string | 申诉状态名称 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| userId | 否 | integer / int64 | 申诉人用户ID | - |
| userName | 否 | string | 申诉人姓名 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 提交申诉并启动流程(APP端)
- **用途:** 提交申诉并自动启动 Flowable 审批流程。成功返回 data 为流程实例ID字符串;失败返回 error 信息。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/appeal/submitFlow`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `submitAppealFlowUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`积分申诉`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| adjustPoints | 否 | integer / int32 | 调整积分(正数补发,负数扣减) | - |
| appealNo | 否 | string | 申诉编号 | - |
| appealReason | 否 | string | 申诉理由 | - |
| appealType | 否 | string | 申诉类型:REJECT-审核驳回申诉 POINTS-积分异议 OTHER-其他 | - |
| attachmentUrls | 否 | string | 附件URL(JSON数组) | - |
| canApprove | 否 | boolean | 当前用户是否可审批此流程 | false |
| createTime | 否 | string / date-time | 创建时间 | - |
| flowInstanceId | 否 | string | 流程实例ID(预留) | - |
| flowStatus | 否 | integer / int32 | 流程状态:0-无流程 1-进行中 2-已完成 | - |
| handleRemark | 否 | string | 处理意见/结果说明 | - |
| handleTime | 否 | string / date-time | 处理时间 | - |
| handleUserId | 否 | integer / int64 | 处理人用户ID | - |
| handleUserName | 否 | string | 处理人姓名 | - |
| id | 否 | integer / int64 | 主键ID | - |
| isInitiator | 否 | boolean | 当前用户是否为此流程发起人 | false |
| reportId | 否 | integer / int64 | 关联隐患上报ID | - |
| reportNo | 否 | string | 关联隐患编号 | - |
| status | 否 | string | 申诉状态:0-待受理 1-处理中 2-已通过 3-已驳回 4-已撤回 | - |
| statusName | 否 | string | 申诉状态名称 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| userId | 否 | integer / int64 | 申诉人用户ID | - |
| userName | 否 | string | 申诉人姓名 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 申诉流程待办列表
- **用途:** 返回 data 为 PageInfo 分页对象。list 中每条记录为 PointsAppeal 对象,包含 id、appealNo、userName、appealType-申诉类型、appealReason-申诉理由、status-状态、createTime。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/appeal/todoList`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `todoListUsingGET_2`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| params | query | 是 | object<string, string> | 查询参数(支持pageNum/pageSize等) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 修改
- **用途:** 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/appeal/updateById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `updateByIdUsingPOST_9`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`积分申诉`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| adjustPoints | 否 | integer / int32 | 调整积分(正数补发,负数扣减) | - |
| appealNo | 否 | string | 申诉编号 | - |
| appealReason | 否 | string | 申诉理由 | - |
| appealType | 否 | string | 申诉类型:REJECT-审核驳回申诉 POINTS-积分异议 OTHER-其他 | - |
| attachmentUrls | 否 | string | 附件URL(JSON数组) | - |
| canApprove | 否 | boolean | 当前用户是否可审批此流程 | false |
| createTime | 否 | string / date-time | 创建时间 | - |
| flowInstanceId | 否 | string | 流程实例ID(预留) | - |
| flowStatus | 否 | integer / int32 | 流程状态:0-无流程 1-进行中 2-已完成 | - |
| handleRemark | 否 | string | 处理意见/结果说明 | - |
| handleTime | 否 | string / date-time | 处理时间 | - |
| handleUserId | 否 | integer / int64 | 处理人用户ID | - |
| handleUserName | 否 | string | 处理人姓名 | - |
| id | 否 | integer / int64 | 主键ID | - |
| isInitiator | 否 | boolean | 当前用户是否为此流程发起人 | false |
| reportId | 否 | integer / int64 | 关联隐患上报ID | - |
| reportNo | 否 | string | 关联隐患编号 | - |
| status | 否 | string | 申诉状态:0-待受理 1-处理中 2-已通过 3-已驳回 4-已撤回 | - |
| statusName | 否 | string | 申诉状态名称 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| userId | 否 | integer / int64 | 申诉人用户ID | - |
| userName | 否 | string | 申诉人姓名 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 撤回申诉(APP端)
- **用途:** 仅待受理状态(status=0)可撤回,撤回后状态改为已撤回(4)。返回 data 为 boolean。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/appeal/withdraw/{id}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `withdrawAppealUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | path | 是 | integer / int64 | 申诉ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

484
docs/api/modules/08-exchange-order.md

@ -0,0 +1,484 @@ @@ -0,0 +1,484 @@
# 积分兑换订单管理
本模块共 14 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 新增 | POST | `/gd_dataserver/gd_dataserver/business/exchange/order/add` | 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。 |
| 批量新增 | POST | `/gd_dataserver/gd_dataserver/business/exchange/order/addBatch` | 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。 |
| 新增并返回保存的数据 | POST | `/gd_dataserver/gd_dataserver/business/exchange/order/addReturn` | 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。 |
| 根据属性删除 | GET | `/gd_dataserver/gd_dataserver/business/exchange/order/delete` | 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。 |
| 主键删除 | GET | `/gd_dataserver/gd_dataserver/business/exchange/order/deleteById` | 根据主键ID删除单条记录,成功返回 data 为 null。 |
| 批量删除 | GET | `/gd_dataserver/gd_dataserver/business/exchange/order/deleteByIds` | 根据ID列表批量删除记录,成功返回 data 为 null。 |
| 查询所有 | GET | `/gd_dataserver/gd_dataserver/business/exchange/order/getAll` | 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。 |
| 分页查询 | GET | `/gd_dataserver/gd_dataserver/business/exchange/order/getListByPage` | 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。 |
| 详情 | GET | `/gd_dataserver/gd_dataserver/business/exchange/order/info` | 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。 |
| 条件查询 | GET | `/gd_dataserver/gd_dataserver/business/exchange/order/list` | 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。 |
| 查询我的兑换记录(APP端) | GET | `/gd_dataserver/gd_dataserver/business/exchange/order/myList` | 返回 data 为 PageInfo 分页对象。list 中每条记录为 ExchangeOrder 对象,主要字段:id、orderNo-订单号、userId-用户ID、itemName-物品名称、itemPrice-单价积分、quantity-数量、totalPoints-总消耗积分、status-订单状态(0待处理/1处理中/2兑换成功/3兑换失败/4已退款/5已关闭)、createTime-创建时间、finishTime-完成时间。 |
| 退款(管理端操作) | POST | `/gd_dataserver/gd_dataserver/business/exchange/order/refund/{orderId}` | 将订单状态改为已退款(4),并退回积分到用户账户。返回 data 为 boolean。 |
| 逻辑删除 | GET | `/gd_dataserver/gd_dataserver/business/exchange/order/removeById` | 根据主键ID逻辑删除单条记录,成功返回 data 为 null。 |
| 修改 | POST | `/gd_dataserver/gd_dataserver/business/exchange/order/updateById` | 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。 |
## 接口详情
### 新增
- **用途:** 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/exchange/order/add`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addOneUsingPOST_6`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`积分兑换订单`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | - | - |
| finishTime | 否 | string / date-time | 完成时间 | - |
| id | 否 | integer / int64 | 主键ID | - |
| itemId | 否 | integer / int64 | 兑换物品ID | - |
| itemName | 否 | string | 物品名称 | - |
| itemPrice | 否 | integer / int32 | 兑换所需积分 | - |
| orderNo | 否 | string | 订单号 | - |
| quantity | 否 | integer / int32 | 兑换数量 | - |
| status | 否 | integer / int32 | 订单状态:0-待处理 1-处理中 2-兑换成功 3-兑换失败 4-已退款 5-已关闭 | - |
| thirdPartyOrderId | 否 | string | 第三方平台订单号 | - |
| thirdPartyResponse | 否 | string | 第三方回调原始数据 | - |
| totalPoints | 否 | integer / int32 | 总消耗积分 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| userId | 否 | integer / int64 | 用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量新增
- **用途:** 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/exchange/order/addBatch`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addBatchUsingPOST_6`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`array<积分兑换订单>`
- 必填:文档未标记
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 新增并返回保存的数据
- **用途:** 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/exchange/order/addReturn`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addReturnUsingPOST_6`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`积分兑换订单`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | - | - |
| finishTime | 否 | string / date-time | 完成时间 | - |
| id | 否 | integer / int64 | 主键ID | - |
| itemId | 否 | integer / int64 | 兑换物品ID | - |
| itemName | 否 | string | 物品名称 | - |
| itemPrice | 否 | integer / int32 | 兑换所需积分 | - |
| orderNo | 否 | string | 订单号 | - |
| quantity | 否 | integer / int32 | 兑换数量 | - |
| status | 否 | integer / int32 | 订单状态:0-待处理 1-处理中 2-兑换成功 3-兑换失败 4-已退款 5-已关闭 | - |
| thirdPartyOrderId | 否 | string | 第三方平台订单号 | - |
| thirdPartyResponse | 否 | string | 第三方回调原始数据 | - |
| totalPoints | 否 | integer / int32 | 总消耗积分 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| userId | 否 | integer / int64 | 用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 根据属性删除
- **用途:** 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/order/delete`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteUsingGET_6`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createTime | query | 否 | string / date-time | - | - |
| finishTime | query | 否 | string / date-time | 完成时间 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| itemId | query | 否 | integer / int64 | 兑换物品ID | - |
| itemName | query | 否 | string | 物品名称 | - |
| itemPrice | query | 否 | integer / int32 | 兑换所需积分 | - |
| orderNo | query | 否 | string | 订单号 | - |
| quantity | query | 否 | integer / int32 | 兑换数量 | - |
| status | query | 否 | integer / int32 | 订单状态:0-待处理 1-处理中 2-兑换成功 3-兑换失败 4-已退款 5-已关闭 | - |
| thirdPartyOrderId | query | 否 | string | 第三方平台订单号 | - |
| thirdPartyResponse | query | 否 | string | 第三方回调原始数据 | - |
| totalPoints | query | 否 | integer / int32 | 总消耗积分 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| userId | query | 否 | integer / int64 | 用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 主键删除
- **用途:** 根据主键ID删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/order/deleteById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteOneUsingGET_6`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量删除
- **用途:** 根据ID列表批量删除记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/order/deleteByIds`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_13`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| ids | query | 是 | string | ID列表(逗号分隔) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询所有
- **用途:** 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/order/getAll`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getAllUsingGET_6`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 分页查询
- **用途:** 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/order/getListByPage`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListByPageUsingGET_6`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createTime | query | 否 | string / date-time | - | - |
| finishTime | query | 否 | string / date-time | 完成时间 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| itemId | query | 否 | integer / int64 | 兑换物品ID | - |
| itemName | query | 否 | string | 物品名称 | - |
| itemPrice | query | 否 | integer / int32 | 兑换所需积分 | - |
| orderNo | query | 否 | string | 订单号 | - |
| pageNum | query | 是 | integer / int32 | 页码 | - |
| quantity | query | 否 | integer / int32 | 兑换数量 | - |
| status | query | 否 | integer / int32 | 订单状态:0-待处理 1-处理中 2-兑换成功 3-兑换失败 4-已退款 5-已关闭 | - |
| thirdPartyOrderId | query | 否 | string | 第三方平台订单号 | - |
| thirdPartyResponse | query | 否 | string | 第三方回调原始数据 | - |
| totalPoints | query | 否 | integer / int32 | 总消耗积分 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| userId | query | 否 | integer / int64 | 用户ID | - |
| pageSize | query | 是 | integer / int32 | 每页条数 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 详情
- **用途:** 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/order/info`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `infoUsingGET_6`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 条件查询
- **用途:** 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/order/list`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListUsingGET_6`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createTime | query | 否 | string / date-time | - | - |
| finishTime | query | 否 | string / date-time | 完成时间 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| itemId | query | 否 | integer / int64 | 兑换物品ID | - |
| itemName | query | 否 | string | 物品名称 | - |
| itemPrice | query | 否 | integer / int32 | 兑换所需积分 | - |
| orderNo | query | 否 | string | 订单号 | - |
| quantity | query | 否 | integer / int32 | 兑换数量 | - |
| status | query | 否 | integer / int32 | 订单状态:0-待处理 1-处理中 2-兑换成功 3-兑换失败 4-已退款 5-已关闭 | - |
| thirdPartyOrderId | query | 否 | string | 第三方平台订单号 | - |
| thirdPartyResponse | query | 否 | string | 第三方回调原始数据 | - |
| totalPoints | query | 否 | integer / int32 | 总消耗积分 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| userId | query | 否 | integer / int64 | 用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询我的兑换记录(APP端)
- **用途:** 返回 data 为 PageInfo 分页对象。list 中每条记录为 ExchangeOrder 对象,主要字段:id、orderNo-订单号、userId-用户ID、itemName-物品名称、itemPrice-单价积分、quantity-数量、totalPoints-总消耗积分、status-订单状态(0待处理/1处理中/2兑换成功/3兑换失败/4已退款/5已关闭)、createTime-创建时间、finishTime-完成时间。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/order/myList`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `myListUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createTime | query | 否 | string / date-time | - | - |
| finishTime | query | 否 | string / date-time | 完成时间 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| itemId | query | 否 | integer / int64 | 兑换物品ID | - |
| itemName | query | 否 | string | 物品名称 | - |
| itemPrice | query | 否 | integer / int32 | 兑换所需积分 | - |
| orderNo | query | 否 | string | 订单号 | - |
| pageNum | query | 否 | integer / int32 | 页码 | - |
| quantity | query | 否 | integer / int32 | 兑换数量 | - |
| status | query | 否 | integer / int32 | 订单状态:0-待处理 1-处理中 2-兑换成功 3-兑换失败 4-已退款 5-已关闭 | - |
| thirdPartyOrderId | query | 否 | string | 第三方平台订单号 | - |
| thirdPartyResponse | query | 否 | string | 第三方回调原始数据 | - |
| totalPoints | query | 否 | integer / int32 | 总消耗积分 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| userId | query | 否 | integer / int64 | 用户ID | - |
| pageSize | query | 否 | integer / int32 | 每页数量 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 退款(管理端操作)
- **用途:** 将订单状态改为已退款(4),并退回积分到用户账户。返回 data 为 boolean。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/exchange/order/refund/{orderId}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `refundOrderUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| orderId | path | 是 | integer / int64 | 订单ID | - |
| operator | query | 是 | string | 操作人 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 逻辑删除
- **用途:** 根据主键ID逻辑删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/order/removeById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_12`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 修改
- **用途:** 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/exchange/order/updateById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `updateByIdUsingPOST_6`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`积分兑换订单`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | - | - |
| finishTime | 否 | string / date-time | 完成时间 | - |
| id | 否 | integer / int64 | 主键ID | - |
| itemId | 否 | integer / int64 | 兑换物品ID | - |
| itemName | 否 | string | 物品名称 | - |
| itemPrice | 否 | integer / int32 | 兑换所需积分 | - |
| orderNo | 否 | string | 订单号 | - |
| quantity | 否 | integer / int32 | 兑换数量 | - |
| status | 否 | integer / int32 | 订单状态:0-待处理 1-处理中 2-兑换成功 3-兑换失败 4-已退款 5-已关闭 | - |
| thirdPartyOrderId | 否 | string | 第三方平台订单号 | - |
| thirdPartyResponse | 否 | string | 第三方回调原始数据 | - |
| totalPoints | 否 | integer / int32 | 总消耗积分 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| userId | 否 | integer / int64 | 用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

461
docs/api/modules/09-exchange-item.md

@ -0,0 +1,461 @@ @@ -0,0 +1,461 @@
# 兑换物品管理
本模块共 14 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 新增 | POST | `/gd_dataserver/gd_dataserver/business/exchange/item/add` | 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。 |
| 批量新增 | POST | `/gd_dataserver/gd_dataserver/business/exchange/item/addBatch` | 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。 |
| 新增并返回保存的数据 | POST | `/gd_dataserver/gd_dataserver/business/exchange/item/addReturn` | 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。 |
| 根据属性删除 | GET | `/gd_dataserver/gd_dataserver/business/exchange/item/delete` | 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。 |
| 主键删除 | GET | `/gd_dataserver/gd_dataserver/business/exchange/item/deleteById` | 根据主键ID删除单条记录,成功返回 data 为 null。 |
| 批量删除 | GET | `/gd_dataserver/gd_dataserver/business/exchange/item/deleteByIds` | 根据ID列表批量删除记录,成功返回 data 为 null。 |
| 查询所有 | GET | `/gd_dataserver/gd_dataserver/business/exchange/item/getAll` | 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。 |
| 分页查询 | GET | `/gd_dataserver/gd_dataserver/business/exchange/item/getListByPage` | 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。 |
| 详情 | GET | `/gd_dataserver/gd_dataserver/business/exchange/item/info` | 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。 |
| 条件查询 | GET | `/gd_dataserver/gd_dataserver/business/exchange/item/list` | 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。 |
| 查询上架物品列表 | GET | `/gd_dataserver/gd_dataserver/business/exchange/item/listOnShelf` | 前端展示用,返回 status=1 的物品,按 sortOrder 降序。返回 data 为 ExchangeItem 数组,每个元素包含:id、itemName-物品名称、itemPrice-所需积分、itemImage-物品图片URL、description-描述、stock-库存。 |
| 逻辑删除 | GET | `/gd_dataserver/gd_dataserver/business/exchange/item/removeById` | 根据主键ID逻辑删除单条记录,成功返回 data 为 null。 |
| 修改 | POST | `/gd_dataserver/gd_dataserver/business/exchange/item/updateById` | 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。 |
| 上下架操作 | POST | `/gd_dataserver/gd_dataserver/business/exchange/item/updateStatus` | status=0 下架,status=1 上架。返回 data 为 boolean。 |
## 接口详情
### 新增
- **用途:** 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/exchange/item/add`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addOneUsingPOST_4`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`兑换物品`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | 创建时间 | - |
| dailyLimitPerUser | 否 | integer / int32 | 每人每日兑换上限(0表示无限制) | - |
| description | 否 | string | 物品描述 | - |
| externalLink | 否 | string | 第三方兑换链接 | - |
| id | 否 | integer / int64 | 主键ID | - |
| itemCode | 否 | string | 物品编码 | - |
| itemName | 否 | string | 物品名称 | - |
| pointsRequired | 否 | integer / int32 | 所需积分 | - |
| sortOrder | 否 | integer / int32 | 排序权重 | - |
| status | 否 | integer / int32 | 状态:0-下架 1-上架 | - |
| stock | 否 | integer / int32 | 库存数量(0表示无限) | - |
| thirdPartyCode | 否 | string | 第三方平台物品编码 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量新增
- **用途:** 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/exchange/item/addBatch`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addBatchUsingPOST_4`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`array<兑换物品>`
- 必填:文档未标记
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 新增并返回保存的数据
- **用途:** 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/exchange/item/addReturn`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addReturnUsingPOST_4`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`兑换物品`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | 创建时间 | - |
| dailyLimitPerUser | 否 | integer / int32 | 每人每日兑换上限(0表示无限制) | - |
| description | 否 | string | 物品描述 | - |
| externalLink | 否 | string | 第三方兑换链接 | - |
| id | 否 | integer / int64 | 主键ID | - |
| itemCode | 否 | string | 物品编码 | - |
| itemName | 否 | string | 物品名称 | - |
| pointsRequired | 否 | integer / int32 | 所需积分 | - |
| sortOrder | 否 | integer / int32 | 排序权重 | - |
| status | 否 | integer / int32 | 状态:0-下架 1-上架 | - |
| stock | 否 | integer / int32 | 库存数量(0表示无限) | - |
| thirdPartyCode | 否 | string | 第三方平台物品编码 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 根据属性删除
- **用途:** 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/item/delete`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteUsingGET_4`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| dailyLimitPerUser | query | 否 | integer / int32 | 每人每日兑换上限(0表示无限制) | - |
| description | query | 否 | string | 物品描述 | - |
| externalLink | query | 否 | string | 第三方兑换链接 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| itemCode | query | 否 | string | 物品编码 | - |
| itemName | query | 否 | string | 物品名称 | - |
| pointsRequired | query | 否 | integer / int32 | 所需积分 | - |
| sortOrder | query | 否 | integer / int32 | 排序权重 | - |
| status | query | 否 | integer / int32 | 状态:0-下架 1-上架 | - |
| stock | query | 否 | integer / int32 | 库存数量(0表示无限) | - |
| thirdPartyCode | query | 否 | string | 第三方平台物品编码 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 主键删除
- **用途:** 根据主键ID删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/item/deleteById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteOneUsingGET_4`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量删除
- **用途:** 根据ID列表批量删除记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/item/deleteByIds`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_9`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| ids | query | 是 | string | ID列表(逗号分隔) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询所有
- **用途:** 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/item/getAll`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getAllUsingGET_4`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 分页查询
- **用途:** 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/item/getListByPage`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListByPageUsingGET_4`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| dailyLimitPerUser | query | 否 | integer / int32 | 每人每日兑换上限(0表示无限制) | - |
| description | query | 否 | string | 物品描述 | - |
| externalLink | query | 否 | string | 第三方兑换链接 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| itemCode | query | 否 | string | 物品编码 | - |
| itemName | query | 否 | string | 物品名称 | - |
| pageNum | query | 是 | integer / int32 | 页码 | - |
| pointsRequired | query | 否 | integer / int32 | 所需积分 | - |
| sortOrder | query | 否 | integer / int32 | 排序权重 | - |
| status | query | 否 | integer / int32 | 状态:0-下架 1-上架 | - |
| stock | query | 否 | integer / int32 | 库存数量(0表示无限) | - |
| thirdPartyCode | query | 否 | string | 第三方平台物品编码 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| pageSize | query | 是 | integer / int32 | 每页条数 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 详情
- **用途:** 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/item/info`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `infoUsingGET_4`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 条件查询
- **用途:** 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/item/list`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListUsingGET_4`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| dailyLimitPerUser | query | 否 | integer / int32 | 每人每日兑换上限(0表示无限制) | - |
| description | query | 否 | string | 物品描述 | - |
| externalLink | query | 否 | string | 第三方兑换链接 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| itemCode | query | 否 | string | 物品编码 | - |
| itemName | query | 否 | string | 物品名称 | - |
| pointsRequired | query | 否 | integer / int32 | 所需积分 | - |
| sortOrder | query | 否 | integer / int32 | 排序权重 | - |
| status | query | 否 | integer / int32 | 状态:0-下架 1-上架 | - |
| stock | query | 否 | integer / int32 | 库存数量(0表示无限) | - |
| thirdPartyCode | query | 否 | string | 第三方平台物品编码 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询上架物品列表
- **用途:** 前端展示用,返回 status=1 的物品,按 sortOrder 降序。返回 data 为 ExchangeItem 数组,每个元素包含:id、itemName-物品名称、itemPrice-所需积分、itemImage-物品图片URL、description-描述、stock-库存。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/item/listOnShelf`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `listOnShelfUsingGET`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 逻辑删除
- **用途:** 根据主键ID逻辑删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/exchange/item/removeById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_8`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 修改
- **用途:** 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/exchange/item/updateById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `updateByIdUsingPOST_4`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`兑换物品`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | 创建时间 | - |
| dailyLimitPerUser | 否 | integer / int32 | 每人每日兑换上限(0表示无限制) | - |
| description | 否 | string | 物品描述 | - |
| externalLink | 否 | string | 第三方兑换链接 | - |
| id | 否 | integer / int64 | 主键ID | - |
| itemCode | 否 | string | 物品编码 | - |
| itemName | 否 | string | 物品名称 | - |
| pointsRequired | 否 | integer / int32 | 所需积分 | - |
| sortOrder | 否 | integer / int32 | 排序权重 | - |
| status | 否 | integer / int32 | 状态:0-下架 1-上架 | - |
| stock | 否 | integer / int32 | 库存数量(0表示无限) | - |
| thirdPartyCode | 否 | string | 第三方平台物品编码 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 上下架操作
- **用途:** status=0 下架,status=1 上架。返回 data 为 boolean。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/exchange/item/updateStatus`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `updateStatusUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| itemId | query | 是 | integer / int64 | 物品ID | - |
| status | query | 是 | integer / int32 | 状态:0-下架 1-上架 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

449
docs/api/modules/10-exchange-order-track.md

@ -0,0 +1,449 @@ @@ -0,0 +1,449 @@
# 兑换订单追踪
本模块共 14 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 新增 | POST | `/gd_dataserver/gd_dataserver/business/points/order/track/add` | 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。 |
| 批量新增 | POST | `/gd_dataserver/gd_dataserver/business/points/order/track/addBatch` | 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。 |
| 新增并返回保存的数据 | POST | `/gd_dataserver/gd_dataserver/business/points/order/track/addReturn` | 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。 |
| 根据属性删除 | GET | `/gd_dataserver/gd_dataserver/business/points/order/track/delete` | 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。 |
| 主键删除 | GET | `/gd_dataserver/gd_dataserver/business/points/order/track/deleteById` | 根据主键ID删除单条记录,成功返回 data 为 null。 |
| 批量删除 | GET | `/gd_dataserver/gd_dataserver/business/points/order/track/deleteByIds` | 根据ID列表批量删除记录,成功返回 data 为 null。 |
| 查询所有 | GET | `/gd_dataserver/gd_dataserver/business/points/order/track/getAll` | 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。 |
| 分页查询 | GET | `/gd_dataserver/gd_dataserver/business/points/order/track/getListByPage` | 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。 |
| 详情 | GET | `/gd_dataserver/gd_dataserver/business/points/order/track/info` | 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。 |
| 条件查询 | GET | `/gd_dataserver/gd_dataserver/business/points/order/track/list` | 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。 |
| 查询订单追踪记录(按订单ID) | GET | `/gd_dataserver/gd_dataserver/business/points/order/track/list/{orderId}` | 返回 data 为 ExchangeOrderTrack 数组,每个元素包含:id、orderId-订单ID、orderNo-订单号、fromStatus-原状态、toStatus-新状态、trackType-追踪类型、remark-备注、operator-操作人、createTime-操作时间。 |
| 查询订单追踪记录(按订单号) | GET | `/gd_dataserver/gd_dataserver/business/points/order/track/listByNo/{orderNo}` | 返回 data 为 ExchangeOrderTrack 数组,字段同上。 |
| 逻辑删除 | GET | `/gd_dataserver/gd_dataserver/business/points/order/track/removeById` | 根据主键ID逻辑删除单条记录,成功返回 data 为 null。 |
| 修改 | POST | `/gd_dataserver/gd_dataserver/business/points/order/track/updateById` | 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。 |
## 接口详情
### 新增
- **用途:** 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/order/track/add`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addOneUsingPOST_7`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`兑换订单追踪`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | 创建时间 | - |
| fromStatus | 否 | integer / int32 | 变更前状态 | - |
| id | 否 | integer / int64 | 主键ID | - |
| ipAddress | 否 | string | 操作IP | - |
| operateType | 否 | string | 操作类型:CREATE/FREEZE/UNFREEZE/DEDUCT/SUBMIT/CANCEL/REFUND/RETRY | - |
| operator | 否 | string | 操作人 | - |
| orderId | 否 | integer / int64 | 订单ID | - |
| orderNo | 否 | string | 订单号 | - |
| remark | 否 | string | 操作备注 | - |
| statusName | 否 | string | 状态名称 | - |
| toStatus | 否 | integer / int32 | 变更后状态 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量新增
- **用途:** 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/order/track/addBatch`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addBatchUsingPOST_7`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`array<兑换订单追踪>`
- 必填:文档未标记
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 新增并返回保存的数据
- **用途:** 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/order/track/addReturn`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addReturnUsingPOST_7`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`兑换订单追踪`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | 创建时间 | - |
| fromStatus | 否 | integer / int32 | 变更前状态 | - |
| id | 否 | integer / int64 | 主键ID | - |
| ipAddress | 否 | string | 操作IP | - |
| operateType | 否 | string | 操作类型:CREATE/FREEZE/UNFREEZE/DEDUCT/SUBMIT/CANCEL/REFUND/RETRY | - |
| operator | 否 | string | 操作人 | - |
| orderId | 否 | integer / int64 | 订单ID | - |
| orderNo | 否 | string | 订单号 | - |
| remark | 否 | string | 操作备注 | - |
| statusName | 否 | string | 状态名称 | - |
| toStatus | 否 | integer / int32 | 变更后状态 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 根据属性删除
- **用途:** 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/order/track/delete`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteUsingGET_7`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| fromStatus | query | 否 | integer / int32 | 变更前状态 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| ipAddress | query | 否 | string | 操作IP | - |
| operateType | query | 否 | string | 操作类型:CREATE/FREEZE/UNFREEZE/DEDUCT/SUBMIT/CANCEL/REFUND/RETRY | - |
| operator | query | 否 | string | 操作人 | - |
| orderId | query | 否 | integer / int64 | 订单ID | - |
| orderNo | query | 否 | string | 订单号 | - |
| remark | query | 否 | string | 操作备注 | - |
| statusName | query | 否 | string | 状态名称 | - |
| toStatus | query | 否 | integer / int32 | 变更后状态 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 主键删除
- **用途:** 根据主键ID删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/order/track/deleteById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteOneUsingGET_7`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量删除
- **用途:** 根据ID列表批量删除记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/order/track/deleteByIds`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_15`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| ids | query | 是 | string | ID列表(逗号分隔) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询所有
- **用途:** 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/order/track/getAll`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getAllUsingGET_7`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 分页查询
- **用途:** 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/order/track/getListByPage`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListByPageUsingGET_7`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| fromStatus | query | 否 | integer / int32 | 变更前状态 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| ipAddress | query | 否 | string | 操作IP | - |
| operateType | query | 否 | string | 操作类型:CREATE/FREEZE/UNFREEZE/DEDUCT/SUBMIT/CANCEL/REFUND/RETRY | - |
| operator | query | 否 | string | 操作人 | - |
| orderId | query | 否 | integer / int64 | 订单ID | - |
| orderNo | query | 否 | string | 订单号 | - |
| pageNum | query | 是 | integer / int32 | 页码 | - |
| remark | query | 否 | string | 操作备注 | - |
| statusName | query | 否 | string | 状态名称 | - |
| toStatus | query | 否 | integer / int32 | 变更后状态 | - |
| pageSize | query | 是 | integer / int32 | 每页条数 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 详情
- **用途:** 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/order/track/info`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `infoUsingGET_7`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 条件查询
- **用途:** 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/order/track/list`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListUsingGET_7`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| fromStatus | query | 否 | integer / int32 | 变更前状态 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| ipAddress | query | 否 | string | 操作IP | - |
| operateType | query | 否 | string | 操作类型:CREATE/FREEZE/UNFREEZE/DEDUCT/SUBMIT/CANCEL/REFUND/RETRY | - |
| operator | query | 否 | string | 操作人 | - |
| orderId | query | 否 | integer / int64 | 订单ID | - |
| orderNo | query | 否 | string | 订单号 | - |
| remark | query | 否 | string | 操作备注 | - |
| statusName | query | 否 | string | 状态名称 | - |
| toStatus | query | 否 | integer / int32 | 变更后状态 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询订单追踪记录(按订单ID)
- **用途:** 返回 data 为 ExchangeOrderTrack 数组,每个元素包含:id、orderId-订单ID、orderNo-订单号、fromStatus-原状态、toStatus-新状态、trackType-追踪类型、remark-备注、operator-操作人、createTime-操作时间。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/order/track/list/{orderId}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getTracksByOrderIdUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| orderId | path | 是 | integer / int64 | 订单ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询订单追踪记录(按订单号)
- **用途:** 返回 data 为 ExchangeOrderTrack 数组,字段同上。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/order/track/listByNo/{orderNo}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getTracksByOrderNoUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| orderNo | path | 是 | string | 订单号 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 逻辑删除
- **用途:** 根据主键ID逻辑删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/order/track/removeById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_14`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 修改
- **用途:** 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/order/track/updateById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `updateByIdUsingPOST_7`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`兑换订单追踪`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | 创建时间 | - |
| fromStatus | 否 | integer / int32 | 变更前状态 | - |
| id | 否 | integer / int64 | 主键ID | - |
| ipAddress | 否 | string | 操作IP | - |
| operateType | 否 | string | 操作类型:CREATE/FREEZE/UNFREEZE/DEDUCT/SUBMIT/CANCEL/REFUND/RETRY | - |
| operator | 否 | string | 操作人 | - |
| orderId | 否 | integer / int64 | 订单ID | - |
| orderNo | 否 | string | 订单号 | - |
| remark | 否 | string | 操作备注 | - |
| statusName | 否 | string | 状态名称 | - |
| toStatus | 否 | integer / int32 | 变更后状态 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

537
docs/api/modules/11-exchange-config.md

@ -0,0 +1,537 @@ @@ -0,0 +1,537 @@
# 兑换安全配置
本模块共 16 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 获取当前启用的兑换配置 | GET | `/gd_dataserver/gd_dataserver/business/points/exchange/config/active` | 无请求参数。返回 data 为 ExchangeConfig 对象(数据库无记录时返回默认配置)。字段:pointsRatio-积分比例(N积分=1元)、singleMaxPoints-单笔最大积分、singleMinPoints-单笔最小积分、dailyLimitPerUser-每人每日兑换上限、monthlyLimitPerUser-每月上限、yearlyLimitPerUser-每年上限、dailyOrderCountLimit-每日兑换次数上限、rapidExchangeThreshold-短时间兑换次数阈值、rapidExchangeWindowMinutes-快速兑换检测窗口(分钟)、largeAmountThreshold-大额预警阈值、largeAmountNeedApproval-大额是否需审批(1是/0否)、antiFarmEnabled-隐患上报防刷检测开关(1启用/0禁用)。当安全开关关闭(enabled=0)时返回 null。 |
| 新增 | POST | `/gd_dataserver/gd_dataserver/business/points/exchange/config/add` | 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。 |
| 批量新增 | POST | `/gd_dataserver/gd_dataserver/business/points/exchange/config/addBatch` | 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。 |
| 新增并返回保存的数据 | POST | `/gd_dataserver/gd_dataserver/business/points/exchange/config/addReturn` | 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。 |
| 根据属性删除 | GET | `/gd_dataserver/gd_dataserver/business/points/exchange/config/delete` | 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。 |
| 主键删除 | GET | `/gd_dataserver/gd_dataserver/business/points/exchange/config/deleteById` | 根据主键ID删除单条记录,成功返回 data 为 null。 |
| 批量删除 | GET | `/gd_dataserver/gd_dataserver/business/points/exchange/config/deleteByIds` | 根据ID列表批量删除记录,成功返回 data 为 null。 |
| 查询所有 | GET | `/gd_dataserver/gd_dataserver/business/points/exchange/config/getAll` | 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。 |
| 分页查询 | GET | `/gd_dataserver/gd_dataserver/business/points/exchange/config/getListByPage` | 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。 |
| 详情 | GET | `/gd_dataserver/gd_dataserver/business/points/exchange/config/info` | 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。 |
| 条件查询 | GET | `/gd_dataserver/gd_dataserver/business/points/exchange/config/list` | 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。 |
| 逻辑删除 | GET | `/gd_dataserver/gd_dataserver/business/points/exchange/config/removeById` | 根据主键ID逻辑删除单条记录,成功返回 data 为 null。 |
| 查询兑换安全开关状态 | GET | `/gd_dataserver/gd_dataserver/business/points/exchange/config/switch/status` | 无请求参数。返回 data 为 boolean,true-启用安全校验,false-已关闭。判断逻辑:数据库无配置记录时默认启用;有记录时根据 enabled 字段(1启用/0禁用)决定。 |
| 切换兑换安全开关(管理端) | POST | `/gd_dataserver/gd_dataserver/business/points/exchange/config/switch/toggle` | 请求参数:enabled-true启用/false禁用(Boolean,必填)。返回 data 为 boolean,true-切换成功,false-切换失败。若数据库无配置记录且传入true,会自动创建默认配置。 |
| 修改 | POST | `/gd_dataserver/gd_dataserver/business/points/exchange/config/updateById` | 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。 |
| 校验兑换请求(APP端) | POST | `/gd_dataserver/gd_dataserver/business/points/exchange/config/validate` | 在下单前调用,校验是否满足安全规则。请求参数:totalPoints-兑换总积分(int,必填)。返回 data 为对象,包含:passed-是否通过(boolean)、errors-错误信息数组(如'单笔兑换不能超过5000积分')、warnings-警告信息数组、securityEnabled-安全开关是否启用(boolean)、config-当前启用的兑换配置对象(开关关闭时为null)。前端根据 passed 判断能否兑换,errors 为空表示校验通过。当安全开关关闭时,passed=true、securityEnabled=false。 |
## 接口详情
### 获取当前启用的兑换配置
- **用途:** 无请求参数。返回 data 为 ExchangeConfig 对象(数据库无记录时返回默认配置)。字段:pointsRatio-积分比例(N积分=1元)、singleMaxPoints-单笔最大积分、singleMinPoints-单笔最小积分、dailyLimitPerUser-每人每日兑换上限、monthlyLimitPerUser-每月上限、yearlyLimitPerUser-每年上限、dailyOrderCountLimit-每日兑换次数上限、rapidExchangeThreshold-短时间兑换次数阈值、rapidExchangeWindowMinutes-快速兑换检测窗口(分钟)、largeAmountThreshold-大额预警阈值、largeAmountNeedApproval-大额是否需审批(1是/0否)、antiFarmEnabled-隐患上报防刷检测开关(1启用/0禁用)。当安全开关关闭(enabled=0)时返回 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/exchange/config/active`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getActiveConfigUsingGET_1`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 新增
- **用途:** 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/exchange/config/add`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addOneUsingPOST_3`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`兑换安全配置`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| antiFarmEnabled | 否 | integer / int32 | 隐患上报防刷检测是否启用:1-启用 0-禁用 | - |
| configName | 否 | string | 配置名称 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| dailyLimitPerUser | 否 | integer / int32 | 每人每日兑换上限(积分) | - |
| dailyOrderCountLimit | 否 | integer / int32 | 每人每日兑换次数上限 | - |
| enabled | 否 | integer / int32 | 是否启用:1-启用 0-禁用 | - |
| id | 否 | integer / int64 | 主键ID | - |
| largeAmountNeedApproval | 否 | integer / int32 | 大额兑换是否需审批:1-是 0-否 | - |
| largeAmountThreshold | 否 | integer / int32 | 大额兑换预警阈值(积分) | - |
| monthlyLimitPerUser | 否 | integer / int32 | 每人每月上限(积分) | - |
| pointsRatio | 否 | integer / int32 | 积分比例(N积分=1元) | - |
| rapidExchangeThreshold | 否 | integer / int32 | 短时间内兑换次数阈值(触发预警) | - |
| rapidExchangeWindowMinutes | 否 | integer / int32 | 快速兑换检测时间窗口(分钟) | - |
| remark | 否 | string | 备注 | - |
| singleMaxPoints | 否 | integer / int32 | 单笔最大积分 | - |
| singleMinPoints | 否 | integer / int32 | 单笔最小积分 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| yearlyLimitPerUser | 否 | integer / int32 | 每人每年上限(积分) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量新增
- **用途:** 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/exchange/config/addBatch`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addBatchUsingPOST_3`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`array<兑换安全配置>`
- 必填:文档未标记
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 新增并返回保存的数据
- **用途:** 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/exchange/config/addReturn`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addReturnUsingPOST_3`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`兑换安全配置`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| antiFarmEnabled | 否 | integer / int32 | 隐患上报防刷检测是否启用:1-启用 0-禁用 | - |
| configName | 否 | string | 配置名称 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| dailyLimitPerUser | 否 | integer / int32 | 每人每日兑换上限(积分) | - |
| dailyOrderCountLimit | 否 | integer / int32 | 每人每日兑换次数上限 | - |
| enabled | 否 | integer / int32 | 是否启用:1-启用 0-禁用 | - |
| id | 否 | integer / int64 | 主键ID | - |
| largeAmountNeedApproval | 否 | integer / int32 | 大额兑换是否需审批:1-是 0-否 | - |
| largeAmountThreshold | 否 | integer / int32 | 大额兑换预警阈值(积分) | - |
| monthlyLimitPerUser | 否 | integer / int32 | 每人每月上限(积分) | - |
| pointsRatio | 否 | integer / int32 | 积分比例(N积分=1元) | - |
| rapidExchangeThreshold | 否 | integer / int32 | 短时间内兑换次数阈值(触发预警) | - |
| rapidExchangeWindowMinutes | 否 | integer / int32 | 快速兑换检测时间窗口(分钟) | - |
| remark | 否 | string | 备注 | - |
| singleMaxPoints | 否 | integer / int32 | 单笔最大积分 | - |
| singleMinPoints | 否 | integer / int32 | 单笔最小积分 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| yearlyLimitPerUser | 否 | integer / int32 | 每人每年上限(积分) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 根据属性删除
- **用途:** 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/exchange/config/delete`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteUsingGET_3`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| antiFarmEnabled | query | 否 | integer / int32 | 隐患上报防刷检测是否启用:1-启用 0-禁用 | - |
| configName | query | 否 | string | 配置名称 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| dailyLimitPerUser | query | 否 | integer / int32 | 每人每日兑换上限(积分) | - |
| dailyOrderCountLimit | query | 否 | integer / int32 | 每人每日兑换次数上限 | - |
| enabled | query | 否 | integer / int32 | 是否启用:1-启用 0-禁用 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| largeAmountNeedApproval | query | 否 | integer / int32 | 大额兑换是否需审批:1-是 0-否 | - |
| largeAmountThreshold | query | 否 | integer / int32 | 大额兑换预警阈值(积分) | - |
| monthlyLimitPerUser | query | 否 | integer / int32 | 每人每月上限(积分) | - |
| pointsRatio | query | 否 | integer / int32 | 积分比例(N积分=1元) | - |
| rapidExchangeThreshold | query | 否 | integer / int32 | 短时间内兑换次数阈值(触发预警) | - |
| rapidExchangeWindowMinutes | query | 否 | integer / int32 | 快速兑换检测时间窗口(分钟) | - |
| remark | query | 否 | string | 备注 | - |
| singleMaxPoints | query | 否 | integer / int32 | 单笔最大积分 | - |
| singleMinPoints | query | 否 | integer / int32 | 单笔最小积分 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| yearlyLimitPerUser | query | 否 | integer / int32 | 每人每年上限(积分) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 主键删除
- **用途:** 根据主键ID删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/exchange/config/deleteById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteOneUsingGET_3`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量删除
- **用途:** 根据ID列表批量删除记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/exchange/config/deleteByIds`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_7`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| ids | query | 是 | string | ID列表(逗号分隔) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询所有
- **用途:** 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/exchange/config/getAll`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getAllUsingGET_3`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 分页查询
- **用途:** 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/exchange/config/getListByPage`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListByPageUsingGET_3`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| antiFarmEnabled | query | 否 | integer / int32 | 隐患上报防刷检测是否启用:1-启用 0-禁用 | - |
| configName | query | 否 | string | 配置名称 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| dailyLimitPerUser | query | 否 | integer / int32 | 每人每日兑换上限(积分) | - |
| dailyOrderCountLimit | query | 否 | integer / int32 | 每人每日兑换次数上限 | - |
| enabled | query | 否 | integer / int32 | 是否启用:1-启用 0-禁用 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| largeAmountNeedApproval | query | 否 | integer / int32 | 大额兑换是否需审批:1-是 0-否 | - |
| largeAmountThreshold | query | 否 | integer / int32 | 大额兑换预警阈值(积分) | - |
| monthlyLimitPerUser | query | 否 | integer / int32 | 每人每月上限(积分) | - |
| pageNum | query | 是 | integer / int32 | 页码 | - |
| pointsRatio | query | 否 | integer / int32 | 积分比例(N积分=1元) | - |
| rapidExchangeThreshold | query | 否 | integer / int32 | 短时间内兑换次数阈值(触发预警) | - |
| rapidExchangeWindowMinutes | query | 否 | integer / int32 | 快速兑换检测时间窗口(分钟) | - |
| remark | query | 否 | string | 备注 | - |
| singleMaxPoints | query | 否 | integer / int32 | 单笔最大积分 | - |
| singleMinPoints | query | 否 | integer / int32 | 单笔最小积分 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| yearlyLimitPerUser | query | 否 | integer / int32 | 每人每年上限(积分) | - |
| pageSize | query | 是 | integer / int32 | 每页条数 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 详情
- **用途:** 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/exchange/config/info`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `infoUsingGET_3`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 条件查询
- **用途:** 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/exchange/config/list`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListUsingGET_3`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| antiFarmEnabled | query | 否 | integer / int32 | 隐患上报防刷检测是否启用:1-启用 0-禁用 | - |
| configName | query | 否 | string | 配置名称 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| dailyLimitPerUser | query | 否 | integer / int32 | 每人每日兑换上限(积分) | - |
| dailyOrderCountLimit | query | 否 | integer / int32 | 每人每日兑换次数上限 | - |
| enabled | query | 否 | integer / int32 | 是否启用:1-启用 0-禁用 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| largeAmountNeedApproval | query | 否 | integer / int32 | 大额兑换是否需审批:1-是 0-否 | - |
| largeAmountThreshold | query | 否 | integer / int32 | 大额兑换预警阈值(积分) | - |
| monthlyLimitPerUser | query | 否 | integer / int32 | 每人每月上限(积分) | - |
| pointsRatio | query | 否 | integer / int32 | 积分比例(N积分=1元) | - |
| rapidExchangeThreshold | query | 否 | integer / int32 | 短时间内兑换次数阈值(触发预警) | - |
| rapidExchangeWindowMinutes | query | 否 | integer / int32 | 快速兑换检测时间窗口(分钟) | - |
| remark | query | 否 | string | 备注 | - |
| singleMaxPoints | query | 否 | integer / int32 | 单笔最大积分 | - |
| singleMinPoints | query | 否 | integer / int32 | 单笔最小积分 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| yearlyLimitPerUser | query | 否 | integer / int32 | 每人每年上限(积分) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 逻辑删除
- **用途:** 根据主键ID逻辑删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/exchange/config/removeById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_6`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询兑换安全开关状态
- **用途:** 无请求参数。返回 data 为 boolean,true-启用安全校验,false-已关闭。判断逻辑:数据库无配置记录时默认启用;有记录时根据 enabled 字段(1启用/0禁用)决定。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/exchange/config/switch/status`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getSwitchStatusUsingGET`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 切换兑换安全开关(管理端)
- **用途:** 请求参数:enabled-true启用/false禁用(Boolean,必填)。返回 data 为 boolean,true-切换成功,false-切换失败。若数据库无配置记录且传入true,会自动创建默认配置。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/exchange/config/switch/toggle`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `toggleSwitchUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| enabled | query | 是 | boolean | true-启用安全校验,false-禁用 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 修改
- **用途:** 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/exchange/config/updateById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `updateByIdUsingPOST_3`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`兑换安全配置`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| antiFarmEnabled | 否 | integer / int32 | 隐患上报防刷检测是否启用:1-启用 0-禁用 | - |
| configName | 否 | string | 配置名称 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| dailyLimitPerUser | 否 | integer / int32 | 每人每日兑换上限(积分) | - |
| dailyOrderCountLimit | 否 | integer / int32 | 每人每日兑换次数上限 | - |
| enabled | 否 | integer / int32 | 是否启用:1-启用 0-禁用 | - |
| id | 否 | integer / int64 | 主键ID | - |
| largeAmountNeedApproval | 否 | integer / int32 | 大额兑换是否需审批:1-是 0-否 | - |
| largeAmountThreshold | 否 | integer / int32 | 大额兑换预警阈值(积分) | - |
| monthlyLimitPerUser | 否 | integer / int32 | 每人每月上限(积分) | - |
| pointsRatio | 否 | integer / int32 | 积分比例(N积分=1元) | - |
| rapidExchangeThreshold | 否 | integer / int32 | 短时间内兑换次数阈值(触发预警) | - |
| rapidExchangeWindowMinutes | 否 | integer / int32 | 快速兑换检测时间窗口(分钟) | - |
| remark | 否 | string | 备注 | - |
| singleMaxPoints | 否 | integer / int32 | 单笔最大积分 | - |
| singleMinPoints | 否 | integer / int32 | 单笔最小积分 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| yearlyLimitPerUser | 否 | integer / int32 | 每人每年上限(积分) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 校验兑换请求(APP端)
- **用途:** 在下单前调用,校验是否满足安全规则。请求参数:totalPoints-兑换总积分(int,必填)。返回 data 为对象,包含:passed-是否通过(boolean)、errors-错误信息数组(如'单笔兑换不能超过5000积分')、warnings-警告信息数组、securityEnabled-安全开关是否启用(boolean)、config-当前启用的兑换配置对象(开关关闭时为null)。前端根据 passed 判断能否兑换,errors 为空表示校验通过。当安全开关关闭时,passed=true、securityEnabled=false。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/exchange/config/validate`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `validateExchangeUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| totalPoints | query | 是 | integer / int32 | 兑换总积分 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

467
docs/api/modules/12-exchange-operation-log.md

@ -0,0 +1,467 @@ @@ -0,0 +1,467 @@
# 兑换操作日志
本模块共 14 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 新增 | POST | `/gd_dataserver/gd_dataserver/business/points/operation/log/add` | 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。 |
| 批量新增 | POST | `/gd_dataserver/gd_dataserver/business/points/operation/log/addBatch` | 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。 |
| 新增并返回保存的数据 | POST | `/gd_dataserver/gd_dataserver/business/points/operation/log/addReturn` | 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。 |
| 根据属性删除 | GET | `/gd_dataserver/gd_dataserver/business/points/operation/log/delete` | 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。 |
| 主键删除 | GET | `/gd_dataserver/gd_dataserver/business/points/operation/log/deleteById` | 根据主键ID删除单条记录,成功返回 data 为 null。 |
| 批量删除 | GET | `/gd_dataserver/gd_dataserver/business/points/operation/log/deleteByIds` | 根据ID列表批量删除记录,成功返回 data 为 null。 |
| 查询所有 | GET | `/gd_dataserver/gd_dataserver/business/points/operation/log/getAll` | 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。 |
| 分页查询 | GET | `/gd_dataserver/gd_dataserver/business/points/operation/log/getListByPage` | 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。 |
| 详情 | GET | `/gd_dataserver/gd_dataserver/business/points/operation/log/info` | 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。 |
| 条件查询 | GET | `/gd_dataserver/gd_dataserver/business/points/operation/log/list` | 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。 |
| 查询订单操作日志 | GET | `/gd_dataserver/gd_dataserver/business/points/operation/log/order/{orderId}` | 返回 data 为 ExchangeOperationLog 数组,字段同上。 |
| 逻辑删除 | GET | `/gd_dataserver/gd_dataserver/business/points/operation/log/removeById` | 根据主键ID逻辑删除单条记录,成功返回 data 为 null。 |
| 修改 | POST | `/gd_dataserver/gd_dataserver/business/points/operation/log/updateById` | 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。 |
| 查询用户操作日志 | GET | `/gd_dataserver/gd_dataserver/business/points/operation/log/user/{userId}` | 返回 data 为 ExchangeOperationLog 数组,每个元素包含:id、userId-用户ID、orderId-订单ID、orderNo-订单号、operationType-操作类型、operationDetail-操作详情、result-结果、createTime。 |
## 接口详情
### 新增
- **用途:** 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/operation/log/add`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addOneUsingPOST_5`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`兑换操作日志`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | 创建时间 | - |
| durationMs | 否 | integer / int32 | 耗时(毫秒) | - |
| errorMsg | 否 | string | 错误信息 | - |
| id | 否 | integer / int64 | 主键ID | - |
| ipAddress | 否 | string | 操作IP | - |
| operationDesc | 否 | string | 操作描述 | - |
| operationType | 否 | string | 操作类型:VIEW/VALIDATE/CREATE/FREEZE/UNFREEZE/DEDUCT/SUBMIT/CANCEL/REFUND/RETRY | - |
| orderId | 否 | integer / int64 | 关联订单ID | - |
| orderNo | 否 | string | 关联订单号 | - |
| requestParams | 否 | string | 请求参数(JSON) | - |
| responseResult | 否 | string | 响应结果(JSON) | - |
| status | 否 | string | 操作结果:SUCCESS/FAIL | - |
| userAgent | 否 | string | 客户端UA | - |
| userId | 否 | integer / int64 | 操作用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量新增
- **用途:** 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/operation/log/addBatch`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addBatchUsingPOST_5`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`array<兑换操作日志>`
- 必填:文档未标记
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 新增并返回保存的数据
- **用途:** 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/operation/log/addReturn`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addReturnUsingPOST_5`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`兑换操作日志`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | 创建时间 | - |
| durationMs | 否 | integer / int32 | 耗时(毫秒) | - |
| errorMsg | 否 | string | 错误信息 | - |
| id | 否 | integer / int64 | 主键ID | - |
| ipAddress | 否 | string | 操作IP | - |
| operationDesc | 否 | string | 操作描述 | - |
| operationType | 否 | string | 操作类型:VIEW/VALIDATE/CREATE/FREEZE/UNFREEZE/DEDUCT/SUBMIT/CANCEL/REFUND/RETRY | - |
| orderId | 否 | integer / int64 | 关联订单ID | - |
| orderNo | 否 | string | 关联订单号 | - |
| requestParams | 否 | string | 请求参数(JSON) | - |
| responseResult | 否 | string | 响应结果(JSON) | - |
| status | 否 | string | 操作结果:SUCCESS/FAIL | - |
| userAgent | 否 | string | 客户端UA | - |
| userId | 否 | integer / int64 | 操作用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 根据属性删除
- **用途:** 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/operation/log/delete`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteUsingGET_5`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| durationMs | query | 否 | integer / int32 | 耗时(毫秒) | - |
| errorMsg | query | 否 | string | 错误信息 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| ipAddress | query | 否 | string | 操作IP | - |
| operationDesc | query | 否 | string | 操作描述 | - |
| operationType | query | 否 | string | 操作类型:VIEW/VALIDATE/CREATE/FREEZE/UNFREEZE/DEDUCT/SUBMIT/CANCEL/REFUND/RETRY | - |
| orderId | query | 否 | integer / int64 | 关联订单ID | - |
| orderNo | query | 否 | string | 关联订单号 | - |
| requestParams | query | 否 | string | 请求参数(JSON) | - |
| responseResult | query | 否 | string | 响应结果(JSON) | - |
| status | query | 否 | string | 操作结果:SUCCESS/FAIL | - |
| userAgent | query | 否 | string | 客户端UA | - |
| userId | query | 否 | integer / int64 | 操作用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 主键删除
- **用途:** 根据主键ID删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/operation/log/deleteById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteOneUsingGET_5`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量删除
- **用途:** 根据ID列表批量删除记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/operation/log/deleteByIds`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_11`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| ids | query | 是 | string | ID列表(逗号分隔) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询所有
- **用途:** 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/operation/log/getAll`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getAllUsingGET_5`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 分页查询
- **用途:** 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/operation/log/getListByPage`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListByPageUsingGET_5`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| durationMs | query | 否 | integer / int32 | 耗时(毫秒) | - |
| errorMsg | query | 否 | string | 错误信息 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| ipAddress | query | 否 | string | 操作IP | - |
| operationDesc | query | 否 | string | 操作描述 | - |
| operationType | query | 否 | string | 操作类型:VIEW/VALIDATE/CREATE/FREEZE/UNFREEZE/DEDUCT/SUBMIT/CANCEL/REFUND/RETRY | - |
| orderId | query | 否 | integer / int64 | 关联订单ID | - |
| orderNo | query | 否 | string | 关联订单号 | - |
| pageNum | query | 是 | integer / int32 | 页码 | - |
| requestParams | query | 否 | string | 请求参数(JSON) | - |
| responseResult | query | 否 | string | 响应结果(JSON) | - |
| status | query | 否 | string | 操作结果:SUCCESS/FAIL | - |
| userAgent | query | 否 | string | 客户端UA | - |
| userId | query | 否 | integer / int64 | 操作用户ID | - |
| pageSize | query | 是 | integer / int32 | 每页条数 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 详情
- **用途:** 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/operation/log/info`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `infoUsingGET_5`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 条件查询
- **用途:** 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/operation/log/list`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListUsingGET_5`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| durationMs | query | 否 | integer / int32 | 耗时(毫秒) | - |
| errorMsg | query | 否 | string | 错误信息 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| ipAddress | query | 否 | string | 操作IP | - |
| operationDesc | query | 否 | string | 操作描述 | - |
| operationType | query | 否 | string | 操作类型:VIEW/VALIDATE/CREATE/FREEZE/UNFREEZE/DEDUCT/SUBMIT/CANCEL/REFUND/RETRY | - |
| orderId | query | 否 | integer / int64 | 关联订单ID | - |
| orderNo | query | 否 | string | 关联订单号 | - |
| requestParams | query | 否 | string | 请求参数(JSON) | - |
| responseResult | query | 否 | string | 响应结果(JSON) | - |
| status | query | 否 | string | 操作结果:SUCCESS/FAIL | - |
| userAgent | query | 否 | string | 客户端UA | - |
| userId | query | 否 | integer / int64 | 操作用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询订单操作日志
- **用途:** 返回 data 为 ExchangeOperationLog 数组,字段同上。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/operation/log/order/{orderId}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getLogsByOrderIdUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| orderId | path | 是 | integer / int64 | 订单ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 逻辑删除
- **用途:** 根据主键ID逻辑删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/operation/log/removeById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_10`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 修改
- **用途:** 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/operation/log/updateById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `updateByIdUsingPOST_5`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`兑换操作日志`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | 创建时间 | - |
| durationMs | 否 | integer / int32 | 耗时(毫秒) | - |
| errorMsg | 否 | string | 错误信息 | - |
| id | 否 | integer / int64 | 主键ID | - |
| ipAddress | 否 | string | 操作IP | - |
| operationDesc | 否 | string | 操作描述 | - |
| operationType | 否 | string | 操作类型:VIEW/VALIDATE/CREATE/FREEZE/UNFREEZE/DEDUCT/SUBMIT/CANCEL/REFUND/RETRY | - |
| orderId | 否 | integer / int64 | 关联订单ID | - |
| orderNo | 否 | string | 关联订单号 | - |
| requestParams | 否 | string | 请求参数(JSON) | - |
| responseResult | 否 | string | 响应结果(JSON) | - |
| status | 否 | string | 操作结果:SUCCESS/FAIL | - |
| userAgent | 否 | string | 客户端UA | - |
| userId | 否 | integer / int64 | 操作用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询用户操作日志
- **用途:** 返回 data 为 ExchangeOperationLog 数组,每个元素包含:id、userId-用户ID、orderId-订单ID、orderNo-订单号、operationType-操作类型、operationDetail-操作详情、result-结果、createTime。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/operation/log/user/{userId}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getLogsByUserIdUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| userId | path | 是 | integer / int64 | 用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

565
docs/api/modules/13-anti-farm-config.md

@ -0,0 +1,565 @@ @@ -0,0 +1,565 @@
# 防刷分管控配置
本模块共 18 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 获取启用的防刷配置 | GET | `/gd_dataserver/gd_dataserver/business/points/anti/farm/active` | 返回 data 为 AntiFarmConfig 对象,包含当前生效的防刷规则配置。 |
| 新增 | POST | `/gd_dataserver/gd_dataserver/business/points/anti/farm/add` | 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。 |
| 批量新增 | POST | `/gd_dataserver/gd_dataserver/business/points/anti/farm/addBatch` | 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。 |
| 新增并返回保存的数据 | POST | `/gd_dataserver/gd_dataserver/business/points/anti/farm/addReturn` | 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。 |
| 根据属性删除 | GET | `/gd_dataserver/gd_dataserver/business/points/anti/farm/delete` | 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。 |
| 主键删除 | GET | `/gd_dataserver/gd_dataserver/business/points/anti/farm/deleteById` | 根据主键ID删除单条记录,成功返回 data 为 null。 |
| 批量删除 | GET | `/gd_dataserver/gd_dataserver/business/points/anti/farm/deleteByIds` | 根据ID列表批量删除记录,成功返回 data 为 null。 |
| 异常行为一键检测 | GET | `/gd_dataserver/gd_dataserver/business/points/anti/farm/detectAll` | 对指定用户执行全维度异常行为检测,聚合4类防刷校验(上报/积分获取/兑换)。返回 data 为对象,包含:userId-被检测用户ID、reportCheck-上报检测结果{passed-是否通过,reason-原因}、pointsEarnCheck-积分获取检测结果{passed,reason}、exchangeCheck-兑换检测结果{passed,reason}、overallPassed-综合是否通过(boolean)。 |
| 检测自报自审行为 | GET | `/gd_dataserver/gd_dataserver/business/points/anti/farm/detectSelfAudit` | 检测上报人和审核人是否为同一人。返回 data 为字符串,检测到异常时返回'检测到自报自审行为',正常时返回'未检测到异常'。 |
| 查询所有 | GET | `/gd_dataserver/gd_dataserver/business/points/anti/farm/getAll` | 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。 |
| 分页查询 | GET | `/gd_dataserver/gd_dataserver/business/points/anti/farm/getListByPage` | 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。 |
| 详情 | GET | `/gd_dataserver/gd_dataserver/business/points/anti/farm/info` | 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。 |
| 条件查询 | GET | `/gd_dataserver/gd_dataserver/business/points/anti/farm/list` | 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。 |
| 逻辑删除 | GET | `/gd_dataserver/gd_dataserver/business/points/anti/farm/removeById` | 根据主键ID逻辑删除单条记录,成功返回 data 为 null。 |
| 修改 | POST | `/gd_dataserver/gd_dataserver/business/points/anti/farm/updateById` | 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。 |
| 校验兑换是否触发防刷 | GET | `/gd_dataserver/gd_dataserver/business/points/anti/farm/validateExchange` | 返回 data 为对象,包含:triggered-是否触发、reason-触发原因。 |
| 校验积分获取是否触发防刷 | GET | `/gd_dataserver/gd_dataserver/business/points/anti/farm/validatePointsEarn` | 返回 data 为对象,包含:triggered-是否触发、reason-触发原因。 |
| 校验上报是否触发防刷 | GET | `/gd_dataserver/gd_dataserver/business/points/anti/farm/validateReport` | 返回 data 为对象,包含:triggered-是否触发(boolean)、reason-触发原因。前端在上报前调用,若 triggered=true 则提示用户。 |
## 接口详情
### 获取启用的防刷配置
- **用途:** 返回 data 为 AntiFarmConfig 对象,包含当前生效的防刷规则配置。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/anti/farm/active`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getActiveConfigUsingGET`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 新增
- **用途:** 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/anti/farm/add`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addOneUsingPOST_1`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`防刷分管控配置`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| configName | 否 | string | 配置名称 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| dailyPointsEarnLimit | 否 | integer / int32 | 每人每日积分获取上限 | - |
| dailyReportLimit | 否 | integer / int32 | 每人每日上报次数上限 | - |
| enabled | 否 | integer / int32 | 是否启用:1-启用 0-禁用 | - |
| id | 否 | integer / int64 | 主键ID | - |
| ipExchangeDailyLimit | 否 | integer / int32 | 同一IP每日兑换上限 | - |
| remark | 否 | string | 备注 | - |
| reportIntervalMinutes | 否 | integer / int32 | 两次上报最小间隔(分钟) | - |
| sameItemDailyLimit | 否 | integer / int32 | 同一商品每人每日兑换上限 | - |
| sameLocationReportLimit | 否 | integer / int32 | 同一地点上报次数上限(每日) | - |
| sameReporterAuditLimit | 否 | integer / int32 | 同一上报人每日通过审核次数上限 | - |
| selfReportCheckEnabled | 否 | integer / int32 | 是否启用自报自审检测:1-是 0-否 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量新增
- **用途:** 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/anti/farm/addBatch`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addBatchUsingPOST_1`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`array<防刷分管控配置>`
- 必填:文档未标记
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 新增并返回保存的数据
- **用途:** 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/anti/farm/addReturn`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addReturnUsingPOST_1`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`防刷分管控配置`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| configName | 否 | string | 配置名称 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| dailyPointsEarnLimit | 否 | integer / int32 | 每人每日积分获取上限 | - |
| dailyReportLimit | 否 | integer / int32 | 每人每日上报次数上限 | - |
| enabled | 否 | integer / int32 | 是否启用:1-启用 0-禁用 | - |
| id | 否 | integer / int64 | 主键ID | - |
| ipExchangeDailyLimit | 否 | integer / int32 | 同一IP每日兑换上限 | - |
| remark | 否 | string | 备注 | - |
| reportIntervalMinutes | 否 | integer / int32 | 两次上报最小间隔(分钟) | - |
| sameItemDailyLimit | 否 | integer / int32 | 同一商品每人每日兑换上限 | - |
| sameLocationReportLimit | 否 | integer / int32 | 同一地点上报次数上限(每日) | - |
| sameReporterAuditLimit | 否 | integer / int32 | 同一上报人每日通过审核次数上限 | - |
| selfReportCheckEnabled | 否 | integer / int32 | 是否启用自报自审检测:1-是 0-否 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 根据属性删除
- **用途:** 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/anti/farm/delete`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteUsingGET_1`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| configName | query | 否 | string | 配置名称 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| dailyPointsEarnLimit | query | 否 | integer / int32 | 每人每日积分获取上限 | - |
| dailyReportLimit | query | 否 | integer / int32 | 每人每日上报次数上限 | - |
| enabled | query | 否 | integer / int32 | 是否启用:1-启用 0-禁用 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| ipExchangeDailyLimit | query | 否 | integer / int32 | 同一IP每日兑换上限 | - |
| remark | query | 否 | string | 备注 | - |
| reportIntervalMinutes | query | 否 | integer / int32 | 两次上报最小间隔(分钟) | - |
| sameItemDailyLimit | query | 否 | integer / int32 | 同一商品每人每日兑换上限 | - |
| sameLocationReportLimit | query | 否 | integer / int32 | 同一地点上报次数上限(每日) | - |
| sameReporterAuditLimit | query | 否 | integer / int32 | 同一上报人每日通过审核次数上限 | - |
| selfReportCheckEnabled | query | 否 | integer / int32 | 是否启用自报自审检测:1-是 0-否 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 主键删除
- **用途:** 根据主键ID删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/anti/farm/deleteById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteOneUsingGET_1`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量删除
- **用途:** 根据ID列表批量删除记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/anti/farm/deleteByIds`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_3`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| ids | query | 是 | string | ID列表(逗号分隔) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 异常行为一键检测
- **用途:** 对指定用户执行全维度异常行为检测,聚合4类防刷校验(上报/积分获取/兑换)。返回 data 为对象,包含:userId-被检测用户ID、reportCheck-上报检测结果{passed-是否通过,reason-原因}、pointsEarnCheck-积分获取检测结果{passed,reason}、exchangeCheck-兑换检测结果{passed,reason}、overallPassed-综合是否通过(boolean)。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/anti/farm/detectAll`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `detectAllUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| userId | query | 是 | integer / int64 | 被检测用户ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 检测自报自审行为
- **用途:** 检测上报人和审核人是否为同一人。返回 data 为字符串,检测到异常时返回'检测到自报自审行为',正常时返回'未检测到异常'。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/anti/farm/detectSelfAudit`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `detectSelfAuditUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| reporterId | query | 是 | integer / int64 | 上报人ID | - |
| auditorId | query | 是 | integer / int64 | 审核人ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询所有
- **用途:** 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/anti/farm/getAll`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getAllUsingGET_1`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 分页查询
- **用途:** 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/anti/farm/getListByPage`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListByPageUsingGET_1`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| configName | query | 否 | string | 配置名称 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| dailyPointsEarnLimit | query | 否 | integer / int32 | 每人每日积分获取上限 | - |
| dailyReportLimit | query | 否 | integer / int32 | 每人每日上报次数上限 | - |
| enabled | query | 否 | integer / int32 | 是否启用:1-启用 0-禁用 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| ipExchangeDailyLimit | query | 否 | integer / int32 | 同一IP每日兑换上限 | - |
| pageNum | query | 是 | integer / int32 | 页码 | - |
| remark | query | 否 | string | 备注 | - |
| reportIntervalMinutes | query | 否 | integer / int32 | 两次上报最小间隔(分钟) | - |
| sameItemDailyLimit | query | 否 | integer / int32 | 同一商品每人每日兑换上限 | - |
| sameLocationReportLimit | query | 否 | integer / int32 | 同一地点上报次数上限(每日) | - |
| sameReporterAuditLimit | query | 否 | integer / int32 | 同一上报人每日通过审核次数上限 | - |
| selfReportCheckEnabled | query | 否 | integer / int32 | 是否启用自报自审检测:1-是 0-否 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
| pageSize | query | 是 | integer / int32 | 每页条数 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 详情
- **用途:** 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/anti/farm/info`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `infoUsingGET_1`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 条件查询
- **用途:** 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/anti/farm/list`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListUsingGET_1`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| configName | query | 否 | string | 配置名称 | - |
| createTime | query | 否 | string / date-time | 创建时间 | - |
| dailyPointsEarnLimit | query | 否 | integer / int32 | 每人每日积分获取上限 | - |
| dailyReportLimit | query | 否 | integer / int32 | 每人每日上报次数上限 | - |
| enabled | query | 否 | integer / int32 | 是否启用:1-启用 0-禁用 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| ipExchangeDailyLimit | query | 否 | integer / int32 | 同一IP每日兑换上限 | - |
| remark | query | 否 | string | 备注 | - |
| reportIntervalMinutes | query | 否 | integer / int32 | 两次上报最小间隔(分钟) | - |
| sameItemDailyLimit | query | 否 | integer / int32 | 同一商品每人每日兑换上限 | - |
| sameLocationReportLimit | query | 否 | integer / int32 | 同一地点上报次数上限(每日) | - |
| sameReporterAuditLimit | query | 否 | integer / int32 | 同一上报人每日通过审核次数上限 | - |
| selfReportCheckEnabled | query | 否 | integer / int32 | 是否启用自报自审检测:1-是 0-否 | - |
| updateTime | query | 否 | string / date-time | 更新时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 逻辑删除
- **用途:** 根据主键ID逻辑删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/anti/farm/removeById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_2`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 修改
- **用途:** 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/points/anti/farm/updateById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `updateByIdUsingPOST_1`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`防刷分管控配置`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| configName | 否 | string | 配置名称 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| dailyPointsEarnLimit | 否 | integer / int32 | 每人每日积分获取上限 | - |
| dailyReportLimit | 否 | integer / int32 | 每人每日上报次数上限 | - |
| enabled | 否 | integer / int32 | 是否启用:1-启用 0-禁用 | - |
| id | 否 | integer / int64 | 主键ID | - |
| ipExchangeDailyLimit | 否 | integer / int32 | 同一IP每日兑换上限 | - |
| remark | 否 | string | 备注 | - |
| reportIntervalMinutes | 否 | integer / int32 | 两次上报最小间隔(分钟) | - |
| sameItemDailyLimit | 否 | integer / int32 | 同一商品每人每日兑换上限 | - |
| sameLocationReportLimit | 否 | integer / int32 | 同一地点上报次数上限(每日) | - |
| sameReporterAuditLimit | 否 | integer / int32 | 同一上报人每日通过审核次数上限 | - |
| selfReportCheckEnabled | 否 | integer / int32 | 是否启用自报自审检测:1-是 0-否 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 校验兑换是否触发防刷
- **用途:** 返回 data 为对象,包含:triggered-是否触发、reason-触发原因。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/anti/farm/validateExchange`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `validateExchangeUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| userId | query | 是 | integer / int64 | 用户ID | - |
| itemId | query | 是 | integer / int64 | 物品ID | - |
| ip | query | 否 | string | IP地址 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 校验积分获取是否触发防刷
- **用途:** 返回 data 为对象,包含:triggered-是否触发、reason-触发原因。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/anti/farm/validatePointsEarn`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `validatePointsEarnUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| reporterId | query | 是 | integer / int64 | 上报人ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 校验上报是否触发防刷
- **用途:** 返回 data 为对象,包含:triggered-是否触发(boolean)、reason-触发原因。前端在上报前调用,若 triggered=true 则提示用户。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/anti/farm/validateReport`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `validateReportUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| userId | query | 是 | integer / int64 | 用户ID | - |
| location | query | 否 | string | 上报地点 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

157
docs/api/modules/14-mall-integration.md

@ -0,0 +1,157 @@ @@ -0,0 +1,157 @@
# 商城端接口对接
本模块共 4 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 扣减积分 | POST | `/gd_dataserver/gd_dataserver/mall/api/points/deduct` | 商城端在用户下单成功后调用此接口扣减积分,具有幂等性,同一orderNum多次调用只扣减一次 |
| 退还积分 | POST | `/gd_dataserver/gd_dataserver/mall/api/points/refund` | 商城端在用户退款时调用此接口退还积分,具有幂等性,同一orderNum多次调用只退还一次 |
| 根据Token获取用户信息 | POST | `/gd_dataserver/gd_dataserver/mall/api/user/info` | 商城端通过请求头中的Token获取用户基本信息,包括姓名、手机号、SAP编号等 |
| 根据Token获取用户积分信息 | POST | `/gd_dataserver/gd_dataserver/mall/api/user/points` | 商城端通过请求头中的Token及Body中的sap获取用户积分余额,包括可用积分、冻结积分等 |
## 接口详情
### 扣减积分
- **用途:** 商城端在用户下单成功后调用此接口扣减积分,具有幂等性,同一orderNum多次调用只扣减一次
- **请求:** `POST /gd_dataserver/gd_dataserver/mall/api/points/deduct`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deductPointsUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| token | header | 是 | - | 用户身份令牌 | - |
请求体:
- Content-Type:`application/json`
- 模型:`商城端-积分操作请求`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| integralValue | 是 | number / bigdecimal | 积分数值(正整数) | 1000 |
| orderNum | 是 | string | 订单号(商城订单号,用于幂等校验) | ORDER202608210001 |
| sap | 是 | string | 用户SAP编号(从获取用户信息接口获得) | SAP001 |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: 商城端接口统一响应«Void» |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 退还积分
- **用途:** 商城端在用户退款时调用此接口退还积分,具有幂等性,同一orderNum多次调用只退还一次
- **请求:** `POST /gd_dataserver/gd_dataserver/mall/api/points/refund`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `refundPointsUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| token | header | 是 | - | 用户身份令牌 | - |
请求体:
- Content-Type:`application/json`
- 模型:`商城端-积分操作请求`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| integralValue | 是 | number / bigdecimal | 积分数值(正整数) | 1000 |
| orderNum | 是 | string | 订单号(商城订单号,用于幂等校验) | ORDER202608210001 |
| sap | 是 | string | 用户SAP编号(从获取用户信息接口获得) | SAP001 |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: 商城端接口统一响应«Void» |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 根据Token获取用户信息
- **用途:** 商城端通过请求头中的Token获取用户基本信息,包括姓名、手机号、SAP编号等
- **请求:** `POST /gd_dataserver/gd_dataserver/mall/api/user/info`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getUserInfoUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| token | header | 是 | - | 用户身份令牌 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: 商城端接口统一响应«商城端-用户信息» |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 根据Token获取用户积分信息
- **用途:** 商城端通过请求头中的Token及Body中的sap获取用户积分余额,包括可用积分、冻结积分等
- **请求:** `POST /gd_dataserver/gd_dataserver/mall/api/user/points`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getUserPointsUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| token | header | 是 | - | 用户身份令牌 | - |
请求体:
- Content-Type:`application/json`
- 模型:`商城端-积分操作请求`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| integralValue | 是 | number / bigdecimal | 积分数值(正整数) | 1000 |
| orderNum | 是 | string | 订单号(商城订单号,用于幂等校验) | ORDER202608210001 |
| sap | 是 | string | 用户SAP编号(从获取用户信息接口获得) | SAP001 |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: 商城端接口统一响应«商城端-用户积分信息» |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

431
docs/api/modules/15-data-analysis.md

@ -0,0 +1,431 @@ @@ -0,0 +1,431 @@
# 数据分析
本模块共 17 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 首页数据看板 | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/dashboard` | 返回 data 为对象,包含:totalHazard-隐患总数、monthHazard-本月新增隐患、pendingHazard-待处理隐患、totalPoints-积分总量、monthPoints-本月发放积分、onTimeRate-准时率(%)、todayExchangeCount-今日兑换单数、todayPointsIssued-今日发放积分数。 |
| 隐患热力图-按部门统计 | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/heatmap/department` | 返回 data 为数组,每个元素包含:departmentId-部门ID、departmentName-部门名称、hazardCount-隐患数量。 |
| 隐患热力图-按单位统计 | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/heatmap/unit` | 返回 data 为数组,每个元素包含:unitId-单位ID、unitName-单位名称、hazardCount-隐患数量。 |
| 兑换排行统计(按单位) | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/ranking/exchange` | 按单位统计兑换数据,仅统计兑换成功(status=2)的订单。返回 data 为数组,每个元素包含:unitId-单位ID、unitName-单位名称、orderCount-兑换单数、totalPoints-消耗积分总量、userCount-兑换人数。 |
| 积分排行榜-本月获取 | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/ranking/monthlyPoints` | 返回 data 为数组,每个元素包含:userId-用户ID、userName-用户姓名、monthIncome-本月获取积分、rank-排名。 |
| 我的积分排名(APP端) | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/ranking/myRank` | 查询当前登录用户的积分排名,返回userId、totalIncome、rank |
| 积分排行榜-总入账 | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/ranking/points` | 返回 data 为数组,每个元素包含:userId-用户ID、userName-用户姓名、totalIncome-总入账积分、rank-排名。按 totalIncome 降序排列。 |
| 上报积分排行 | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/ranking/report` | 返回 data 为数组,每个元素包含:userId-用户ID、userName-用户姓名、reportCount-上报次数、rank-排名。按上报次数降序。 |
| 月度安全运营报告(JSON) | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/report/monthly` | 查询指定月份的运营数据,支持查询全年或单月。month=0 表示查询全年各月数据,month=1~12 表示查询指定月份。返回 data 为 MonthlyReportVO 数组,每个元素包含:month-月份、hazardCount-隐患总数、approvedCount-已通过数、rejectedCount-已驳回数、pointsIssued-发放积分、avgProcessHours-平均处理时长(小时)、onTimeRate-准时率(%)、exchangeOrderCount-兑换单数、exchangePoints-兑换消耗积分。 |
| 月度安全运营报告导出(Excel) | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/report/monthly/export` | 导出指定月份的运营数据为 Excel 文件。month=0 表示导出全年各月数据,month=1~12 表示导出指定月份。直接下载 Excel 文件,无需解析返回数据。 |
| 隐患统计-按分类 | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/stats/category` | 返回 data 为数组,每个元素包含:categoryName-隐患分类名称、count-数量。用于饼图展示。 |
| 隐患统计-按级别 | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/stats/level` | 返回 data 为数组,每个元素包含:levelName-隐患级别名称、count-数量。用于饼图展示。 |
| 处理时效-按级别 | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/timeliness/level` | 返回 data 为数组,每个元素包含:levelName-级别名称、avgHours-平均处理时长、completedCount-已完成数。 |
| 超期未处理列表 | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/timeliness/overdue` | 返回 data 为 HazardReport 数组,每条记录包含 id、reportNo、hazardName、unitName、hazardLevelName、limitedCompleteTime-限定完成时间、status-状态 等字段。 |
| 处理时效总览 | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/timeliness/overview` | 返回 data 为对象,包含:avgHours-平均处理时长(小时)、maxHours-最大处理时长、minHours-最小处理时长、onTimeRate-准时率(%)、totalCount-总隐患数、completedCount-已完成数、pendingCount-待处理数。 |
| 处理时效-按单位 | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/timeliness/unit` | 返回 data 为数组,每个元素包含:unitName-单位名称、avgHours-平均处理时长、completedCount-已完成数。 |
| 隐患趋势-按月份 | GET | `/gd_dataserver/gd_dataserver/business/points/analysis/trend/month` | 返回 data 为数组,每个元素包含:month-月份(如'2026-01')、count-当月隐患数量。用于折线图展示。 |
## 接口详情
### 首页数据看板
- **用途:** 返回 data 为对象,包含:totalHazard-隐患总数、monthHazard-本月新增隐患、pendingHazard-待处理隐患、totalPoints-积分总量、monthPoints-本月发放积分、onTimeRate-准时率(%)、todayExchangeCount-今日兑换单数、todayPointsIssued-今日发放积分数。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/dashboard`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `dashboardUsingGET`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 隐患热力图-按部门统计
- **用途:** 返回 data 为数组,每个元素包含:departmentId-部门ID、departmentName-部门名称、hazardCount-隐患数量。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/heatmap/department`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `heatmapByDepartmentUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| unitId | query | 否 | integer / int64 | 单位ID | - |
| startTime | query | 否 | string / date-time | 开始时间(yyyy-MM-dd) | - |
| endTime | query | 否 | string / date-time | 结束时间(yyyy-MM-dd) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 隐患热力图-按单位统计
- **用途:** 返回 data 为数组,每个元素包含:unitId-单位ID、unitName-单位名称、hazardCount-隐患数量。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/heatmap/unit`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `heatmapByUnitUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| startTime | query | 否 | string / date-time | 开始时间(yyyy-MM-dd) | - |
| endTime | query | 否 | string / date-time | 结束时间(yyyy-MM-dd) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 兑换排行统计(按单位)
- **用途:** 按单位统计兑换数据,仅统计兑换成功(status=2)的订单。返回 data 为数组,每个元素包含:unitId-单位ID、unitName-单位名称、orderCount-兑换单数、totalPoints-消耗积分总量、userCount-兑换人数。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/ranking/exchange`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `exchangeRankingByUnitUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| startTime | query | 否 | string / date-time | 开始时间(yyyy-MM-dd) | - |
| endTime | query | 否 | string / date-time | 结束时间(yyyy-MM-dd) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 积分排行榜-本月获取
- **用途:** 返回 data 为数组,每个元素包含:userId-用户ID、userName-用户姓名、monthIncome-本月获取积分、rank-排名。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/ranking/monthlyPoints`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `monthlyPointsRankingUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| topN | query | 否 | integer / int32 | 前N名 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 我的积分排名(APP端)
- **用途:** 查询当前登录用户的积分排名,返回userId、totalIncome、rank
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/ranking/myRank`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `myRankUsingGET`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 积分排行榜-总入账
- **用途:** 返回 data 为数组,每个元素包含:userId-用户ID、userName-用户姓名、totalIncome-总入账积分、rank-排名。按 totalIncome 降序排列。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/ranking/points`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `pointsRankingUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| topN | query | 否 | integer / int32 | 前N名 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 上报积分排行
- **用途:** 返回 data 为数组,每个元素包含:userId-用户ID、userName-用户姓名、reportCount-上报次数、rank-排名。按上报次数降序。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/ranking/report`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `reportPointsRankingUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| topN | query | 否 | integer / int32 | 前N名 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 月度安全运营报告(JSON)
- **用途:** 查询指定月份的运营数据,支持查询全年或单月。month=0 表示查询全年各月数据,month=1~12 表示查询指定月份。返回 data 为 MonthlyReportVO 数组,每个元素包含:month-月份、hazardCount-隐患总数、approvedCount-已通过数、rejectedCount-已驳回数、pointsIssued-发放积分、avgProcessHours-平均处理时长(小时)、onTimeRate-准时率(%)、exchangeOrderCount-兑换单数、exchangePoints-兑换消耗积分。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/report/monthly`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `monthlyReportUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| year | query | 是 | integer / int32 | 年份 | - |
| month | query | 否 | integer / int32 | 月份(0=全年,1-12=指定月) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 月度安全运营报告导出(Excel)
- **用途:** 导出指定月份的运营数据为 Excel 文件。month=0 表示导出全年各月数据,month=1~12 表示导出指定月份。直接下载 Excel 文件,无需解析返回数据。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/report/monthly/export`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `exportMonthlyReportUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| year | query | 是 | integer / int32 | 年份 | - |
| month | query | 否 | integer / int32 | 月份(0=全年,1-12=指定月) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 隐患统计-按分类
- **用途:** 返回 data 为数组,每个元素包含:categoryName-隐患分类名称、count-数量。用于饼图展示。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/stats/category`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `statsByCategoryUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| startTime | query | 否 | string / date-time | 开始时间(yyyy-MM-dd) | - |
| endTime | query | 否 | string / date-time | 结束时间(yyyy-MM-dd) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 隐患统计-按级别
- **用途:** 返回 data 为数组,每个元素包含:levelName-隐患级别名称、count-数量。用于饼图展示。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/stats/level`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `statsByLevelUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| startTime | query | 否 | string / date-time | 开始时间(yyyy-MM-dd) | - |
| endTime | query | 否 | string / date-time | 结束时间(yyyy-MM-dd) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 处理时效-按级别
- **用途:** 返回 data 为数组,每个元素包含:levelName-级别名称、avgHours-平均处理时长、completedCount-已完成数。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/timeliness/level`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `timelinessByLevelUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| startTime | query | 否 | string / date-time | 开始时间(yyyy-MM-dd) | - |
| endTime | query | 否 | string / date-time | 结束时间(yyyy-MM-dd) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 超期未处理列表
- **用途:** 返回 data 为 HazardReport 数组,每条记录包含 id、reportNo、hazardName、unitName、hazardLevelName、limitedCompleteTime-限定完成时间、status-状态 等字段。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/timeliness/overdue`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `overdueListUsingGET`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 处理时效总览
- **用途:** 返回 data 为对象,包含:avgHours-平均处理时长(小时)、maxHours-最大处理时长、minHours-最小处理时长、onTimeRate-准时率(%)、totalCount-总隐患数、completedCount-已完成数、pendingCount-待处理数。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/timeliness/overview`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `timelinessOverviewUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| startTime | query | 否 | string / date-time | 开始时间(yyyy-MM-dd) | - |
| endTime | query | 否 | string / date-time | 结束时间(yyyy-MM-dd) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 处理时效-按单位
- **用途:** 返回 data 为数组,每个元素包含:unitName-单位名称、avgHours-平均处理时长、completedCount-已完成数。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/timeliness/unit`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `timelinessByUnitUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| startTime | query | 否 | string / date-time | 开始时间(yyyy-MM-dd) | - |
| endTime | query | 否 | string / date-time | 结束时间(yyyy-MM-dd) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 隐患趋势-按月份
- **用途:** 返回 data 为数组,每个元素包含:month-月份(如'2026-01')、count-当月隐患数量。用于折线图展示。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/points/analysis/trend/month`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `trendByMonthUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| year | query | 否 | integer / int32 | 年份 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

413
docs/api/modules/16-audit-log.md

@ -0,0 +1,413 @@ @@ -0,0 +1,413 @@
# 操作审计日志
本模块共 13 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 新增 | POST | `/gd_dataserver/gd_dataserver/business/audit/log/add` | 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。 |
| 批量新增 | POST | `/gd_dataserver/gd_dataserver/business/audit/log/addBatch` | 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。 |
| 新增并返回保存的数据 | POST | `/gd_dataserver/gd_dataserver/business/audit/log/addReturn` | 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。 |
| 按业务单号查询审计日志 | GET | `/gd_dataserver/gd_dataserver/business/audit/log/biz/{bizId}` | 根据业务单号(如隐患ID、订单ID)查询关联的所有审计日志,按时间倒序。返回 data 为 AuditLog 数组,每个元素包含:id、operator-操作人、operatorIp-操作人IP、operationType-操作类型(AUDIT_PASS/POINTS_ADJUST/EXCHANGE_REFUND)、bizId-业务单号、beforeData-操作前数据(JSON)、afterData-操作后数据(JSON)、remark-备注、createTime-操作时间。 |
| 根据属性删除 | GET | `/gd_dataserver/gd_dataserver/business/audit/log/delete` | 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。 |
| 主键删除 | GET | `/gd_dataserver/gd_dataserver/business/audit/log/deleteById` | 根据主键ID删除单条记录,成功返回 data 为 null。 |
| 批量删除 | GET | `/gd_dataserver/gd_dataserver/business/audit/log/deleteByIds` | 根据ID列表批量删除记录,成功返回 data 为 null。 |
| 查询所有 | GET | `/gd_dataserver/gd_dataserver/business/audit/log/getAll` | 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。 |
| 分页查询 | GET | `/gd_dataserver/gd_dataserver/business/audit/log/getListByPage` | 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。 |
| 详情 | GET | `/gd_dataserver/gd_dataserver/business/audit/log/info` | 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。 |
| 条件查询 | GET | `/gd_dataserver/gd_dataserver/business/audit/log/list` | 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。 |
| 逻辑删除 | GET | `/gd_dataserver/gd_dataserver/business/audit/log/removeById` | 根据主键ID逻辑删除单条记录,成功返回 data 为 null。 |
| 修改 | POST | `/gd_dataserver/gd_dataserver/business/audit/log/updateById` | 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。 |
## 接口详情
### 新增
- **用途:** 新增单条记录,请求体为实体类对象(字段说明见对应实体模型)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/audit/log/add`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addOneUsingPOST_2`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`操作审计日志`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| afterData | 否 | string | 操作后数据(JSON) | - |
| beforeData | 否 | string | 操作前数据(JSON) | - |
| bizId | 否 | string | 业务单号 | - |
| createTime | 否 | string / date-time | 操作时间 | - |
| id | 否 | integer / int64 | 主键ID | - |
| operationType | 否 | string | 操作类型:AUDIT_PASS-审核通过 POINTS_ADJUST-积分调整 EXCHANGE_REFUND-兑换退款 | - |
| operator | 否 | string | 操作人 | - |
| operatorIp | 否 | string | 操作人IP地址 | - |
| remark | 否 | string | 操作备注 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量新增
- **用途:** 批量新增多条记录,请求体为实体类数组。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/audit/log/addBatch`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addBatchUsingPOST_2`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`array<操作审计日志>`
- 必填:文档未标记
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 新增并返回保存的数据
- **用途:** 新增单条记录并返回保存后的数据(含自增ID),请求体为实体类对象。成功返回 data 为保存的实体对象。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/audit/log/addReturn`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addReturnUsingPOST_2`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`操作审计日志`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| afterData | 否 | string | 操作后数据(JSON) | - |
| beforeData | 否 | string | 操作前数据(JSON) | - |
| bizId | 否 | string | 业务单号 | - |
| createTime | 否 | string / date-time | 操作时间 | - |
| id | 否 | integer / int64 | 主键ID | - |
| operationType | 否 | string | 操作类型:AUDIT_PASS-审核通过 POINTS_ADJUST-积分调整 EXCHANGE_REFUND-兑换退款 | - |
| operator | 否 | string | 操作人 | - |
| operatorIp | 否 | string | 操作人IP地址 | - |
| remark | 否 | string | 操作备注 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 按业务单号查询审计日志
- **用途:** 根据业务单号(如隐患ID、订单ID)查询关联的所有审计日志,按时间倒序。返回 data 为 AuditLog 数组,每个元素包含:id、operator-操作人、operatorIp-操作人IP、operationType-操作类型(AUDIT_PASS/POINTS_ADJUST/EXCHANGE_REFUND)、bizId-业务单号、beforeData-操作前数据(JSON)、afterData-操作后数据(JSON)、remark-备注、createTime-操作时间。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/audit/log/biz/{bizId}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `listByBizIdUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| bizId | path | 是 | string | 业务单号 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 根据属性删除
- **用途:** 根据实体属性条件删除记录,请求体为实体类对象。成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/audit/log/delete`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteUsingGET_2`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| afterData | query | 否 | string | 操作后数据(JSON) | - |
| beforeData | query | 否 | string | 操作前数据(JSON) | - |
| bizId | query | 否 | string | 业务单号 | - |
| createTime | query | 否 | string / date-time | 操作时间 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| operationType | query | 否 | string | 操作类型:AUDIT_PASS-审核通过 POINTS_ADJUST-积分调整 EXCHANGE_REFUND-兑换退款 | - |
| operator | query | 否 | string | 操作人 | - |
| operatorIp | query | 否 | string | 操作人IP地址 | - |
| remark | query | 否 | string | 操作备注 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 主键删除
- **用途:** 根据主键ID删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/audit/log/deleteById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteOneUsingGET_2`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 批量删除
- **用途:** 根据ID列表批量删除记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/audit/log/deleteByIds`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_5`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| ids | query | 是 | string | ID列表(逗号分隔) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 查询所有
- **用途:** 查询所有记录(无分页、无条件)。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/audit/log/getAll`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getAllUsingGET_2`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 分页查询
- **用途:** 分页查询记录列表,查询条件为实体类字段。成功返回 data 为 PageInfo 分页对象,其中 list 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/audit/log/getListByPage`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListByPageUsingGET_2`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| afterData | query | 否 | string | 操作后数据(JSON) | - |
| beforeData | query | 否 | string | 操作前数据(JSON) | - |
| bizId | query | 否 | string | 业务单号 | - |
| createTime | query | 否 | string / date-time | 操作时间 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| operationType | query | 否 | string | 操作类型:AUDIT_PASS-审核通过 POINTS_ADJUST-积分调整 EXCHANGE_REFUND-兑换退款 | - |
| operator | query | 否 | string | 操作人 | - |
| operatorIp | query | 否 | string | 操作人IP地址 | - |
| pageNum | query | 是 | integer / int32 | 页码 | - |
| remark | query | 否 | string | 操作备注 | - |
| pageSize | query | 是 | integer / int32 | 每页条数 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 详情
- **用途:** 根据主键ID查询单条记录详情。成功返回 data 为实体类对象,包含该实体所有字段。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/audit/log/info`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `infoUsingGET_2`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 条件查询
- **用途:** 根据实体属性条件查询记录列表。成功返回 data 为实体类数组。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/audit/log/list`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListUsingGET_2`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| afterData | query | 否 | string | 操作后数据(JSON) | - |
| beforeData | query | 否 | string | 操作前数据(JSON) | - |
| bizId | query | 否 | string | 业务单号 | - |
| createTime | query | 否 | string / date-time | 操作时间 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| operationType | query | 否 | string | 操作类型:AUDIT_PASS-审核通过 POINTS_ADJUST-积分调整 EXCHANGE_REFUND-兑换退款 | - |
| operator | query | 否 | string | 操作人 | - |
| operatorIp | query | 否 | string | 操作人IP地址 | - |
| remark | query | 否 | string | 操作备注 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 逻辑删除
- **用途:** 根据主键ID逻辑删除单条记录,成功返回 data 为 null。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/audit/log/removeById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteListUsingGET_4`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 主键ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 修改
- **用途:** 根据主键ID修改记录,请求体为实体类对象(需包含id字段)。成功返回 data 为 null。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/audit/log/updateById`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `updateByIdUsingPOST_2`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`操作审计日志`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| afterData | 否 | string | 操作后数据(JSON) | - |
| beforeData | 否 | string | 操作前数据(JSON) | - |
| bizId | 否 | string | 业务单号 | - |
| createTime | 否 | string / date-time | 操作时间 | - |
| id | 否 | integer / int64 | 主键ID | - |
| operationType | 否 | string | 操作类型:AUDIT_PASS-审核通过 POINTS_ADJUST-积分调整 EXCHANGE_REFUND-兑换退款 | - |
| operator | 否 | string | 操作人 | - |
| operatorIp | 否 | string | 操作人IP地址 | - |
| remark | 否 | string | 操作备注 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

419
docs/api/modules/17-flow-definition.md

@ -0,0 +1,419 @@ @@ -0,0 +1,419 @@
# 流程定义
本模块共 11 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 指定流程达式列表 | GET | `/gd_dataserver/gd_dataserver/flowable/definition/expList` | - |
| 导入流程文件 | POST | `/gd_dataserver/gd_dataserver/flowable/definition/import` | 上传bpmn20的xml文件 |
| 流程定义列表 | GET | `/gd_dataserver/gd_dataserver/flowable/definition/list` | - |
| 读取图片文件 | GET | `/gd_dataserver/gd_dataserver/flowable/definition/readImage/{deployId}` | - |
| 读取xml文件 | GET | `/gd_dataserver/gd_dataserver/flowable/definition/readXml/{deployId}` | - |
| 指定流程办理组列表 | GET | `/gd_dataserver/gd_dataserver/flowable/definition/roleList` | - |
| 保存流程设计器内的xml文件 | POST | `/gd_dataserver/gd_dataserver/flowable/definition/save` | - |
| 发起流程 | POST | `/gd_dataserver/gd_dataserver/flowable/definition/start/{procDefId}` | - |
| 激活或挂起流程定义 | PUT | `/gd_dataserver/gd_dataserver/flowable/definition/updateState` | - |
| 指定流程办理人员列表 | GET | `/gd_dataserver/gd_dataserver/flowable/definition/userList` | - |
| 删除流程 | DELETE | `/gd_dataserver/gd_dataserver/flowable/definition/{deployIds}` | - |
## 接口详情
### 指定流程达式列表
- **用途:** 接口文档未提供用途说明。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/definition/expList`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `expListUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| createBy | query | 否 | string | - | - |
| createByName | query | 否 | string | - | - |
| createTime | query | 否 | string / date-time | - | - |
| expression | query | 否 | string | - | - |
| id | query | 否 | integer / int64 | - | - |
| name | query | 否 | string | - | - |
| params | query | 否 | object | - | - |
| remark | query | 否 | string | - | - |
| searchValue | query | 否 | string | - | - |
| status | query | 否 | integer / int32 | - | - |
| updateBy | query | 否 | string | - | - |
| updateByName | query | 否 | string | - | - |
| updateTime | query | 否 | string / date-time | - | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 导入流程文件
- **用途:** 上传bpmn20的xml文件
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/definition/import`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `importFileUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| name | query | 否 | string | name | - |
| category | query | 否 | string | category | - |
请求体:
- Content-Type:`application/json`
- 模型:`string / binary`
- 必填:文档未标记
- Content-Type:`application/octet-stream`
- 模型:`string / binary`
- 必填:文档未标记
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 流程定义列表
- **用途:** 接口文档未提供用途说明。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/definition/list`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `listUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| pageNum | query | 是 | integer / int32 | 当前页码 | - |
| pageSize | query | 是 | integer / int32 | 每页条数 | - |
| name | query | 否 | string | 流程名称 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 读取图片文件
- **用途:** 接口文档未提供用途说明。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/definition/readImage/{deployId}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `readImageUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| deployId | path | 是 | string | 流程定义id | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 读取xml文件
- **用途:** 接口文档未提供用途说明。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/definition/readXml/{deployId}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `readXmlUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| deployId | path | 是 | string | 流程定义id | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 指定流程办理组列表
- **用途:** 接口文档未提供用途说明。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/definition/roleList`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `roleListUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| admin | query | 否 | boolean | - | - |
| createBy | query | 否 | string | - | - |
| createByName | query | 否 | string | - | - |
| createTime | query | 否 | string / date-time | - | - |
| dataScope | query | 否 | string | - | - |
| delFlag | query | 否 | string | - | - |
| deptCheckStrictly | query | 否 | boolean | - | - |
| deptIds | query | 否 | array<integer / int64> | - | - |
| flag | query | 否 | boolean | - | - |
| menuCheckStrictly | query | 否 | boolean | - | - |
| menuIds | query | 否 | array<integer / int64> | - | - |
| params | query | 否 | object | - | - |
| permissions | query | 否 | array<string> | - | - |
| remark | query | 否 | string | - | - |
| roleId | query | 否 | string | - | - |
| roleKey | query | 是 | string | - | - |
| roleName | query | 是 | string | - | - |
| roleSort | query | 是 | integer / int32 | - | - |
| searchValue | query | 否 | string | - | - |
| status | query | 否 | string | - | - |
| updateBy | query | 否 | string | - | - |
| updateByName | query | 否 | string | - | - |
| updateTime | query | 否 | string / date-time | - | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 保存流程设计器内的xml文件
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/definition/save`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `saveUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`FlowSaveXmlVo`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| category | 否 | string | - | - |
| name | 否 | string | - | - |
| xml | 否 | string | - | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 发起流程
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/definition/start/{procDefId}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `startUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| procDefId | path | 是 | string | 流程定义id | - |
请求体:
- Content-Type:`application/json`
- 模型:`object`
- 必填:文档未标记
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 激活或挂起流程定义
- **用途:** 接口文档未提供用途说明。
- **请求:** `PUT /gd_dataserver/gd_dataserver/flowable/definition/updateState`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `updateStateUsingPUT`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| state | query | 是 | integer / int32 | 1:激活,2:挂起 | - |
| deployId | query | 是 | string | 流程部署ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 指定流程办理人员列表
- **用途:** 接口文档未提供用途说明。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/definition/userList`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `userListUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| admin | query | 否 | boolean | - | - |
| avatar | query | 否 | string | - | - |
| createBy | query | 否 | string | - | - |
| createByName | query | 否 | string | - | - |
| createTime | query | 否 | string / date-time | - | - |
| delFlag | query | 否 | string | - | - |
| dept.ancestors | query | 否 | string | - | - |
| dept.createBy | query | 否 | string | - | - |
| dept.createByName | query | 否 | string | - | - |
| dept.createTime | query | 否 | string / date-time | - | - |
| dept.delFlag | query | 否 | string | - | - |
| dept.deptId | query | 否 | string | - | - |
| dept.deptName | query | 是 | string | - | - |
| dept.email | query | 否 | string | - | - |
| dept.leader | query | 否 | string | - | - |
| dept.orderNum | query | 是 | integer / int32 | - | - |
| dept.params | query | 否 | object | - | - |
| dept.parentId | query | 否 | string | - | - |
| dept.parentName | query | 否 | string | - | - |
| dept.phone | query | 否 | string | - | - |
| dept.searchValue | query | 否 | string | - | - |
| dept.status | query | 否 | string | - | - |
| dept.updateBy | query | 否 | string | - | - |
| dept.updateByName | query | 否 | string | - | - |
| dept.updateTime | query | 否 | string / date-time | - | - |
| deptId | query | 否 | string | - | - |
| email | query | 否 | string | - | - |
| loginDate | query | 否 | string / date-time | - | - |
| loginIp | query | 否 | string | - | - |
| nickName | query | 否 | string | - | - |
| params | query | 否 | object | - | - |
| password | query | 否 | string | - | - |
| phonenumber | query | 否 | string | - | - |
| postIds | query | 否 | array<integer / int64> | - | - |
| postNames | query | 否 | string | - | - |
| remark | query | 否 | string | - | - |
| roleId | query | 否 | integer / int64 | - | - |
| roleIds | query | 否 | array<string> | - | - |
| roles[0].admin | query | 否 | boolean | - | - |
| roles[0].createBy | query | 否 | string | - | - |
| roles[0].createByName | query | 否 | string | - | - |
| roles[0].createTime | query | 否 | string / date-time | - | - |
| roles[0].dataScope | query | 否 | string | - | - |
| roles[0].delFlag | query | 否 | string | - | - |
| roles[0].deptCheckStrictly | query | 否 | boolean | - | - |
| roles[0].deptIds | query | 否 | array<integer / int64> | - | - |
| roles[0].flag | query | 否 | boolean | - | - |
| roles[0].menuCheckStrictly | query | 否 | boolean | - | - |
| roles[0].menuIds | query | 否 | array<integer / int64> | - | - |
| roles[0].params | query | 否 | object | - | - |
| roles[0].permissions | query | 否 | array<string> | - | - |
| roles[0].remark | query | 否 | string | - | - |
| roles[0].roleId | query | 否 | string | - | - |
| roles[0].roleKey | query | 是 | string | - | - |
| roles[0].roleName | query | 是 | string | - | - |
| roles[0].roleSort | query | 是 | integer / int32 | - | - |
| roles[0].searchValue | query | 否 | string | - | - |
| roles[0].status | query | 否 | string | - | - |
| roles[0].updateBy | query | 否 | string | - | - |
| roles[0].updateByName | query | 否 | string | - | - |
| roles[0].updateTime | query | 否 | string / date-time | - | - |
| sapCode | query | 否 | string | - | - |
| searchValue | query | 否 | string | - | - |
| sex | query | 否 | string | - | - |
| status | query | 否 | string | - | - |
| updateBy | query | 否 | string | - | - |
| updateByName | query | 否 | string | - | - |
| updateTime | query | 否 | string / date-time | - | - |
| userId | query | 否 | string | - | - |
| userName | query | 是 | string | - | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 删除流程
- **用途:** 接口文档未提供用途说明。
- **请求:** `DELETE /gd_dataserver/gd_dataserver/flowable/definition/{deployIds}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteUsingDELETE`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| deployIds | path | 是 | string | deployIds | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 204 | No Content | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |

958
docs/api/modules/18-flow-task.md

@ -0,0 +1,958 @@ @@ -0,0 +1,958 @@
# 工作流流程任务管理
本模块共 23 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 多实例加签 | POST | `/gd_dataserver/gd_dataserver/flowable/task/addMultiInstanceExecution` | - |
| 转办任务 | POST | `/gd_dataserver/gd_dataserver/flowable/task/assignTask` | - |
| 认领/签收任务 | POST | `/gd_dataserver/gd_dataserver/flowable/task/claim` | - |
| 审批任务 | POST | `/gd_dataserver/gd_dataserver/flowable/task/complete` | - |
| 委派任务 | POST | `/gd_dataserver/gd_dataserver/flowable/task/delegateTask` | - |
| 删除任务 | POST | `/gd_dataserver/gd_dataserver/flowable/task/delete` | - |
| 清空任务 | GET | `/gd_dataserver/gd_dataserver/flowable/task/deleteAll` | - |
| 多实例减签 | POST | `/gd_dataserver/gd_dataserver/flowable/task/deleteMultiInstanceExecution` | - |
| 获取已办任务 | GET | `/gd_dataserver/gd_dataserver/flowable/task/finishedList` | - |
| 流程初始化表单 | GET | `/gd_dataserver/gd_dataserver/flowable/task/flowFormData` | - |
| 流程历史流转记录 | GET | `/gd_dataserver/gd_dataserver/flowable/task/flowRecord` | - |
| 我发起的流程 | GET | `/gd_dataserver/gd_dataserver/flowable/task/myProcess` | - |
| 获取下一节点 | POST | `/gd_dataserver/gd_dataserver/flowable/task/nextFlowNode` | - |
| 流程发起时获取下一节点 | POST | `/gd_dataserver/gd_dataserver/flowable/task/nextFlowNodeByStart` | - |
| 获取流程变量 | GET | `/gd_dataserver/gd_dataserver/flowable/task/processVariables/{taskId}` | - |
| 驳回任务 | POST | `/gd_dataserver/gd_dataserver/flowable/task/reject` | - |
| 任务归还 | POST | `/gd_dataserver/gd_dataserver/flowable/task/resolveTask` | - |
| 退回任务 | POST | `/gd_dataserver/gd_dataserver/flowable/task/return` | - |
| 获取所有可回退的节点 | POST | `/gd_dataserver/gd_dataserver/flowable/task/returnList` | - |
| 撤回流程 | POST | `/gd_dataserver/gd_dataserver/flowable/task/revokeProcess` | - |
| 取消申请 | POST | `/gd_dataserver/gd_dataserver/flowable/task/stopProcess` | - |
| 获取待办列表 | GET | `/gd_dataserver/gd_dataserver/flowable/task/todoList` | - |
| 取消认领/签收任务 | POST | `/gd_dataserver/gd_dataserver/flowable/task/unClaim` | - |
## 接口详情
### 多实例加签
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/task/addMultiInstanceExecution`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `addMultiInstanceExecutionUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 转办任务
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/task/assignTask`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `assignUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 认领/签收任务
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/task/claim`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `claimUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 审批任务
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/task/complete`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `completeUsingPOST_1`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 委派任务
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/task/delegateTask`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `delegateUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 删除任务
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/task/delete`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 清空任务
- **用途:** 接口文档未提供用途说明。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/task/deleteAll`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteAllUsingGET`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 多实例减签
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/task/deleteMultiInstanceExecution`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteMultiInstanceExecutionUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 获取已办任务
- **用途:** 接口文档未提供用途说明。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/task/finishedList`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `finishedListUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| businessId | query | 否 | string | 业务id | - |
| businessType | query | 否 | string | 业务类型 | - |
| endTime | query | 否 | string | 结束时间 | - |
| name | query | 否 | string | 流程名称 | - |
| pageNum | query | 否 | integer / int32 | 当前页码 | - |
| pageSize | query | 否 | integer / int32 | 每页条数 | - |
| procInsId | query | 否 | string | 流程编码 | - |
| startTime | query | 否 | string | 开始时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 流程初始化表单
- **用途:** 接口文档未提供用途说明。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/task/flowFormData`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `flowFormDataUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| deployId | query | 否 | string | deployId | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 流程历史流转记录
- **用途:** 接口文档未提供用途说明。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/task/flowRecord`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `flowRecordUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| procInsId | query | 否 | string | procInsId | - |
| deployId | query | 否 | string | deployId | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 我发起的流程
- **用途:** 接口文档未提供用途说明。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/task/myProcess`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `myProcessUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| businessId | query | 否 | string | 业务id | - |
| businessType | query | 否 | string | 业务类型 | - |
| endTime | query | 否 | string | 结束时间 | - |
| name | query | 否 | string | 流程名称 | - |
| pageNum | query | 否 | integer / int32 | 当前页码 | - |
| pageSize | query | 否 | integer / int32 | 每页条数 | - |
| procInsId | query | 否 | string | 流程编码 | - |
| startTime | query | 否 | string | 开始时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 获取下一节点
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/task/nextFlowNode`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getNextFlowNodeUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 流程发起时获取下一节点
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/task/nextFlowNodeByStart`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getNextFlowNodeByStartUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 获取流程变量
- **用途:** 接口文档未提供用途说明。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/task/processVariables/{taskId}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `processVariablesUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| taskId | path | 是 | string | 流程任务Id | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 驳回任务
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/task/reject`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `taskRejectUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 任务归还
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/task/resolveTask`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `resolveTaskUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 退回任务
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/task/return`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `taskReturnUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 获取所有可回退的节点
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/task/returnList`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `findReturnTaskListUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 撤回流程
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/task/revokeProcess`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `revokeProcessUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 取消申请
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/task/stopProcess`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `stopProcessUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 获取待办列表
- **用途:** 接口文档未提供用途说明。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/task/todoList`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `todoListUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| businessId | query | 否 | string | 业务id | - |
| businessType | query | 否 | string | 业务类型 | - |
| endTime | query | 否 | string | 结束时间 | - |
| name | query | 否 | string | 流程名称 | - |
| pageNum | query | 否 | integer / int32 | 当前页码 | - |
| pageSize | query | 否 | integer / int32 | 每页条数 | - |
| procInsId | query | 否 | string | 流程编码 | - |
| startTime | query | 否 | string | 开始时间 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 取消认领/签收任务
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/task/unClaim`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `unClaimUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

147
docs/api/modules/19-flow-instance.md

@ -0,0 +1,147 @@ @@ -0,0 +1,147 @@
# 工作流流程实例管理
本模块共 4 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 删除流程实例 | DELETE | `/gd_dataserver/gd_dataserver/flowable/instance/delete/{instanceIds}` | - |
| 根据流程定义id启动流程实例 | POST | `/gd_dataserver/gd_dataserver/flowable/instance/startBy/{procDefId}` | - |
| 结束流程实例 | POST | `/gd_dataserver/gd_dataserver/flowable/instance/stopProcessInstance` | - |
| 激活或挂起流程实例 | POST | `/gd_dataserver/gd_dataserver/flowable/instance/updateState` | - |
## 接口详情
### 删除流程实例
- **用途:** 接口文档未提供用途说明。
- **请求:** `DELETE /gd_dataserver/gd_dataserver/flowable/instance/delete/{instanceIds}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `deleteUsingDELETE_1`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| instanceIds | path | 是 | string | 流程实例ID | - |
| deleteReason | query | 否 | string | 删除原因 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 204 | No Content | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
### 根据流程定义id启动流程实例
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/instance/startBy/{procDefId}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `startByIdUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| procDefId | path | 是 | string | 流程定义id | - |
请求体:
- Content-Type:`application/json`
- 模型:`object`
- 必填:文档未标记
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 结束流程实例
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/instance/stopProcessInstance`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `stopProcessInstanceUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 激活或挂起流程实例
- **用途:** 接口文档未提供用途说明。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/instance/updateState`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `updateStateUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| state | query | 是 | integer / int32 | 1:激活,2:挂起 | - |
| instanceId | query | 是 | string | 流程实例ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

42
docs/api/modules/20-flow-common.md

@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
# 工作流流程_公用信息
本模块共 1 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 获取流程详情 | GET | `/gd_dataserver/gd_dataserver/flowable/busiInfo/getProcessDetail` | 根据流程实例ID查询流程详细信息,返回 data 包含流程节点、审批记录、当前状态等。 |
## 接口详情
### 获取流程详情
- **用途:** 根据流程实例ID查询流程详细信息,返回 data 包含流程节点、审批记录、当前状态等。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/busiInfo/getProcessDetail`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getProcessDetailUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | query | 是 | string | 流程实例ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

95
docs/api/modules/21-flow-sign-task.md

@ -0,0 +1,95 @@ @@ -0,0 +1,95 @@
# 工作流流程_签字审批
本模块共 2 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 审批任务 | POST | `/gd_dataserver/gd_dataserver/flowable/busiTask/complete` | 审批通过或驳回,需携带taskId、result、comment等信息。成功返回 data 为 null;失败返回 error 信息。 |
| 获取当前节点信息 | GET | `/gd_dataserver/gd_dataserver/flowable/busiTask/getCurrentNode` | 根据任务ID查询当前节点详情,返回 data 为节点信息字符串。 |
## 接口详情
### 审批任务
- **用途:** 审批通过或驳回,需携带taskId、result、comment等信息。成功返回 data 为 null;失败返回 error 信息。
- **请求:** `POST /gd_dataserver/gd_dataserver/flowable/busiTask/complete`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `completeUsingPOST`
参数:
_无_
请求体:
- Content-Type:`application/json`
- 模型:`工作流签字任务相关--请求参数`
- 必填:文档未标记
| 字段 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | 部署ID | - |
| file | 否 | string | 拍照 | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| qz | 否 | string | 任务签字 | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| taskName | 否 | string | 任务名称 | - |
| type | 否 | string | 业务类型 | - |
| userId | 否 | string | 用户Id | - |
| userName | 否 | string | 用户名称 | - |
| variables | 否 | object | 流程变量信息 | - |
| zyxkid | 否 | string | 作业许可Id | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 获取当前节点信息
- **用途:** 根据任务ID查询当前节点详情,返回 data 为节点信息字符串。
- **请求:** `GET /gd_dataserver/gd_dataserver/flowable/busiTask/getCurrentNode`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getCurrentNodeUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| taskId | query | 是 | string | 任务ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

54
docs/api/modules/22-flow-sign.md

@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
# 流程审批_签字
本模块共 1 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 查询签字记录列表 | GET | `/gd_dataserver/gd_dataserver/business/flowqz/getList` | 支持按条件筛选签字记录 |
## 接口详情
### 查询签字记录列表
- **用途:** 支持按条件筛选签字记录
- **请求:** `GET /gd_dataserver/gd_dataserver/business/flowqz/getList`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getListUsingGET_12`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| comment | query | 否 | string | 意见 | - |
| file | query | 否 | string | 照片地址 | - |
| id | query | 否 | integer / int64 | 主键ID | - |
| instanceId | query | 否 | string | 流程实例Id | - |
| qz | query | 否 | string | 签字 | - |
| result | query | 否 | string | 结果 | - |
| taskId | query | 否 | string | 任务id | - |
| taskName | query | 否 | string | 任务名称 | - |
| time | query | 否 | string | 签字时间 | - |
| type | query | 否 | string | 业务类型 | - |
| userId | query | 否 | string | 用户Id | - |
| userName | query | 否 | string | 用户名称 | - |
| zyxkid | query | 否 | string | 作业许可id | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

139
docs/api/modules/23-user-message.md

@ -0,0 +1,139 @@ @@ -0,0 +1,139 @@
# 用户消息中心
本模块共 5 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 消息详情 | GET | `/gd_dataserver/gd_dataserver/business/message/detail/{id}` | 查看后自动标记为已读。返回 data 为 UserMessage 对象,包含 id、msgType、title、content、bizId、createTime。 |
| 分页查询我的消息列表 | GET | `/gd_dataserver/gd_dataserver/business/message/list` | 返回 data 为 Page 分页对象。list 中每条记录为 UserMessage 对象,主要字段:id、userId-用户ID、msgType-消息类型(如points_award/hazard_audit/appeal_result)、title-消息标题、content-消息内容、bizId-关联业务ID、isRead-是否已读(0未读/1已读)、createTime-创建时间。 |
| 标记消息已读 | POST | `/gd_dataserver/gd_dataserver/business/message/read/{id}` | 将指定消息标记为已读。返回 data 为 null,成功时 code=200。 |
| 全部标记已读 | POST | `/gd_dataserver/gd_dataserver/business/message/readAll` | 将当前用户所有未读消息标记为已读。返回 data 为 null,成功时 code=200。 |
| 获取未读消息数量 | GET | `/gd_dataserver/gd_dataserver/business/message/unread-count` | 返回 data 为 Long 类型的未读消息数量,如 5。用于APP端消息红点展示。 |
## 接口详情
### 消息详情
- **用途:** 查看后自动标记为已读。返回 data 为 UserMessage 对象,包含 id、msgType、title、content、bizId、createTime。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/message/detail/{id}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `detailUsingGET_1`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | path | 是 | integer / int64 | 消息ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 分页查询我的消息列表
- **用途:** 返回 data 为 Page 分页对象。list 中每条记录为 UserMessage 对象,主要字段:id、userId-用户ID、msgType-消息类型(如points_award/hazard_audit/appeal_result)、title-消息标题、content-消息内容、bizId-关联业务ID、isRead-是否已读(0未读/1已读)、createTime-创建时间。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/message/list`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `listUsingGET_2`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| msgType | query | 否 | string | 消息类型(可选) | - |
| onlyUnread | query | 否 | boolean | 是否只查未读 | - |
| pageNum | query | 否 | integer / int32 | 页码 | - |
| pageSize | query | 否 | integer / int32 | 每页数量 | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 标记消息已读
- **用途:** 将指定消息标记为已读。返回 data 为 null,成功时 code=200。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/message/read/{id}`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `markReadUsingPOST`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| id | path | 是 | integer / int64 | 消息ID | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 全部标记已读
- **用途:** 将当前用户所有未读消息标记为已读。返回 data 为 null,成功时 code=200。
- **请求:** `POST /gd_dataserver/gd_dataserver/business/message/readAll`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `markAllReadUsingPOST`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 201 | Created | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 获取未读消息数量
- **用途:** 返回 data 为 Long 类型的未读消息数量,如 5。用于APP端消息红点展示。
- **请求:** `GET /gd_dataserver/gd_dataserver/business/message/unread-count`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `unreadCountUsingGET`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

43
docs/api/modules/24-message.md

@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
# 消息处理接口
本模块共 1 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| MQTT消息发送 | GET | `/gd_dataserver/gd_dataserver/business/mqtt/sendMqttMsg` | 向指定主题发送MQTT消息 |
## 接口详情
### MQTT消息发送
- **用途:** 向指定主题发送MQTT消息
- **请求:** `GET /gd_dataserver/gd_dataserver/business/mqtt/sendMqttMsg`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `sendMqttMsgUsingGET`
参数:
| 字段 | 位置 | 必填 | 类型 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| topic | query | 是 | string | MQTT主题 | - |
| data | query | 是 | string | 消息内容(JSON格式) | - |
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

62
docs/api/modules/25-system-tool.md

@ -0,0 +1,62 @@ @@ -0,0 +1,62 @@
# 系统工具
本模块共 2 个接口。源文件:`api.json`。
## 快速索引
| 接口名称 | 方法 | 路径 | 用途 |
| --- | --- | --- | --- |
| 获取组织架构(部门-人员树) | GET | `/gd_dataserver/gd_dataserver/system/getOrgUsers` | 返回 data 为树形数组,每个节点包含 id-部门ID、label-部门名称、children-子节点数组。子节点包含部门或人员,人员节点包含 id-用户ID、label-用户姓名。 |
| 获取当前登录用户信息 | GET | `/gd_dataserver/gd_dataserver/system/getTokenUser` | 返回 data 为 SysUser 对象,包含 userId-用户ID、userName-用户名、nickName-昵称、phonenumber-手机号、email-邮箱、dept-部门对象{deptId,deptName}等字段。 |
## 接口详情
### 获取组织架构(部门-人员树)
- **用途:** 返回 data 为树形数组,每个节点包含 id-部门ID、label-部门名称、children-子节点数组。子节点包含部门或人员,人员节点包含 id-用户ID、label-用户姓名。
- **请求:** `GET /gd_dataserver/gd_dataserver/system/getOrgUsers`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getOrgUsersUsingGET`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: array<object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |
### 获取当前登录用户信息
- **用途:** 返回 data 为 SysUser 对象,包含 userId-用户ID、userName-用户名、nickName-昵称、phonenumber-手机号、email-邮箱、dept-部门对象{deptId,deptName}等字段。
- **请求:** `GET /gd_dataserver/gd_dataserver/system/getTokenUser`
- **鉴权:** `X-Access-Token`(以接口定义为准)
- **operationId:** `getTokenUserUsingGET`
参数:
_无_
响应:
| 状态码 | 说明 | 响应模型 |
| --- | --- | --- |
| 200 | OK | */*: object<string, object> |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Not Found | - |

102
docs/api/page-api-map.md

@ -0,0 +1,102 @@ @@ -0,0 +1,102 @@
# 页面与接口映射
本文件按前端页面整理接口用途和页面字段。后续开发页面时,先从这里定位接口,再到 [API 接口资料中心](./README.md) 的对应模块查看完整参数。
> 接口路径按 `api.json` 原样记录。实际请求时需要结合项目 `VUE_APP_BASE_API` 判断是否移除重复的 `/gd_dataserver` 前缀。
## 隐患审核
页面位置:`src/views/hazard/audit/index.vue`
| 场景 | 接口名称 | 方法与路径 | 页面建议字段 |
| --- | --- | --- | --- |
| 待办/已办分页列表 | 隐患流程待办/已办列表 | `GET /gd_dataserver/gd_dataserver/flowable/hazard/todoList` | `id`、`reportNo`、`hazardName`、`status/statusName`、`hazardLevelName`、`reporterName`、`departmentName`、`createTime`、`canApprove` |
| 查看审批详情 | 隐患流程详情 | `GET /gd_dataserver/gd_dataserver/flowable/hazard/detail/{id}` | 隐患完整字段、`flowStatus`、`canApprove`、`isInitiator` |
| 同意/驳回 | 审批隐患流程 | `POST /gd_dataserver/gd_dataserver/flowable/hazard/complete` | 请求体重点:`taskId`、`comment`、`result`;`result=1` 同意,`result=2` 退回 |
| 切换隐患等级 | 切换隐患流程等级 | `POST /gd_dataserver/gd_dataserver/flowable/hazard/switchLevel` | `reportId`、`newHazardLevel`、`switchReason` |
| 查看附件 | 按隐患ID查附件列表 | `GET /gd_dataserver/gd_dataserver/business/hazard/attachment/{reportId}` | `fileName`、`filePath`、`fileSize`、`fileType`、`attachmentType` |
建议筛选字段:待办/已办类型、隐患编号、隐患名称、隐患等级、状态、上报人、上报时间。
## 隐患台账
页面位置:`src/views/hazard/ledger/index.vue`
| 场景 | 接口名称 | 方法与路径 | 页面建议字段 |
| --- | --- | --- | --- |
| 台账分页列表 | 分页查询 | `GET /gd_dataserver/gd_dataserver/business/hazard/getListByPage` | `reportNo`、`hazardName`、`hazardLevelName`、`hazardCategoryName`、`unitName`、`departmentName`、`reporterName`、`statusName`、`pointsAwarded`、`createTime` |
| 查看详情 | 查隐患详情 | `GET /gd_dataserver/gd_dataserver/business/hazard/info/{id}` | `description`、整改信息、审核信息、流程状态和所有台账字段 |
| 导出 | 导出隐患列表Excel | `POST /gd_dataserver/gd_dataserver/business/hazard/export` | 复用列表筛选条件,响应按 Blob 下载 |
| 删除 | 删除隐患(级联删除附件) | `DELETE /gd_dataserver/gd_dataserver/business/hazard/{ids}` | `ids`,支持批量;这是破坏性操作,需要二次确认 |
| 查看附件 | 按隐患ID查附件列表 | `GET /gd_dataserver/gd_dataserver/business/hazard/attachment/{reportId}` | 附件名称、类型、大小和下载地址 |
当前页面实际使用:`getListByPage`(分页)、`info/{id}`、`attachment/{reportId}`。导出入口暂时隐藏,`export` 封装保留供后续恢复。原始 `api.json` 没有“重试同步/重新推送”接口,台账页面点击该操作时会提示接口缺失,不伪造请求结果;待后端提供路径后替换 `src/api/hazard/ledger.js` 的封装即可。
建议筛选字段:隐患编号、名称、单位、部门、等级、分类、状态、上报人、发现时间、创建时间。
## 积分管理
页面位置:`src/views/points/management/index.vue`
此名称可能指“账户余额管理”,也可能包含“积分流水”。建议页面使用账户列表为主表,流水放详情抽屉或页签。
| 场景 | 接口名称 | 方法与路径 | 页面建议字段 |
| --- | --- | --- | --- |
| 账户分页列表 | 分页查询 | `GET /gd_dataserver/gd_dataserver/business/points/balance/getListByPage` | `userId`、`availableBalance`、`frozenBalance`、`totalIncome`、`totalOutcome`、`updateTime`、`version` |
| 查询指定用户 | 查询用户积分账户 | `GET /gd_dataserver/gd_dataserver/business/points/balance/getByUserId/{userId}` | 用户积分账户全部字段 |
| 手动补发/扣减 | 手动调整积分(PC管理端) | `POST /gd_dataserver/gd_dataserver/business/points/balance/adjust` | 文档说明需要指定用户及 `points`,但 OpenAPI 请求体只声明单个整数,字段定义不完整;实现前必须与后端确认真实提交格式 |
| 流水分页列表 | 分页查询 | `GET /gd_dataserver/gd_dataserver/business/points/transaction/getListByPage` | `txnNo`、`userId`、`amount`、`beforeBalance`、`afterBalance`、`bizType`、`bizId`、`operator`、`status`、`createTime` |
| 积分冲正 | 积分冲正 | `POST /gd_dataserver/gd_dataserver/business/points/transaction/reverse/{logId}` | `logId` |
| 积分规则 | 分页查询 | `GET /gd_dataserver/gd_dataserver/business/points/rule/getListByPage` | `ruleCode`、`ruleName`、`hazardLevel`、`hazardCategory`、`points`、`priority`、`enabled` |
## 隐患流程配置
页面位置:`src/views/flowable/hazardConfig/index.vue`
| 场景 | 接口名称 | 方法与路径 | 页面建议字段 |
| --- | --- | --- | --- |
| 配置分页列表 | 查询流程模板配置列表 | `GET /gd_dataserver/gd_dataserver/flowable/hazardFlowConfig/list` | `id`、`deptName`、`hazardLevelName`、`flowKey`、`flowName`、`status`、`createTime`、`updateTime` |
| 查看详情 | 获取流程模板配置详情 | `GET /gd_dataserver/gd_dataserver/flowable/hazardFlowConfig/{id}` | 配置模型全部字段 |
| 新增配置 | 新增流程模板配置 | `POST /gd_dataserver/gd_dataserver/flowable/hazardFlowConfig` | 必填:`deptId`、`hazardLevel`、`flowKey`;可填 `deptName`、`hazardLevelName`、`flowName`、`status` |
| 修改配置 | 修改流程模板配置 | `PUT /gd_dataserver/gd_dataserver/flowable/hazardFlowConfig` | 后端说明不可修改厂区ID和隐患等级,编辑时应禁用对应控件 |
| 停用配置 | 删除流程模板配置 | `DELETE /gd_dataserver/gd_dataserver/flowable/hazardFlowConfig/{id}` | 逻辑删除,页面操作文案建议使用“停用” |
| 当前厂区可用配置 | 获取当前厂区已配置的流程模板 | `GET /gd_dataserver/gd_dataserver/flowable/hazardFlowConfig/myFactoryConfigs` | 用于隐患上报时选择等级/流程 |
## 切换日志
页面位置:`src/views/flowable/switchLog/index.vue`
`api.json` 中存在“切换隐患流程等级”操作接口,但**没有明确提供独立的隐患流程切换日志列表接口或切换日志模型**。
目前可参考:
| 场景 | 接口名称 | 方法与路径 | 备注 |
| --- | --- | --- | --- |
| 执行切换 | 切换隐患流程等级 | `POST /gd_dataserver/gd_dataserver/flowable/hazard/switchLevel` | 参数:`reportId`、`newHazardLevel`、`switchReason` |
| 尝试查询关联审计记录 | 按业务单号查询审计日志 | `GET /gd_dataserver/gd_dataserver/business/audit/log/biz/{bizId}` | 需后端确认流程等级切换是否写入审计日志,以及 `bizId` 是否等于隐患ID |
| 通用审计分页 | 分页查询 | `GET /gd_dataserver/gd_dataserver/business/audit/log/getListByPage` | 当前 `operationType` 文档只列举审核通过、积分调整、兑换退款,没有流程切换类型 |
在后端补充/确认接口前,该页面只能保持空白或展示已确认写入审计日志的数据,不能假设存在切换日志字段。
## 商城相关接口
当前尚未创建独立商城页面,但“积分与商场”后续可能使用:
| 场景 | 接口名称 | 方法与路径 | 主要字段 |
| --- | --- | --- | --- |
| Token查用户 | 根据Token获取用户信息 | `POST /gd_dataserver/gd_dataserver/mall/api/user/info` | 响应:`id`、`userName`、`phone`、`email`、`sex`、`sap` |
| Token查积分 | 根据Token获取用户积分信息 | `POST /gd_dataserver/gd_dataserver/mall/api/user/points` | 请求:`sap`;响应:`integral` 等用户信息 |
| 商城扣积分 | 扣减积分 | `POST /gd_dataserver/gd_dataserver/mall/api/points/deduct` | `sap`、`orderNum`、`integralValue`,同一订单号幂等 |
| 商城退款积分 | 退还积分 | `POST /gd_dataserver/gd_dataserver/mall/api/points/refund` | `sap`、`orderNum`、`integralValue`,同一订单号幂等 |
商城接口同时出现全局 `X-Access-Token` 和接口参数 `token` 请求头,实现前需确认是否都必须传。
## 后续页面开发约定
开发上述页面时同步完成:
1. 在 `src/api/` 下按业务建立请求封装,不在 Vue 页面内直接写 URL。
2. 根据本映射选择接口,并回查对应模块文档与 `schemas.md`。
3. 搜索条件、表格列、详情字段优先采用接口中已有字段;UI 原型字段与接口不一致时明确记录映射。
4. 对 OpenAPI 定义不完整的接口(特别是积分手动调整、泛型响应)先标注并确认,不猜测请求结构。
5. 页面实现完成后同步更新本文件中的“页面建议字段”和实际接口使用情况。

558
docs/api/schemas.md

@ -0,0 +1,558 @@ @@ -0,0 +1,558 @@
# 数据模型与字段字典
共 32 个模型。
## FlowCommentDto
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| comment | 否 | string | - | - |
| type | 否 | string | - | - |
## FlowSaveXmlVo
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| category | 否 | string | - | - |
| name | 否 | string | - | - |
| xml | 否 | string | - | - |
## R«List«UserEntity»»
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| code | 否 | integer / int32 | - | - |
| data | 否 | array<UserEntity> | - | - |
| msg | 否 | string | - | - |
## R«UserEntity»
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| code | 否 | integer / int32 | - | - |
| data | 否 | UserEntity | - | - |
| msg | 否 | string | - | - |
## R«string»
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| code | 否 | integer / int32 | - | - |
| data | 否 | string | - | - |
| msg | 否 | string | - | - |
## UserEntity
用户实体
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| mobile | 否 | string | 用户手机 | - |
| password | 否 | string | 用户密码 | - |
| userId | 否 | integer / int32 | 用户ID | - |
| username | 否 | string | 用户名称 | - |
## 兑换安全配置
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| antiFarmEnabled | 否 | integer / int32 | 隐患上报防刷检测是否启用:1-启用 0-禁用 | - |
| configName | 否 | string | 配置名称 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| dailyLimitPerUser | 否 | integer / int32 | 每人每日兑换上限(积分) | - |
| dailyOrderCountLimit | 否 | integer / int32 | 每人每日兑换次数上限 | - |
| enabled | 否 | integer / int32 | 是否启用:1-启用 0-禁用 | - |
| id | 否 | integer / int64 | 主键ID | - |
| largeAmountNeedApproval | 否 | integer / int32 | 大额兑换是否需审批:1-是 0-否 | - |
| largeAmountThreshold | 否 | integer / int32 | 大额兑换预警阈值(积分) | - |
| monthlyLimitPerUser | 否 | integer / int32 | 每人每月上限(积分) | - |
| pointsRatio | 否 | integer / int32 | 积分比例(N积分=1元) | - |
| rapidExchangeThreshold | 否 | integer / int32 | 短时间内兑换次数阈值(触发预警) | - |
| rapidExchangeWindowMinutes | 否 | integer / int32 | 快速兑换检测时间窗口(分钟) | - |
| remark | 否 | string | 备注 | - |
| singleMaxPoints | 否 | integer / int32 | 单笔最大积分 | - |
| singleMinPoints | 否 | integer / int32 | 单笔最小积分 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| yearlyLimitPerUser | 否 | integer / int32 | 每人每年上限(积分) | - |
## 兑换操作日志
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | 创建时间 | - |
| durationMs | 否 | integer / int32 | 耗时(毫秒) | - |
| errorMsg | 否 | string | 错误信息 | - |
| id | 否 | integer / int64 | 主键ID | - |
| ipAddress | 否 | string | 操作IP | - |
| operationDesc | 否 | string | 操作描述 | - |
| operationType | 否 | string | 操作类型:VIEW/VALIDATE/CREATE/FREEZE/UNFREEZE/DEDUCT/SUBMIT/CANCEL/REFUND/RETRY | - |
| orderId | 否 | integer / int64 | 关联订单ID | - |
| orderNo | 否 | string | 关联订单号 | - |
| requestParams | 否 | string | 请求参数(JSON) | - |
| responseResult | 否 | string | 响应结果(JSON) | - |
| status | 否 | string | 操作结果:SUCCESS/FAIL | - |
| userAgent | 否 | string | 客户端UA | - |
| userId | 否 | integer / int64 | 操作用户ID | - |
## 兑换物品
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | 创建时间 | - |
| dailyLimitPerUser | 否 | integer / int32 | 每人每日兑换上限(0表示无限制) | - |
| description | 否 | string | 物品描述 | - |
| externalLink | 否 | string | 第三方兑换链接 | - |
| id | 否 | integer / int64 | 主键ID | - |
| itemCode | 否 | string | 物品编码 | - |
| itemName | 否 | string | 物品名称 | - |
| pointsRequired | 否 | integer / int32 | 所需积分 | - |
| sortOrder | 否 | integer / int32 | 排序权重 | - |
| status | 否 | integer / int32 | 状态:0-下架 1-上架 | - |
| stock | 否 | integer / int32 | 库存数量(0表示无限) | - |
| thirdPartyCode | 否 | string | 第三方平台物品编码 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
## 兑换订单追踪
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | 创建时间 | - |
| fromStatus | 否 | integer / int32 | 变更前状态 | - |
| id | 否 | integer / int64 | 主键ID | - |
| ipAddress | 否 | string | 操作IP | - |
| operateType | 否 | string | 操作类型:CREATE/FREEZE/UNFREEZE/DEDUCT/SUBMIT/CANCEL/REFUND/RETRY | - |
| operator | 否 | string | 操作人 | - |
| orderId | 否 | integer / int64 | 订单ID | - |
| orderNo | 否 | string | 订单号 | - |
| remark | 否 | string | 操作备注 | - |
| statusName | 否 | string | 状态名称 | - |
| toStatus | 否 | integer / int32 | 变更后状态 | - |
## 商城端-用户信息
商城端获取用户基本信息时的响应数据结构
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| email | 否 | string | 用户邮箱 | zhangsan@example.com |
| id | 否 | string | 用户唯一标识ID | 1001 |
| phone | 否 | string | 用户手机号 | 13800138000 |
| sap | 否 | string | 用户SAP编号(商城端用户唯一标识) | SAP001 |
| sex | 否 | integer / int32 | 性别 1:男 2:女 | 1 |
| userName | 否 | string | 用户姓名 | 张三 |
## 商城端-用户积分信息
商城端获取用户积分余额时的响应数据结构
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| id | 否 | string | 用户唯一标识ID | 1001 |
| integral | 否 | number / bigdecimal | 用户可用积分额度 | 5000 |
| phone | 否 | string | 用户手机号 | 13800138000 |
| sap | 否 | string | 用户SAP编号(商城端用户唯一标识) | SAP001 |
| userName | 否 | string | 用户姓名 | 张三 |
## 商城端-积分操作请求
商城端扣减或退还积分时的请求数据结构
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| integralValue | 是 | number / bigdecimal | 积分数值(正整数) | 1000 |
| orderNum | 是 | string | 订单号(商城订单号,用于幂等校验) | ORDER202608210001 |
| sap | 是 | string | 用户SAP编号(从获取用户信息接口获得) | SAP001 |
## 商城端接口统一响应«Void»
商城端对接接口的统一响应格式,包含success/errorCode/message/data四个字段
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| errorCode | 否 | string | 错误码(成功时为null) | 1001, 1002, 2001, 2002 |
| message | 否 | string | 提示信息 | 操作成功 |
| success | 否 | boolean | 请求是否成功 | true |
## 商城端接口统一响应«商城端-用户信息»
商城端对接接口的统一响应格式,包含success/errorCode/message/data四个字段
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| data | 否 | 商城端-用户信息 | 业务数据体(无数据时为null) | - |
| errorCode | 否 | string | 错误码(成功时为null) | 1001, 1002, 2001, 2002 |
| message | 否 | string | 提示信息 | 操作成功 |
| success | 否 | boolean | 请求是否成功 | true |
## 商城端接口统一响应«商城端-用户积分信息»
商城端对接接口的统一响应格式,包含success/errorCode/message/data四个字段
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| data | 否 | 商城端-用户积分信息 | 业务数据体(无数据时为null) | - |
| errorCode | 否 | string | 错误码(成功时为null) | 1001, 1002, 2001, 2002 |
| message | 否 | string | 提示信息 | 操作成功 |
| success | 否 | boolean | 请求是否成功 | true |
## 工作流任务相关--请求参数
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | - | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| userId | 否 | string | 用户Id | - |
| variables | 否 | object | 流程变量信息 | - |
## 工作流任务相关-返回参数
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| assigneeDeptName | 否 | string | 任务执行人部门 | - |
| assigneeId | 否 | string | 任务执行人Id | - |
| assigneeName | 否 | string | 任务执行人名称 | - |
| businessKey | 否 | string | 流程业务ID | - |
| candidate | 否 | string | 候选执行人 | - |
| candidateGroup | 否 | string | 候选执行组 | - |
| category | 否 | string | 流程类型 | - |
| comment | 否 | FlowCommentDto | 任务意见 | - |
| createTime | 否 | string / date-time | 任务创建时间 | - |
| deployId | 否 | string | 流程部署编号 | - |
| deptName | 否 | string | 部门名称 | - |
| duration | 否 | string | 任务耗时 | - |
| endTime | 否 | string / date-time | 流程完成时间 | - |
| executionId | 否 | string | 任务执行编号 | - |
| finishTime | 否 | string / date-time | 任务完成时间 | - |
| hisProcInsId | 否 | string | 历史流程实例ID | - |
| ishq | 否 | boolean | 是否会签 | false |
| procDefId | 否 | string | 流程ID | - |
| procDefKey | 否 | string | 流程key | - |
| procDefName | 否 | string | 流程定义名称 | - |
| procDefVersion | 否 | integer / int32 | 流程定义内置使用版本 | - |
| procInsId | 否 | string | 流程实例ID | - |
| procVars | 否 | object | 流程变量信息 | - |
| startDeptName | 否 | string | 流程发起人部门名称 | - |
| startUserId | 否 | string | 流程发起人Id | - |
| startUserName | 否 | string | 流程发起人名称 | - |
| taskDefKey | 否 | string | 任务Key | - |
| taskId | 否 | string | 任务编号 | - |
| taskLocalVars | 否 | object | 局部变量信息 | - |
| taskName | 否 | string | 任务名称 | - |
| taskNum | 否 | string | 开始节点/结束节点 start--开始节点 end--结束节点 | - |
## 工作流签字任务相关--请求参数
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| assignee | 否 | string | 审批人 | - |
| candidateGroups | 否 | array<string> | 审批组 | - |
| candidateUsers | 否 | array<string> | 候选人 | - |
| comment | 否 | string | 任务意见 | - |
| currentChildExecutionId | 否 | string | 子执行流ID | - |
| defId | 否 | string | 流程环节定义ID | - |
| deploymentId | 否 | string | 部署ID | - |
| file | 否 | string | 拍照 | - |
| flag | 否 | boolean | 子执行流是否已执行 | false |
| instanceId | 否 | string | 流程实例Id | - |
| qz | 否 | string | 任务签字 | - |
| result | 否 | string | 任务审批结果 1-同意 2-退回 | - |
| targetKey | 否 | string | 节点 | - |
| taskId | 否 | string | 任务Id | - |
| taskName | 否 | string | 任务名称 | - |
| type | 否 | string | 业务类型 | - |
| userId | 否 | string | 用户Id | - |
| userName | 否 | string | 用户名称 | - |
| variables | 否 | object | 流程变量信息 | - |
| zyxkid | 否 | string | 作业许可Id | - |
## 操作审计日志
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| afterData | 否 | string | 操作后数据(JSON) | - |
| beforeData | 否 | string | 操作前数据(JSON) | - |
| bizId | 否 | string | 业务单号 | - |
| createTime | 否 | string / date-time | 操作时间 | - |
| id | 否 | integer / int64 | 主键ID | - |
| operationType | 否 | string | 操作类型:AUDIT_PASS-审核通过 POINTS_ADJUST-积分调整 EXCHANGE_REFUND-兑换退款 | - |
| operator | 否 | string | 操作人 | - |
| operatorIp | 否 | string | 操作人IP地址 | - |
| remark | 否 | string | 操作备注 | - |
## 流程定义
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| category | 否 | string | 流程分类 | - |
| deploymentId | 否 | string | 部署ID | - |
| deploymentTime | 否 | string / date-time | 部署时间 | - |
| deptId | 否 | string | 所属机构ID | - |
| deptName | 否 | string | 所属机构名称 | - |
| flowKey | 否 | string | 流程key | - |
| formId | 否 | integer / int64 | 配置表单id | - |
| formName | 否 | string | 配置表单名称 | - |
| id | 否 | string | 流程id | - |
| name | 否 | string | 流程名称 | - |
| suspensionState | 否 | integer / int32 | 流程定义状态: 1:激活 , 2:中止 | - |
| version | 否 | integer / int32 | 版本 | - |
## 用户积分账户
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| availableBalance | 否 | integer / int32 | 可用积分余额 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| frozenBalance | 否 | integer / int32 | 冻结积分余额 | - |
| id | 否 | integer / int64 | 主键ID | - |
| totalIncome | 否 | integer / int32 | 历史总入账积分 | - |
| totalOutcome | 否 | integer / int32 | 历史总出账积分 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| userId | 否 | integer / int64 | 用户ID | - |
| version | 否 | integer / int32 | 乐观锁版本号 | - |
## 积分兑换订单
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | - | - |
| finishTime | 否 | string / date-time | 完成时间 | - |
| id | 否 | integer / int64 | 主键ID | - |
| itemId | 否 | integer / int64 | 兑换物品ID | - |
| itemName | 否 | string | 物品名称 | - |
| itemPrice | 否 | integer / int32 | 兑换所需积分 | - |
| orderNo | 否 | string | 订单号 | - |
| quantity | 否 | integer / int32 | 兑换数量 | - |
| status | 否 | integer / int32 | 订单状态:0-待处理 1-处理中 2-兑换成功 3-兑换失败 4-已退款 5-已关闭 | - |
| thirdPartyOrderId | 否 | string | 第三方平台订单号 | - |
| thirdPartyResponse | 否 | string | 第三方回调原始数据 | - |
| totalPoints | 否 | integer / int32 | 总消耗积分 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| userId | 否 | integer / int64 | 用户ID | - |
## 积分流水明细
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| afterBalance | 否 | integer / int32 | 变动后可用余额 | - |
| afterFrozen | 否 | integer / int32 | 变动后冻结余额 | - |
| amount | 否 | integer / int32 | 变动积分(正数=入账,负数=出账) | - |
| beforeBalance | 否 | integer / int32 | 变动前可用余额 | - |
| beforeFrozen | 否 | integer / int32 | 变动前冻结余额 | - |
| bizId | 否 | string | 业务单号 | - |
| bizType | 否 | string | 业务类型:REPORT-隐患上报奖励 EXCHANGE-兑换扣减 REFUND-退款回滚 FREEZE-冻结 UNFREEZE-解冻 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| id | 否 | integer / int64 | 主键ID | - |
| operator | 否 | string | 操作人 | - |
| remark | 否 | string | 备注 | - |
| status | 否 | integer / int32 | 状态:1-有效 2-已冲正 | - |
| txnNo | 否 | string | 流水号 | - |
| userId | 否 | integer / int64 | 用户ID | - |
## 积分申诉
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| adjustPoints | 否 | integer / int32 | 调整积分(正数补发,负数扣减) | - |
| appealNo | 否 | string | 申诉编号 | - |
| appealReason | 否 | string | 申诉理由 | - |
| appealType | 否 | string | 申诉类型:REJECT-审核驳回申诉 POINTS-积分异议 OTHER-其他 | - |
| attachmentUrls | 否 | string | 附件URL(JSON数组) | - |
| canApprove | 否 | boolean | 当前用户是否可审批此流程 | false |
| createTime | 否 | string / date-time | 创建时间 | - |
| flowInstanceId | 否 | string | 流程实例ID(预留) | - |
| flowStatus | 否 | integer / int32 | 流程状态:0-无流程 1-进行中 2-已完成 | - |
| handleRemark | 否 | string | 处理意见/结果说明 | - |
| handleTime | 否 | string / date-time | 处理时间 | - |
| handleUserId | 否 | integer / int64 | 处理人用户ID | - |
| handleUserName | 否 | string | 处理人姓名 | - |
| id | 否 | integer / int64 | 主键ID | - |
| isInitiator | 否 | boolean | 当前用户是否为此流程发起人 | false |
| reportId | 否 | integer / int64 | 关联隐患上报ID | - |
| reportNo | 否 | string | 关联隐患编号 | - |
| status | 否 | string | 申诉状态:0-待受理 1-处理中 2-已通过 3-已驳回 4-已撤回 | - |
| statusName | 否 | string | 申诉状态名称 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| userId | 否 | integer / int64 | 申诉人用户ID | - |
| userName | 否 | string | 申诉人姓名 | - |
## 积分规则配置
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| createTime | 否 | string / date-time | 创建时间 | - |
| enabled | 否 | integer / int32 | 是否启用:0-禁用 1-启用 | - |
| hazardCategory | 否 | string | 隐患类别 | - |
| hazardLevel | 否 | integer / int32 | 隐患等级 | - |
| id | 否 | integer / int64 | 主键ID | - |
| points | 否 | integer / int32 | 奖励积分 | - |
| priority | 否 | integer / int32 | 优先级(数字越大优先级越高) | - |
| remark | 否 | string | 备注 | - |
| ruleCode | 否 | string | 规则编码 | - |
| ruleName | 否 | string | 规则名称 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
## 防刷分管控配置
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| configName | 否 | string | 配置名称 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| dailyPointsEarnLimit | 否 | integer / int32 | 每人每日积分获取上限 | - |
| dailyReportLimit | 否 | integer / int32 | 每人每日上报次数上限 | - |
| enabled | 否 | integer / int32 | 是否启用:1-启用 0-禁用 | - |
| id | 否 | integer / int64 | 主键ID | - |
| ipExchangeDailyLimit | 否 | integer / int32 | 同一IP每日兑换上限 | - |
| remark | 否 | string | 备注 | - |
| reportIntervalMinutes | 否 | integer / int32 | 两次上报最小间隔(分钟) | - |
| sameItemDailyLimit | 否 | integer / int32 | 同一商品每人每日兑换上限 | - |
| sameLocationReportLimit | 否 | integer / int32 | 同一地点上报次数上限(每日) | - |
| sameReporterAuditLimit | 否 | integer / int32 | 同一上报人每日通过审核次数上限 | - |
| selfReportCheckEnabled | 否 | integer / int32 | 是否启用自报自审检测:1-是 0-否 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
## 隐患上报流程提交请求
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| attachments | 否 | array<隐患附件> | 附件列表(先调用uploadAttachment接口获取) | - |
| report | 是 | 隐患信息 | 隐患信息 | - |
## 隐患上报请求
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| attachments | 否 | array<隐患附件> | 附件列表 | - |
| report | 否 | 隐患信息 | 隐患信息 | - |
## 隐患信息
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| actualCompleteTime | 否 | string / date-time | 实际完成时间 | - |
| auditRemark | 否 | string | 审核备注 | - |
| auditTime | 否 | string / date-time | 审核时间 | - |
| auditUserId | 否 | integer / int64 | 审核人用户ID | - |
| auditUserNameName | 否 | string | 审核人姓名 | - |
| auditUserUsername | 否 | string | 审核人账号 | - |
| canApprove | 否 | boolean | 当前用户是否可审批此流程 | false |
| causeAnalysis | 否 | string | 原因分析 | - |
| chargePersonId | 否 | integer / int64 | 整改负责人用户ID | - |
| chargePersonName | 否 | string | 整改负责人姓名 | - |
| chargePersonUsername | 否 | string | 整改负责人账号 | - |
| createBy | 否 | string | 创建者 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| currentFlowLevel | 否 | string | 当前流程等级编码(general/major/critical) | - |
| departmentId | 否 | integer / int64 | 部门ID | - |
| departmentName | 否 | string | 部门名称 | - |
| deployId | 否 | string | 流程模板id | - |
| description | 否 | string | 隐患描述 | - |
| discoverTime | 否 | string / date-time | 发现时间 | - |
| factoryDeptId | 否 | string | 所属厂区部门ID | - |
| factoryDeptName | 否 | string | 所属厂区部门名称 | - |
| flowInstanceId | 否 | string | 流程实例id | - |
| flowStatus | 否 | integer / int32 | 流程状态(0-未开始 1-进行中 2-已完成) | - |
| fundsSource | 否 | string | 资金来源编码 | - |
| fundsSourceId | 否 | integer / int64 | 资金来源字典ID | - |
| fundsSourceName | 否 | string | 资金来源名称 | - |
| governanceType | 否 | string | 治理类型编码 | - |
| governanceTypeId | 否 | integer / int64 | 治理类型字典ID | - |
| governanceTypeName | 否 | string | 治理类型名称 | - |
| hazardCategory | 否 | string | 隐患分类编码 | - |
| hazardCategoryId | 否 | integer / int64 | 隐患分类字典ID | - |
| hazardCategoryName | 否 | string | 隐患分类名称 | - |
| hazardLevel | 否 | string | 管理级别编码 | - |
| hazardLevelId | 否 | integer / int64 | 管理级别字典ID | - |
| hazardLevelName | 否 | string | 管理级别名称 | - |
| hazardName | 否 | string | 隐患名称 | - |
| hazardSourceDetail | 否 | string | 来源具体描述 | - |
| hazardType | 否 | string | 隐患类型编码 | - |
| hazardTypeId | 否 | integer / int64 | 隐患类型字典ID | - |
| hazardTypeName | 否 | string | 隐患类型名称 | - |
| id | 否 | integer / int64 | 主键ID | - |
| isInitiator | 否 | boolean | 当前用户是否为此流程发起人 | false |
| limitedCompleteTime | 否 | string / date-time | 限定完成时间 | - |
| major | 否 | string | 专业编码 | - |
| majorId | 否 | integer / int64 | 专业字典ID | - |
| majorName | 否 | string | 专业名称 | - |
| pointsAwarded | 否 | integer / int32 | 奖励积分 | - |
| pointsStatus | 否 | string | 积分发放状态编码 | - |
| pointsStatusId | 否 | integer / int64 | 积分发放状态字典ID | - |
| pointsStatusName | 否 | string | 积分发放状态名称 | - |
| preventiveMeasures | 否 | string | 防范措施 | - |
| pushResponse | 否 | string | 第三方返回结果 | - |
| pushStatus | 否 | string | 推送状态编码 | - |
| pushStatusId | 否 | integer / int64 | 推送状态字典ID | - |
| pushStatusName | 否 | string | 推送状态名称 | - |
| pushTime | 否 | string / date-time | 推送时间 | - |
| rectificationPlan | 否 | string | 整改方案 | - |
| remark | 否 | string | 备注 | - |
| reportNo | 否 | string | 隐患编号 | - |
| reporterId | 否 | integer / int64 | 上报人用户ID | - |
| reporterName | 否 | string | 上报人姓名 | - |
| reporterUsername | 否 | string | 上报人账号 | - |
| riskTarget | 否 | string | 风险分析对象 | - |
| riskUnit | 否 | string | 风险分析单元 | - |
| sourceType | 否 | string | 隐患来源编码 | - |
| sourceTypeId | 否 | integer / int64 | 隐患来源字典ID | - |
| sourceTypeName | 否 | string | 隐患来源名称 | - |
| status | 否 | string | 隐患状态编码 | - |
| statusId | 否 | integer / int64 | 隐患状态字典ID | - |
| statusName | 否 | string | 隐患状态名称 | - |
| supervisorId | 否 | integer / int64 | 监察人用户ID | - |
| supervisorName | 否 | string | 监察人姓名 | - |
| supervisorUsername | 否 | string | 监察人账号 | - |
| thirdPartyId | 否 | string | 第三方系统记录ID | - |
| unitId | 否 | integer / int64 | 单位ID | - |
| unitName | 否 | string | 单位名称 | - |
| updateBy | 否 | string | 更新者 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
## 隐患流程模板配置
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| createBy | 否 | string | - | - |
| createByName | 否 | string | - | - |
| createTime | 否 | string / date-time | - | - |
| deptId | 是 | string | 部门ID(厂区) | 100 |
| deptName | 否 | string | 部门名称 | 一厂 |
| flowKey | 是 | string | Flowable流程定义Key | hazard_general_flow |
| flowName | 否 | string | 流程名称 | 一般隐患奖励审批流程 |
| hazardLevel | 是 | string | 隐患等级编码(general-一般/major-较大/critical-重大) | general |
| hazardLevelName | 否 | string | 隐患等级名称 | 一般隐患 |
| id | 否 | integer / int64 | 主键ID | - |
| params | 否 | object | - | - |
| status | 否 | string | 状态(0停用 1正常) | 1 |
| updateBy | 否 | string | - | - |
| updateByName | 否 | string | - | - |
| updateTime | 否 | string / date-time | - | - |
## 隐患附件
| 字段 | 必填 | 类型 | 说明 | 示例/枚举 |
| --- | --- | --- | --- | --- |
| attachmentType | 否 | string | 附件类型:IMAGE-图片 VIDEO-视频 DOCUMENT-文档 OTHER-其他 | - |
| createBy | 否 | string | 创建者 | - |
| createTime | 否 | string / date-time | 创建时间 | - |
| fileName | 否 | string | 文件原始名称 | - |
| filePath | 否 | string | 文件存储路径 | - |
| fileSize | 否 | integer / int64 | 文件大小(字节) | - |
| fileType | 否 | string | 文件MIME类型 | - |
| id | 否 | integer / int64 | 主键ID | - |
| remark | 否 | string | 备注 | - |
| reportId | 否 | integer / int64 | 关联隐患ID | - |
| sortOrder | 否 | integer / int32 | 排序 | - |
| suffix | 否 | string | 文件后缀 | - |
| updateBy | 否 | string | 更新者 | - |
| updateTime | 否 | string / date-time | 更新时间 | - |
| uploadUserId | 否 | integer / int64 | 上传人用户ID | - |

74
docs/development/CURRENT_STATUS.md

@ -0,0 +1,74 @@ @@ -0,0 +1,74 @@
# 当前开发状态
更新时间:2026-09-05
## 已完成的基础改造
- 页面布局已改为左侧导航:一级、二级菜单都在左侧。
- Logo 已移动到左侧菜单顶部。
- Header 保留折叠按钮、面包屑、消息、APK 和用户区域。
- 默认使用浅色主题,同时保留布局设置中的明暗主题切换。
- 已处理展开、折叠和移动端 Header 宽度联动。
- 生产构建脚本已加入 Node 22/OpenSSL 3 兼容参数。
- `api.json` 已生成 27 个模块、278 个接口和 32 个模型的本地文档。
## 已创建但尚未开发业务功能的页面
| 页面 | 文件 | 菜单组件路径 | 当前状态 |
| --- | --- | --- | --- |
| 隐患审核 | `src/views/hazard/audit/index.vue` | `hazard/audit/index` | 空白页面,未封装接口 |
| 隐患台账 | `src/views/hazard/ledger/index.vue` | `hazard/ledger/index` | 已完成台账分页、筛选、详情弹窗、附件和审核入口;生产构建已通过;同步重试等待后端接口 |
| 积分管理 | `src/views/points/management/index.vue` | `points/management/index` | 空白页面,未封装接口 |
| 隐患流程配置 | `src/views/flowable/hazardConfig/index.vue` | `flowable/hazardConfig/index` | 空白页面,未封装接口 |
| 切换日志 | `src/views/flowable/switchLog/index.vue` | `flowable/switchLog/index` | 空白页面,无明确列表接口 |
以上页面均有同级 `components/` 目录,用于放页面专用组件。
## 建议开发顺序
1. 隐患流程配置:接口最完整,包含列表、详情、新增、修改和停用。
2. 隐患台账:列表、详情、附件和导出接口较完整。
3. 隐患审核:需要确认待办/已办筛选参数和审批真实响应。
4. 积分管理:先确认页面范围是账户、流水、规则中的哪些模块,并确认手动调整积分请求格式。
5. 切换日志:等待后端提供日志列表接口,或确认流程切换已经写入操作审计日志。
## 已知风险和待确认项
### 接口路径
`api.json` 路径普遍包含 `/gd_dataserver/gd_dataserver`,运行时 `BASE_API` 已包含一个 `/gd_dataserver`。新 API 封装必须核对最终 URL,避免重复三次或缺少前缀。
### 鉴权头不一致
- 当前前端:`Authorization: Bearer <token>`
- OpenAPI:`X-Access-Token`
- 商城接口另外声明 `token` 请求头
现有系统可用时优先保持当前前端行为,真实联调出现鉴权问题再与后端统一。
### 切换日志缺少接口
仅存在:
```text
POST /flowable/hazard/switchLevel
```
没有明确的切换日志列表、详情和日志模型。通用审计日志能否代替需后端确认。
### 手动积分调整定义不完整
接口描述要求指定用户并传正负积分,但 OpenAPI 请求体只声明 `application/x-www-form-urlencoded` 的单个整数,未给出用户字段名和参数结构。开发调整弹窗前必须确认。
### 分页响应过于宽泛
多个分页接口只声明返回 `object`,文字说明称 `data` 是 `PageInfo`,其中含 `list`。实现时需要用真实响应确认总数字段是 `total`、`totalCount` 还是其他名称。
## 菜单配置状态
页面文件已经准备好,但菜单是否已在后端配置、角色是否已授权无法从前端仓库判断。页面不显示时优先检查:
1. 菜单状态是否正常、显示状态是否显示。
2. 组件路径是否与上表一致。
3. 当前角色是否勾选菜单权限。
4. 是否重新登录获取了最新动态路由。

231
docs/development/CURRENT_TASK.md

@ -0,0 +1,231 @@ @@ -0,0 +1,231 @@
# 当前开发任务
状态:隐患台账页面已完成,生产构建已验证(2026-09-05;同步重试接口待后端提供)
## 隐患台账页面任务(2026-09-04)
### 1. 用户目标
- 还原原型中的隐患台账筛选栏、汇总统计、9 列列表和行操作。
- 列表必须分页;详情优先使用宽屏弹窗完整展示,待审核记录进入隐患审核页面。
- 重试同步调用后端接口并提示结果;当前 `api.json` 未提供该接口,代码保留明确的待后端确认封装,不伪造成功。
### 2. 接口计划
| 页面动作 | 接口名称 | 方法 | 前端请求路径 | 请求字段 | 响应字段 | 确认状态 |
| --- | --- | --- | --- | --- | --- | --- |
| 台账分页 | 隐患信息分页查询 | GET | `/business/hazard/getListByPage` | `pageNum`、`pageSize`、`status`、`unitId` 等实体字段 | `data.list/total`(兼容 `rows/total`) | 已确认 |
| 查看详情 | 查隐患详情 | GET | `/business/hazard/info/{id}` | 路径 `id` | 隐患信息实体 | 已确认 |
| 查看附件 | 按隐患 ID 查附件 | GET | `/business/hazard/attachment/{reportId}` | 路径 `reportId` | 附件数组 | 已确认 |
| 导出 | 导出隐患列表 Excel | POST | `/business/hazard/export` | 当前筛选条件 | Blob | 已确认,入口暂时隐藏 |
| 去审核 | 隐患流程详情 | GET | `/flowable/hazard/detail/{id}` | 由审核页加载 | 隐患详情 | 已确认,跳转携带 `id/taskId` |
| 重试同步 | 未在 API 文档提供 | 未知 | 待后端确认 | 隐患 `id` | 未知 | 阻塞,不虚构 URL |
### 3. 页面字段映射
| UI 文案 | 前端字段 | 展示规则 |
| --- | --- | --- |
| 隐患编号/名称 | `reportNo`/`hazardName` | 表格主字段,名称超长省略 |
| 分级 | `hazardLevelName` 或 `hazardLevel` | `el-tag` |
| 状态 | `statusName` 或 `status` | `el-tag`,筛选四态:待审核/整改中/已闭环/已驳回 |
| 积分发放 | `pointsStatusName`、`pointsAwarded` | `el-tag`,后端值优先 |
| 平台同步 | `pushStatusName` 或 `pushStatus` | 失败显示重试入口 |
| 上报人/时间 | `reporterName`、`createTime` | 原型 9 列 |
| 详情 | 隐患实体全部字段及附件 | 宽屏 `el-dialog` 分组展示 |
### 4. 验收方式
- [x] 筛选、重置、分页、空态、错误态和加载态已实现。
- [x] 表格 9 列和原型操作按钮已实现,所有状态使用 Element UI `el-tag`。
- [x] 待审核记录跳转 `/hazard/audit/detail?id=...&taskId=...`;无任务号时给出提示。
- [x] 详情弹窗加载详情及附件;导出封装保留,入口暂时隐藏。
- [x] 重试同步接口缺失时明确提示,不显示虚假成功。
### 5. 完成结果
- 实际完成:隐患台账筛选、统计、分页表格、详情弹窗、附件展示和审核入口;导出按钮暂时移除。
- 实际使用接口:`getListByPage`、`info/{id}`、`attachment/{reportId}`、系统部门树接口。
- 验证结果:`git diff --check` 通过;使用项目 Node 22 执行 `npm run build:prod` 成功,仅有既有 Browserslist 和资源体积 warning。
- 遗留事项:后端需提供同步重试接口路径、请求字段和响应结构后,替换 `retryHazardSync` 占位封装。
- [x] 构建通过并更新状态、日志和接口映射。
本次先完成原型、页面字段、接口和入口关系梳理,尚未修改 Vue 业务代码。
## 隐患审核页面分析结论(2026-09-03)
### 1. 原型 UI 结构
- `隐患治理 → 隐患审核` 原型只有用户截图所示的“审核详情工作区”,没有待办/已办列表 UI;因此本页面按带隐患 `id` 的详情处理页实现,不自行增加列表。
- 原型另有 `流程管理 → 隐患审批` 页面,那里才有待办/已办列表、筛选和办理入口;该页面不是当前 `src/views/hazard/audit/index.vue`,后续是否合并由用户另行决定。
- 详情工作区采用三列布局:
- 左列“上报内容”:附件缩略图(最多 8 张)、基础信息、隐患信息、隐患描述、GPS/上报时间。
- 中列“审核动作·平台字段补录”:基本信息(可编辑/自动带入)、整改信息、选填信息、附件补充、审核意见和三个操作按钮。
- 右列“流转与同步”:员工提交时间、平台同步状态、相似隐患提示、预计积分及通过后的联动说明。
- 建议 Vue 结构:页面 `index.vue` 负责列表/详情状态和接口;详情拆为 `components/HazardReportPanel.vue`、`components/AuditActionForm.vue`、`components/FlowSyncPanel.vue`,驳回、等级切换、附件预览/上传使用 `el-dialog` 或独立组件。
- 使用 Element UI:`el-form`、`el-tabs`(待办/已办)、`el-table`、`el-pagination`、`el-descriptions`、`el-upload`、`el-image`、`el-dialog`、`el-radio-group`、`el-select`、`el-date-picker`。
### 2. 页面字段清单与接口映射
#### 左侧上报内容(详情只读)
| 原型字段 | 接口字段 | 来源/备注 |
| --- | --- | --- |
| 隐患编号 | `reportNo` | 详情或列表 |
| 隐患名称 | `hazardName` | 详情 |
| 检查人/上报人 | `reporterName`、`reporterId`、`reporterUsername` | 原型“检查人”实际需确认是否等同上报人 |
| 单位 | `unitId`、`unitName` | 详情 |
| 所属部门/厂区 | `departmentId`、`departmentName`、`factoryDeptId`、`factoryDeptName` | 详情 |
| 风险分析对象 | `riskTarget` | 纯字符串,无选项接口 |
| 风险分析单元 | `riskUnit` | 纯字符串,无选项接口 |
| 发现日期/时间 | `discoverTime` | 详情 |
| 隐患状态 | `status`、`statusName` | 详情/列表 |
| 隐患分类 | `hazardCategory`、`hazardCategoryId`、`hazardCategoryName` | 详情 |
| 管理级别/流程等级 | `hazardLevel`、`hazardLevelId`、`hazardLevelName`、`currentFlowLevel` | 等级编码 general/major/critical 已在流程接口说明 |
| 资金来源 | `fundsSource`、`fundsSourceId`、`fundsSourceName` | 原型标为非必填 |
| 隐患来源 | `sourceType`、`sourceTypeId`、`sourceTypeName`、`hazardSourceDetail` | 原型“日常检查/随手拍”需字典确认 |
| 治理类型 | `governanceType`、`governanceTypeId`、`governanceTypeName` | 原型“限期整改/立即整改”需字典确认 |
| 隐患类型 | `hazardType`、`hazardTypeId`、`hazardTypeName` | 原型“电气”需字典确认 |
| 限定完成时间 | `limitedCompleteTime` | 详情 |
| 整改负责人 | `chargePersonId`、`chargePersonName`、`chargePersonUsername` | 详情 |
| 专业 | `major`、`majorId`、`majorName` | 详情;原型出现“电气/配电系统”,后半部分无独立字段 |
| 隐患描述 | `description` | 详情 |
| 原因分析 | `causeAnalysis` | 详情 |
| 防范措施 | `preventiveMeasures` | 详情 |
| 整改方案 | `rectificationPlan` | 接口有字段,原型详情未单独展示,不能遗漏 |
| 备注 | `remark` | 接口有字段,原型详情未单独展示,不能遗漏 |
| 实际完成时间 | `actualCompleteTime` | 接口有字段,整改闭环阶段使用 |
| 审核信息 | `auditRemark`、`auditTime`、`auditUserId`、`auditUserNameName`、`auditUserUsername` | 详情/流程历史 |
| 积分 | `pointsAwarded`、`pointsStatus`、`pointsStatusId`、`pointsStatusName` | 预计积分不可由前端固定写死 |
| 平台推送 | `pushStatus`、`pushStatusId`、`pushStatusName`、`pushTime`、`pushResponse`、`thirdPartyId` | 右列同步信息 |
| 流程状态 | `flowInstanceId`、`flowStatus`、`deployId`、`canApprove`、`isInitiator` | 详情;流程节点/历史是否随详情返回需确认 |
| 创建/更新时间 | `createBy`、`createTime`、`updateBy`、`updateTime` | 详情/审计 |
附件字段来自附件接口:`id`、`reportId`、`fileName`、`filePath`、`fileUrl`(列表接口文档使用该名称)、`fileType`、`fileSize`、`attachmentType`、`suffix`、`sortOrder`、`remark`、`uploadUserId`、`createTime`、`updateTime`、`createBy`、`updateBy`。`filePath` 与 `fileUrl` 的实际可访问字段需联调确认。
#### 待办/已办列表归属
- 当前隐患审核详情页不实现列表。
- `GET /flowable/hazard/todoList` 对应原型中的 `流程管理 → 隐患审批` 待办/已办列表,待开发该页面时再确认筛选参数和分页响应结构。
### 3. 下拉/选择项来源分析
| UI 选择项 | 已有字段/API | 当前结论 |
| --- | --- | --- |
| 单位 | `unitId/unitName`;前端已有 `/system/dept/treeselect`、`/system/getOrgUsers` 封装 | 没有“单位”专用接口;部门树是否等同单位树需后端确认,不可直接当作单位字典 |
| 部门/厂区 | `departmentId/name`、`factoryDeptId/name`;已有 `deptTreeSelect()` | 可以读取现有部门树,但厂区层级和筛选权限需确认 |
| 整改负责人/检查人 | `chargePerson*`、`reporter*`;已有 `getOrgUsers()`、`getUsersByDeptId()` | 可使用组织架构树/部门人员接口;详情回填优先使用接口返回对象,不主动覆盖 |
| 隐患等级 | `hazardLevel*`、`currentFlowLevel`;`myFactoryConfigs` 返回当前厂区流程等级配置 | 等级编码已确认 general/major/critical;若用于切换,选项可来自已配置流程,但需确认是否允许选择未配置等级 |
| 专业 | `major*` | 未发现专用 API 或确定字典编码;可调用通用 `/system/dict/data/type/{dictType}`,但 `dictType` 未提供,待后端确认 |
| 隐患分类 | `hazardCategory*` | 同上,缺少字典类型/接口说明 |
| 隐患来源 | `sourceType*`、`hazardSourceDetail` | 同上,缺少字典类型/接口说明 |
| 隐患类型 | `hazardType*` | 同上,缺少字典类型/接口说明 |
| 治理类型 | `governanceType*` | 同上,缺少字典类型/接口说明 |
| 资金来源 | `fundsSource*` | 同上,缺少字典类型/接口说明 |
| 状态 | `status/statusName` | 列表/详情直接展示后端名称;状态编码枚举在资料中不统一,不能前端硬编码筛选值 |
| 驳回理由 | 无独立字段/API | 原型四个选项(照片不清晰、重复上报、非安全隐患、信息不全)只能暂存为 UI 选项,并拼入 `comment`;需确认后端是否有固定编码 |
当前 `api.json` 明确提供的组织接口只有 `GET /system/getOrgUsers`、`GET /system/getTokenUser`;项目代码另有若依式部门树和字典封装,但其字典类型未在 API 资料中声明,不能假定具体字典编码。
用户已同意为页面自行创建测试字典。暂定字典类型为:`hazard_major`、`hazard_category`、`hazard_source`、`hazard_type`、`hazard_governance_type`、`hazard_funds_source`。已提供幂等初始化脚本;实际写入生产地址前需在已登录后台执行并核对结果。
### 4. 审核按钮与弹窗接口
- “通过”:`POST /flowable/hazard/complete`,请求体至少应包含 `taskId`、`comment`、`result=1`;原型的积分发放、员工推送、平台同步属于后端连锁结果,前端只展示响应结果,不能自行调用或固定显示 `+40`。
- “驳回”:同一接口,`result=2`,弹窗选择驳回理由并填写/合并意见到 `comment`;是否还需 `taskName`、`instanceId`、`targetKey` 等流程字段待确认。
- “重新评估等级”:`POST /flowable/hazard/switchLevel`,查询参数 `reportId`、`newHazardLevel`、`switchReason`;成功后刷新详情和列表。
- “查看附件/预览”:`GET /business/hazard/attachment/{reportId}`;原型“添加附件”可调用 `POST /flowable/hazard/uploadAttachment`,但审核详情是否允许上传、上传后是否需要再次保存/提交流程需确认。
- 危险操作(通过、驳回、切换、上传/删除附件)均需确认提示;附件删除接口存在但本页面暂不默认接入,除非用户明确要求。
#### 平台字段补录如何提交
- `POST /flowable/hazard/complete` 的请求体模型是“工作流签字任务相关--请求参数”,直接字段只有 `taskId`、`comment`、`result`、`instanceId`、`taskName`、`variables` 等流程字段。
- 该接口**没有直接声明** `unitId`、`major`、`riskUnit`、`riskTarget`、`hazardName`、`governanceType`、`chargePersonId` 等平台补录字段。
- 理论上可以把补录表单放进 `variables`,但 OpenAPI 只把 `variables` 定义为任意 `object`,没有说明后端会把它保存到隐患表或同步给生产运营平台,不能据此认定“complete 会传并保存这些字段”。
- 现有明确可以保存这些字段的接口是 `POST /business/hazard/updateById`,请求体为完整“隐患信息”,包含上述补录字段。
- 用户已确认调用顺序:点击通过/驳回时,先调用 `updateById` 保存中间补录表单及已上传附件关联信息;保存成功后再调用 `complete` 完成审批。第一步失败时不得继续审批。
### 5. 入口、URL 参数与回填
- 本页面必须由其他页面带参数进入,后续从左侧菜单配置中移除;不作为可独立打开的菜单页。
- 从工作台“最新上报/去审核”、隐患台账或 `流程管理 → 隐患审批` 的办理入口进入详情时,应携带隐患主键 `id` 和当前 `taskId`(建议 query:`/hazard/audit?id=123&taskId=456`)。
- 页面 `created`/`watch($route)`:有 `id` 时调用 `GET /flowable/hazard/detail/{id}`,再调用附件列表接口;无 `id` 时展示“缺少隐患 ID,无法加载审核详情”的空态,不请求列表。
- 列表行进入详情时必须传 `row.id`,不能用 `reportNo` 替代;返回列表时保留 tab、筛选和分页状态。
- 详情响应的 `canApprove=false` 或缺少 `taskId` 时,隐藏/禁用通过、驳回、切换按钮并提示当前任务不可处理。
- `HazardReport` 模型没有 `taskId` 字段,而 `complete` 明确要求 `taskId`;待办列表是否额外返回 `taskId`、或需通过其他流程任务接口换取,是当前开发前的关键阻塞点。
#### todoList 与 taskId 核对结果
- 通用待办接口 `GET /flowable/task/todoList` 的返回模型“工作流任务相关-返回参数”明确包含 `taskId`、`businessKey`、`procInsId`、`taskName`、`deployId`、`executionId` 等字段;项目现有待办页面也已直接使用 `row.taskId` 跳转处理页。因此从通用待办列表进入时,可以把 `taskId` 和业务 `id` 一并带入本页。
- 隐患专用接口 `GET /flowable/hazard/todoList` 的说明只保证列表项为 `HazardReport`,该模型没有 `taskId`。不能仅凭文档认定它一定返回 `taskId`;需要真实响应确认,或由后端给该接口补充 `taskId`。
- 实施建议:`流程管理 → 隐患审批` 若采用通用待办接口,使用 `businessKey` 作为隐患业务 ID、`taskId` 作为审批任务 ID;若必须使用隐患专用列表,则在确认其真实返回 `taskId` 后再接跳转。
### 6. 待后端/用户确认问题(简化版)
1. **隐患专用待办响应**:确认 `/flowable/hazard/todoList` 的真实列表项是否额外包含 `taskId`;若没有,审批入口使用通用 `/flowable/task/todoList` 的 `businessKey + taskId`。
2. **字典数据**:专业、隐患分类、隐患来源、隐患类型、治理类型、资金来源由项目方在系统字典中自行维护;用户后续会安排先创建少量测试字典数据,页面必须通过通用字典接口读取,不在代码中写死。
3. **单位/人员范围**:单位机构使用系统机构接口,人员使用人员接口;默认由后端按当前登录用户的数据权限返回“当前机构及下属机构/人员”,前端使用接口返回范围,不擅自扩大范围。
4. **附件关联**:已确认附件上传后,将返回的附件信息随 `updateById` 保存关联;实际请求字段结构仍需以联调响应为准。
其余字段先按详情接口原值回填;积分、同步状态只展示后端返回值,不在前端写死。
### 7. 验收方式(开发阶段)
- [ ] 带 `id` 进入详情时先回填详情和附件;缺少 `id` 时展示明确空态。
- [ ] 三列详情布局覆盖原型全部字段,未确认字段保持空态/禁用并有说明。
- [ ] 通过、驳回、等级切换、附件预览/上传弹窗完成并严格按确认后的请求体调用。
- [ ] `CURRENT_STATUS.md`、`DEVELOPMENT_LOG.md`、`page-api-map.md` 与实际接口保持一致。
- [ ] 生产构建通过。
> 每次开始新功能前,AI 必须先复制下面模板填写。不能直接跳过接口与字段梳理开始编码。
## 任务模板
### 1. 用户目标
- 要解决的问题:
- 涉及页面:
- 明确不在本次范围内的内容:
### 2. 当前代码状态
- 页面/组件现状:
- 已有 API 封装:
- 菜单与权限现状:
- 工作区已有改动及影响:
### 3. 接口计划
| 页面动作 | 接口名称 | 方法 | 前端请求路径 | 请求字段 | 响应字段 | 确认状态 |
| --- | --- | --- | --- | --- | --- | --- |
| 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 已确认/待确认 |
### 4. 页面字段映射
| UI 文案 | 前端字段 | 接口字段 | 展示/编辑规则 | 字典或枚举 |
| --- | --- | --- | --- | --- |
| 待填写 | 待填写 | 待填写 | 待填写 | 待填写 |
### 5. 实施步骤
1. 待填写。
2. 待填写。
### 6. 风险与待确认
- 待填写。
### 7. 验收方式
- [ ] 页面功能符合需求。
- [ ] 接口封装与字段映射已核对。
- [ ] 加载、空态、错误和分页已处理。
- [ ] 菜单路径及权限配置已说明。
- [ ] 生产构建通过。
- [ ] `CURRENT_STATUS.md`、`DEVELOPMENT_LOG.md` 和页面接口映射已更新。
### 8. 完成结果
- 实际完成:
- 实际使用接口:
- 验证结果:
- 遗留事项:

50
docs/development/DEVELOPMENT_LOG.md

@ -0,0 +1,50 @@ @@ -0,0 +1,50 @@
# 开发日志
## 2026-09-05:隐患台账构建验证
- 执行 `npm run build:prod`,构建成功;仅保留 dotenv 配置行、Browserslist 数据过期和资源体积 warning。
- `git diff --check` 通过。
- 默认 `npm run lint` 因项目 `.eslintignore` 同时忽略 `*.js` 与 `*.vue`,ESLint 将 `src` 判定为全部 ignored;未修改既有忽略规则,待后续统一调整校验配置。
## 2026-09-04:隐患台账页面
- 按原型完成状态/单位/名称筛选、统计摘要、9 列台账表格、分页和导出入口。
- 详情使用宽屏 Element UI 弹窗,分组展示基础信息、整改流程、描述处理和附件,并支持待审核记录进入隐患审核页。
- 接入 `business/hazard/getListByPage`、`info/{id}`、`attachment/{reportId}` 和 `export`。
- 核对 `api.json` 未发现同步重试接口;页面保留明确的待后端确认提示,不显示虚假成功。
## 2026-09-03:开发文档和 AI 交接规范
- 新增根目录 `AGENTS.md`,规定新 AI 窗口的阅读、接口梳理、开发、验证和交接流程。
- 新增开发手册、当前状态和当前任务模板。
- 记录动态菜单、请求 baseURL、鉴权头不一致、OpenSSL 兼容等关键上下文。
- 明确后续每次页面开发前先填写 `CURRENT_TASK.md`,完成后更新状态、日志和页面接口映射。
- 本次仅新增文档,没有修改页面业务逻辑。
## 2026-09-03:API 文档整理
- 将上级目录 `api.json` 的 278 个接口整理为 27 个业务模块文档。
- 生成 32 个数据模型字段字典和机器可检索的 `catalog.json`。
- 新增页面接口映射,覆盖隐患审核、隐患台账、积分管理、隐患流程配置、切换日志和商城相关接口。
- 新增 `npm run docs:api` 自动生成命令。
- 发现切换日志缺少明确列表接口、手动调整积分请求模型不完整。
## 2026-09-03:空白业务页面
- 新增隐患审核:`src/views/hazard/audit/index.vue`。
- 新增隐患台账:`src/views/hazard/ledger/index.vue`。
- 新增积分管理:`src/views/points/management/index.vue`。
- 新增隐患流程配置:`src/views/flowable/hazardConfig/index.vue`。
- 新增切换日志:`src/views/flowable/switchLog/index.vue`。
- 各页面均创建同级 `components/` 目录。
- 页面当前都是空白占位,未接入接口。
## 2026-09-03:左侧菜单和浅色布局
- 一级、二级菜单统一调整到左侧。
- Logo 从 Header 移至左侧栏顶部。
- Header 改为折叠按钮、面包屑和右侧用户功能布局。
- 默认主题改为浅色,保留明暗主题切换。
- 修复 Header、用户名、箭头、APK 等元素在浅色背景下的文字颜色。
- 修改生产构建脚本以兼容 Node 22/OpenSSL 3。
- 生产构建通过;只有旧 Browserslist 数据和资源体积警告。

134
docs/development/README.md

@ -0,0 +1,134 @@ @@ -0,0 +1,134 @@
# 前端开发手册
这份文档用于人和 AI 在新窗口中快速接手项目。开发顺序固定为:**先了解现状 → 梳理任务和接口 → 开发 → 验证 → 更新交接文档**。
## 1. 新窗口先做什么
新开的 AI 窗口应先阅读项目根目录的 `AGENTS.md`。如果需要手动向 AI 说明,可以直接发送:
> 请在 `C:\Du\work\duu\zhongyou\zhongyou_web` 工作。先完整阅读 `AGENTS.md`、`docs/development/README.md`、`docs/development/CURRENT_STATUS.md`、`docs/development/CURRENT_TASK.md`、`docs/api/README.md` 和 `docs/api/page-api-map.md`,检查 `git status` 和相关现有代码。先把本次开发目标、页面、接口、字段映射、风险及验收方式整理进 `CURRENT_TASK.md`,向我汇报方案后再进行开发。完成后构建验证,并更新当前状态、开发日志和页面接口映射。
## 2. 技术栈和项目结构
- Vue 2.6
- Vue Router 3(history 模式)
- Vuex 3
- Element UI 2.15
- Axios
- Vue CLI 4 / Webpack 4
- Node:当前可用版本位于 `C:\Du\Modules\nvm\v22.14.0`
关键目录:
```text
zhongyou_web/
├─ public/static/config.js # 运行时服务地址、MQTT、APK 等配置
├─ src/api/ # API 请求封装
├─ src/layout/ # 页面整体布局
├─ src/router/ # 公共及本地动态路由
├─ src/store/modules/permission.js # 后端菜单转换为动态路由
├─ src/utils/request.js # Axios 实例和拦截器
├─ src/views/ # 业务页面
├─ docs/api/ # 从 api.json 整理出的接口资料
└─ docs/development/ # 开发状态和交接资料
```
## 3. 启动和构建
如果当前终端 PATH 中没有 npm,使用绝对路径:
```powershell
& 'C:\Du\Modules\nvm\v22.14.0\npm.cmd' run dev
& 'C:\Du\Modules\nvm\v22.14.0\npm.cmd' run build:prod
```
生产构建脚本已配置 OpenSSL 3 兼容参数,避免:
```text
error:0308010C:digital envelope routines::unsupported
```
更新接口文档:
```powershell
& 'C:\Du\Modules\nvm\v22.14.0\npm.cmd' run docs:api
```
## 4. 路由和菜单机制
菜单不是主要写死在 `src/router/index.js`,而是登录后由后端菜单接口下发,在 `src/store/modules/permission.js` 中转换成组件和路由。
后端菜单的组件路径以 `src/views` 为根,不写 `.vue`。例如:
```text
页面文件:src/views/hazard/audit/index.vue
组件路径:hazard/audit/index
父级路由:hazard
子级路由:audit
最终地址:/hazard/audit
```
页面创建完成不代表菜单自动出现,还需要:
1. 在“系统管理 → 菜单管理”创建目录/菜单。
2. 在“角色管理”给当前角色授权。
3. 重新登录或刷新,让后端重新下发菜单。
## 5. 接口资料怎么查
入口:[API 接口资料中心](../api/README.md)。
推荐顺序:
1. [页面与接口映射](../api/page-api-map.md):已有页面应该使用哪些接口。
2. `docs/api/modules/*.md`:按业务模块阅读接口名称、用途、参数和响应。
3. [数据模型与字段字典](../api/schemas.md):查询实体字段说明。
4. `docs/api/catalog.json`:全文或程序化搜索全部 278 个接口。
接口原始文件位于项目上一级:`C:\Du\work\duu\zhongyou\api.json`。
## 6. 每次任务的开发流程
### 开发前
1. 理解用户目标和验收标准。
2. 检查当前页面是否为空白、是否已有用户改动。
3. 找到对应接口、请求字段、响应字段、字典和权限。
4. 确认原型字段和接口字段如何映射。
5. 识别接口缺失、定义不完整、权限或菜单依赖。
6. 更新 `CURRENT_TASK.md` 后再编码。
### 开发中
1. 先写/复用 `src/api` 请求封装。
2. 页面拆分专用组件到同级 `components/`。
3. 使用真实字段,不用未经允许的假接口或假数据。
4. 保留加载、空态、错误、分页和危险操作确认。
5. 修改范围保持与任务一致。
### 开发后
1. 静态检查和生产构建。
2. 核对菜单组件路径与实际文件大小写完全一致。
3. 更新 `CURRENT_STATUS.md`、`CURRENT_TASK.md` 和 `DEVELOPMENT_LOG.md`。
4. 页面接口变化时更新 `docs/api/page-api-map.md`。
5. 向用户说明接口是否仅接入代码、是否已实际联调。
## 7. 接口接入的关键注意事项
- `MyConfig.BASE_API` 当前是 `http://www.bjsdqc.cn:10090/gd_dataserver`。
- 因此 `api.json` 中 `/gd_dataserver/gd_dataserver/...` 的完整路径,在前端通常应封装为 `/...` 或 `/flowable/...`、`/business/...`,由 baseURL 补第一个 `/gd_dataserver`。
- 当前请求拦截器发送 `Authorization: Bearer`,OpenAPI 却标注 `X-Access-Token`;未经确认不要修改全局鉴权。
- 导出接口使用 Blob,优先复用 `src/utils/request.js` 提供的 `download()`。
- 页面若依赖字典值,应先搜索项目现有字典工具和后端字典配置,不要只显示裸编码。
## 8. 文档职责
| 文档 | 用途 | 什么时候更新 |
| --- | --- | --- |
| `AGENTS.md` | AI 必须遵守的项目规则 | 项目约定变化时 |
| `CURRENT_STATUS.md` | 当前项目和页面真实状态 | 每次开发完成后 |
| `CURRENT_TASK.md` | 正在开发任务的计划和结果 | 每次开发前、开发后 |
| `DEVELOPMENT_LOG.md` | 按时间记录已完成工作 | 每次开发完成后追加 |
| `docs/api/page-api-map.md` | 页面与接口、字段映射 | 页面接口发生变化时 |
| `docs/api/*` 自动文档 | OpenAPI 全量整理 | `api.json` 更新后重新生成 |

4
package.json

@ -6,7 +6,9 @@ @@ -6,7 +6,9 @@
"build:prod": "node --openssl-legacy-provider node_modules/@vue/cli-service/bin/vue-cli-service.js build",
"build:stage": "node --openssl-legacy-provider node_modules/@vue/cli-service/bin/vue-cli-service.js build --mode staging",
"preview": "node build/index.js --preview",
"lint": "eslint --ext .js,.vue src"
"lint": "eslint --ext .js,.vue src",
"docs:api": "node scripts/generate-api-docs.js",
"dicts:hazard-audit": "node scripts/init-hazard-audit-dicts.js"
},
"husky": {
"hooks": {

58
src/api/hazard/audit.js

@ -0,0 +1,58 @@ @@ -0,0 +1,58 @@
import request from '@/utils/request'
// 获取隐患流程详情
export function getHazardAuditDetail(id) {
return request({
url: '/flowable/hazard/detail/' + id,
method: 'get'
})
}
// 查询隐患附件
export function listHazardAttachments(reportId) {
return request({
url: '/business/hazard/attachment/' + reportId,
method: 'get'
})
}
// 上传隐患附件,接口定义为二进制文件流
export function uploadHazardAttachment(file, attachmentType) {
return request({
url: '/flowable/hazard/uploadAttachment',
method: 'post',
params: { attachmentType },
headers: {
'Content-Type': file.type || 'application/octet-stream',
repeatSubmit: false
},
data: file
})
}
// 保存隐患平台补录字段及附件关联信息
export function updateHazardReport(data) {
return request({
url: '/business/hazard/updateById',
method: 'post',
data
})
}
// 通过或驳回隐患流程
export function completeHazardAudit(data) {
return request({
url: '/flowable/hazard/complete',
method: 'post',
data
})
}
// 重新评估隐患等级
export function switchHazardLevel(params) {
return request({
url: '/flowable/hazard/switchLevel',
method: 'post',
params
})
}

8
src/api/hazard/ledger.js

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
import request from '@/utils/request'
export function listHazardLedger(query) { return request({ url: '/business/hazard/getListByPage', method: 'get', params: query }) }
export function getHazardLedgerDetail(id) { return request({ url: '/business/hazard/info/' + id, method: 'get' }) }
export function listHazardLedgerAttachments(reportId) { return request({ url: '/business/hazard/attachment/' + reportId, method: 'get' }) }
export function exportHazardLedger(data) { return request({ url: '/business/hazard/export', method: 'post', data, responseType: 'blob' }) }
// api.json 当前未声明同步重试接口,禁止在前端猜测 URL。
export function retryHazardSync() { return Promise.reject(new Error('后端接口文档未提供隐患同步重试接口')) }

18
src/router/index.js

@ -65,7 +65,7 @@ export const constantRoutes = [ @@ -65,7 +65,7 @@ export const constantRoutes = [
path: '',
component: Layout,
// redirect: 'index',
redirect: '/flowable',
redirect: '/system/user'
// children: [
// {
// path: 'index',
@ -74,7 +74,8 @@ export const constantRoutes = [ @@ -74,7 +74,8 @@ export const constantRoutes = [
// meta: { title: '首页', icon: 'dashboard', affix: true }
// }
// ]
}, {
},
{
path: '/user',
component: Layout,
hidden: true,
@ -153,6 +154,19 @@ export const constantRoutes = [ @@ -153,6 +154,19 @@ export const constantRoutes = [
}
]
},
{
path: '/hazard',
component: Layout,
hidden: true,
children: [
{
path: 'audit/detail',
component: () => import('@/views/hazard/audit/index'),
name: 'HazardAudit',
meta: { title: '隐患审核', noCache: true }
}
]
},
{
path: '/',
component: Layout,

9
src/views/flowable/hazardConfig/index.vue

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<template>
<div class="app-container"></div>
</template>
<script>
export default {
name: 'HazardFlowConfig'
}
</script>

9
src/views/flowable/switchLog/index.vue

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<template>
<div class="app-container"></div>
</template>
<script>
export default {
name: 'FlowSwitchLog'
}
</script>

443
src/views/hazard/audit/components/AuditActionForm.vue

@ -0,0 +1,443 @@ @@ -0,0 +1,443 @@
<template>
<el-card class="audit-card action-card" shadow="never">
<div slot="header" class="card-header">
<span>审核动作 · 平台字段补录</span>
<el-tag type="primary" size="mini">同步生产运营平台必填</el-tag>
</div>
<el-form ref="auditForm" :model="form" :rules="rules" label-position="top" size="small" class="audit-form">
<div class="form-section">一、基本信息(自动带入,可修改)</div>
<el-row :gutter="12">
<el-col :span="12">
<el-form-item label="单位/机构" prop="unitId">
<select-tree
ref="unitTree"
type="tree_dept"
:echo-back="form.unitId || form.departmentId"
placeholder="请选择当前机构及下属机构"
@OrgNodeClick="handleUnitSelect"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="专业" prop="major">
<dict-select v-model="form.major" :options="dict.type.hazard_major" placeholder="请选择专业" @change="syncDictName('major', 'majorName', 'hazard_major')" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="风险分析单元" prop="riskUnit">
<el-input v-model.trim="form.riskUnit" placeholder="请输入风险分析单元" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="风险分析对象" prop="riskTarget">
<el-input v-model.trim="form.riskTarget" placeholder="请输入风险分析对象" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="检查人" prop="reporterName">
<el-input v-model="form.reporterName" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发现时间" prop="discoverTime">
<el-date-picker v-model="form.discoverTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择发现时间" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="管理级别" prop="hazardLevel">
<el-select v-model="form.hazardLevel" placeholder="请选择管理级别" style="width:100%" @change="syncHazardLevelName">
<el-option v-for="item in levelOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="隐患分类" prop="hazardCategory">
<dict-select v-model="form.hazardCategory" :options="dict.type.hazard_category" placeholder="请选择隐患分类" @change="syncDictName('hazardCategory', 'hazardCategoryName', 'hazard_category')" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="隐患名称" prop="hazardName">
<el-input v-model.trim="form.hazardName" placeholder="请输入隐患名称" maxlength="200" show-word-limit />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="隐患来源" prop="sourceType">
<dict-select v-model="form.sourceType" :options="dict.type.hazard_source" placeholder="请选择隐患来源" @change="syncDictName('sourceType', 'sourceTypeName', 'hazard_source')" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="隐患类型" prop="hazardType">
<dict-select v-model="form.hazardType" :options="dict.type.hazard_type" placeholder="请选择隐患类型" @change="syncDictName('hazardType', 'hazardTypeName', 'hazard_type')" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="隐患状态(只读)">
<div class="readonly-value"><el-tag size="mini" type="warning">{{ form.statusName || form.status || '—' }}</el-tag></div>
</el-form-item>
</el-col>
</el-row>
<div class="form-section">二、整改信息</div>
<el-row :gutter="12">
<el-col :span="12">
<el-form-item label="治理类型" prop="governanceType">
<dict-select v-model="form.governanceType" :options="dict.type.hazard_governance_type" placeholder="请选择治理类型" @change="syncDictName('governanceType', 'governanceTypeName', 'hazard_governance_type')" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="限定完成时间" prop="limitedCompleteTime">
<el-date-picker v-model="form.limitedCompleteTime" type="date" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择限定完成时间" style="width:100%" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="整改负责人" prop="chargePersonId">
<select-tree
ref="personTree"
type="tree_person"
:echo-back="form.chargePersonId"
:chenk-parent-node="false"
placeholder="请选择当前机构及下属人员"
@OrgNodeClick="handlePersonSelect"
/>
</el-form-item>
<el-form-item label="整改方案">
<el-input v-model.trim="form.rectificationPlan" type="textarea" :rows="2" placeholder="请输入整改方案" maxlength="1000" show-word-limit />
</el-form-item>
<div class="form-section">三、选填信息(平台表单下半部分)</div>
<el-form-item label="原因分析">
<el-input v-model.trim="form.causeAnalysis" type="textarea" :rows="2" placeholder="物的不安全状态 / 人的不安全行为 / 管理缺陷…" maxlength="1000" show-word-limit />
</el-form-item>
<el-form-item label="资金来源">
<dict-select v-model="form.fundsSource" :options="dict.type.hazard_funds_source" placeholder="请选择资金来源" clearable @change="syncDictName('fundsSource', 'fundsSourceName', 'hazard_funds_source')" />
</el-form-item>
<el-form-item label="防范措施">
<el-input v-model.trim="form.preventiveMeasures" type="textarea" :rows="2" placeholder="请输入整改措施与长期预防措施" maxlength="1000" show-word-limit />
</el-form-item>
<el-form-item label="备注">
<el-input v-model.trim="form.remark" type="textarea" :rows="2" placeholder="请输入备注" maxlength="500" show-word-limit />
</el-form-item>
<el-form-item label="附件">
<div class="attachment-summary">
<span><i class="el-icon-paperclip" /> 已有关联附件 {{ attachmentCount }} 个</span>
<el-upload
action="#"
:show-file-list="false"
:http-request="handleUpload"
:before-upload="beforeUpload"
:disabled="uploading || attachmentCount >= 8"
>
<el-button size="mini" plain :loading="uploading" icon="el-icon-plus">添加</el-button>
</el-upload>
</div>
<div v-if="uploadedAttachments.length" class="uploaded-list">
<el-tag v-for="item in uploadedAttachments" :key="item.id || item.filePath" closable size="mini" @close="removeUploaded(item)">
{{ item.fileName || '新附件' }}
</el-tag>
</div>
<div class="security-tip">严禁处理或传输国家秘密、商业秘密及敏感信息;最多 8 个附件。</div>
</el-form-item>
<el-form-item label="审核意见(随结果推送员工)">
<el-input v-model.trim="auditComment" placeholder="选填;驳回时必须填写或选择理由" maxlength="500" show-word-limit />
</el-form-item>
</el-form>
<div class="action-buttons">
<el-button type="danger" :disabled="!canApprove" :loading="submitting" @click="openPass">通过{{ pointsSuffix }}</el-button>
<el-button :disabled="!canApprove" :loading="submitting" @click="openReject">驳回</el-button>
<el-button type="warning" :disabled="!canApprove" :loading="submitting" @click="openSwitch">重新评估等级</el-button>
</div>
<div v-if="!canApprove" class="disabled-tip">当前记录不可审批,请确认 `canApprove` 和待办任务状态。</div>
<el-dialog title="通过审核" :visible.sync="passVisible" width="460px" append-to-body>
<div class="confirm-content">
<i class="el-icon-warning-outline" />
<p>确认先保存平台补录信息,再通过当前审批任务?积分、员工通知和平台同步均以后端处理结果为准。</p>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="passVisible = false">取消</el-button>
<el-button type="danger" :loading="submitting" @click="confirmPass">确认通过</el-button>
</span>
</el-dialog>
<el-dialog title="驳回上报" :visible.sync="rejectVisible" width="500px" append-to-body>
<el-form ref="rejectForm" :model="rejectForm" label-position="top" size="small">
<el-form-item label="驳回理由" prop="reason" :rules="[{ required: true, message: '请选择驳回理由', trigger: 'change' }]">
<el-radio-group v-model="rejectForm.reason" class="reject-options">
<el-radio v-for="item in rejectReasons" :key="item" :label="item">{{ item }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="补充说明">
<el-input v-model.trim="rejectForm.remark" type="textarea" :rows="3" maxlength="500" show-word-limit placeholder="选填" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="rejectVisible = false">取消</el-button>
<el-button type="danger" :loading="submitting" @click="confirmReject">确认驳回</el-button>
</span>
</el-dialog>
<el-dialog title="重新评估隐患等级" :visible.sync="switchVisible" width="500px" append-to-body>
<el-form ref="switchForm" :model="switchForm" label-position="top" size="small">
<el-form-item label="当前等级">
<el-tag type="warning">{{ currentLevelName }}</el-tag>
</el-form-item>
<el-form-item label="调整为" prop="newHazardLevel" :rules="[{ required: true, message: '请选择新等级', trigger: 'change' }]">
<el-select v-model="switchForm.newHazardLevel" placeholder="请选择新等级" style="width:100%">
<el-option v-for="item in levelOptions" :key="item.value" :label="item.label" :value="item.value" :disabled="item.value === normalizedCurrentLevel" />
</el-select>
</el-form-item>
<el-form-item label="切换原因" prop="switchReason" :rules="[{ required: true, message: '请输入切换原因', trigger: 'blur' }]">
<el-input v-model.trim="switchForm.switchReason" type="textarea" :rows="3" maxlength="500" show-word-limit />
</el-form-item>
<el-alert title="确认后旧流程作废,新等级重新匹配流程并从头审批。" type="warning" :closable="false" show-icon />
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="switchVisible = false">取消</el-button>
<el-button type="warning" :loading="submitting" @click="confirmSwitch">确认切换</el-button>
</span>
</el-dialog>
</el-card>
</template>
<script>
import SelectTree from '@/components/SelectTree'
const DictSelect = {
functional: true,
props: {
value: [String, Number],
options: { type: Array, default: () => [] },
placeholder: String,
clearable: Boolean
},
render(h, context) {
const props = context.props
return h('el-select', {
props: {
value: props.value,
placeholder: props.placeholder,
clearable: props.clearable
},
style: { width: '100%' },
on: {
input: value => context.listeners.input && context.listeners.input(value),
change: value => context.listeners.change && context.listeners.change(value)
}
}, props.options.map(item => h('el-option', {
key: item.value,
props: { label: item.label, value: item.value, disabled: item.disabled }
})))
}
}
export default {
name: 'AuditActionForm',
components: { SelectTree, DictSelect },
dicts: ['tree_dept', 'tree_person', 'hazard_major', 'hazard_category', 'hazard_source', 'hazard_type', 'hazard_governance_type', 'hazard_funds_source'],
props: {
report: { type: Object, required: true },
attachments: { type: Array, default: () => [] },
taskId: { type: String, required: true },
submitting: Boolean
},
data() {
return {
form: {},
auditComment: '',
uploadedAttachments: [],
uploading: false,
passVisible: false,
rejectVisible: false,
switchVisible: false,
rejectReasons: ['照片不清晰', '重复上报', '非安全隐患', '信息不全'],
rejectForm: { reason: '', remark: '' },
switchForm: { newHazardLevel: '', switchReason: '' },
levelOptions: [
{ label: '一般隐患', value: 'general' },
{ label: '较大隐患', value: 'major' },
{ label: '重大隐患', value: 'critical' }
],
rules: {
unitId: [{ required: true, message: '请选择单位/机构', trigger: 'change' }],
major: [{ required: true, message: '请选择专业', trigger: 'change' }],
riskUnit: [{ required: true, message: '请输入风险分析单元', trigger: 'blur' }],
riskTarget: [{ required: true, message: '请输入风险分析对象', trigger: 'blur' }],
reporterName: [{ required: true, message: '缺少检查人', trigger: 'blur' }],
discoverTime: [{ required: true, message: '请选择发现时间', trigger: 'change' }],
hazardLevel: [{ required: true, message: '请选择管理级别', trigger: 'change' }],
hazardCategory: [{ required: true, message: '请选择隐患分类', trigger: 'change' }],
hazardName: [{ required: true, message: '请输入隐患名称', trigger: 'blur' }],
sourceType: [{ required: true, message: '请选择隐患来源', trigger: 'change' }],
hazardType: [{ required: true, message: '请选择隐患类型', trigger: 'change' }],
governanceType: [{ required: true, message: '请选择治理类型', trigger: 'change' }],
limitedCompleteTime: [{ required: true, message: '请选择限定完成时间', trigger: 'change' }],
chargePersonId: [{ required: true, message: '请选择整改负责人', trigger: 'change' }]
}
}
},
computed: {
canApprove() {
return (this.report.canApprove === true || String(this.report.canApprove) === 'true') && Boolean(this.taskId)
},
attachmentCount() {
return this.attachments.length + this.uploadedAttachments.length
},
pointsSuffix() {
if (this.report.pointsAwarded === undefined || this.report.pointsAwarded === null || this.report.pointsAwarded === '') return ''
const points = Number(this.report.pointsAwarded)
return ` · ${points > 0 ? '+' : ''}${this.report.pointsAwarded} 积分`
},
normalizedCurrentLevel() {
const value = this.report.currentFlowLevel || this.report.hazardLevel || ''
const nameMap = { 一般: 'general', 一般隐患: 'general', 较大: 'major', 较大隐患: 'major', 重大: 'critical', 重大隐患: 'critical' }
return nameMap[value] || value
},
currentLevelName() {
const item = this.levelOptions.find(option => option.value === this.normalizedCurrentLevel)
return this.report.hazardLevelName || (item && item.label) || this.normalizedCurrentLevel || '—'
}
},
watch: {
report: {
immediate: true,
deep: true,
handler(value) {
this.form = JSON.parse(JSON.stringify(value || {}))
if (!this.form.hazardLevel && this.form.currentFlowLevel) this.form.hazardLevel = this.form.currentFlowLevel
this.auditComment = this.form.auditRemark || ''
this.uploadedAttachments = []
}
}
},
methods: {
handleUnitSelect(node) {
this.$set(this.form, 'unitId', node.id)
this.$set(this.form, 'unitName', node.label)
this.$set(this.form, 'departmentId', node.id)
this.$set(this.form, 'departmentName', node.label)
this.$nextTick(() => this.$refs.auditForm.validateField('unitId'))
},
handlePersonSelect(node) {
this.$set(this.form, 'chargePersonId', node.id)
this.$set(this.form, 'chargePersonName', node.label)
this.$nextTick(() => this.$refs.auditForm.validateField('chargePersonId'))
},
syncDictName(valueField, nameField, dictType) {
const item = (this.dict.type[dictType] || []).find(option => String(option.value) === String(this.form[valueField]))
this.$set(this.form, nameField, item ? item.label : '')
},
syncHazardLevelName(value) {
const item = this.levelOptions.find(option => option.value === value)
this.$set(this.form, 'hazardLevelName', item ? item.label : '')
this.$set(this.form, 'currentFlowLevel', value)
},
beforeUpload(file) {
if (this.attachmentCount >= 8) {
this.$modal.msgError('附件数量不能超过 8 个')
return false
}
if (file.size / 1024 / 1024 > 20) {
this.$modal.msgError('单个附件不能超过 20MB')
return false
}
return true
},
handleUpload(options) {
this.uploading = true
const type = /^image\//i.test(options.file.type) ? 'IMAGE' : 'DOCUMENT'
this.$emit('upload', {
file: options.file,
attachmentType: type,
done: items => {
this.uploadedAttachments = this.uploadedAttachments.concat(items)
this.uploading = false
},
fail: () => {
this.uploading = false
}
})
},
removeUploaded(item) {
this.uploadedAttachments = this.uploadedAttachments.filter(current => current !== item)
},
validateMainForm(callback) {
this.$refs.auditForm.validate(valid => {
if (valid) callback()
})
},
openPass() {
this.validateMainForm(() => { this.passVisible = true })
},
openReject() {
this.validateMainForm(() => { this.rejectVisible = true })
},
openSwitch() {
this.switchForm = { newHazardLevel: '', switchReason: '' }
this.switchVisible = true
},
buildSavePayload() {
return {
...this.form,
id: this.report.id,
auditRemark: this.auditComment,
attachments: this.attachments.concat(this.uploadedAttachments)
}
},
confirmPass() {
this.passVisible = false
this.$emit('submit', {
saveData: this.buildSavePayload(),
completeData: {
taskId: this.taskId,
instanceId: this.report.flowInstanceId,
comment: this.auditComment || '同意',
result: '1'
}
})
},
confirmReject() {
this.$refs.rejectForm.validate(valid => {
if (!valid) return
const comment = [this.rejectForm.reason, this.rejectForm.remark || this.auditComment].filter(Boolean).join(':')
this.rejectVisible = false
this.$emit('submit', {
saveData: { ...this.buildSavePayload(), auditRemark: comment },
completeData: {
taskId: this.taskId,
instanceId: this.report.flowInstanceId,
comment,
result: '2'
}
})
})
},
confirmSwitch() {
this.$refs.switchForm.validate(valid => {
if (!valid) return
this.switchVisible = false
this.$emit('switch-level', { ...this.switchForm })
})
}
}
}
</script>
<style lang="scss" scoped>
.card-header { display: flex; align-items: center; justify-content: space-between; gap: 8px; font-weight: 600; }
.form-section { margin: 2px 0 10px; color: #606266; font-size: 12px; font-weight: 600; }
.form-section:not(:first-child) { margin-top: 12px; }
.readonly-value { display: flex; align-items: center; min-height: 32px; }
.attachment-summary { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 32px; }
.uploaded-list { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.security-tip, .disabled-tip { margin-top: 6px; color: #f56c6c; font-size: 11px; line-height: 1.6; }
.action-buttons { display: grid; grid-template-columns: minmax(180px, 1fr) auto auto; gap: 8px; }
.reject-options { display: flex; flex-direction: column; gap: 12px; }
.confirm-content { display: flex; gap: 12px; color: #606266; line-height: 1.7; }
.confirm-content i { margin-top: 3px; color: #e6a23c; font-size: 20px; }
.confirm-content p { margin: 0; }
::v-deep .audit-form .el-form-item { margin-bottom: 14px; }
::v-deep .audit-form .el-form-item__label { padding-bottom: 4px; color: #606266; font-size: 12px; line-height: 18px; }
@media (max-width: 900px) { .action-buttons { grid-template-columns: 1fr; } }
</style>

97
src/views/hazard/audit/components/FlowSyncPanel.vue

@ -0,0 +1,97 @@ @@ -0,0 +1,97 @@
<template>
<el-card class="audit-card flow-card" shadow="never">
<div slot="header" class="card-header">流转与同步</div>
<div class="flow-list">
<div class="flow-row">
<span>员工提交</span>
<strong>{{ formatTime(report.createTime) }}</strong>
</div>
<div class="flow-row">
<span>隐患状态</span>
<el-tag size="mini" type="warning">{{ report.statusName || report.status || '—' }}</el-tag>
</div>
<div class="flow-row">
<span>流程状态</span>
<el-tag size="mini" :type="flowTagType">{{ flowStatusText }}</el-tag>
</div>
<div class="flow-row">
<span>平台同步状态</span>
<el-tag size="mini" :type="pushTagType">{{ report.pushStatusName || report.pushStatus || '待同步' }}</el-tag>
</div>
<div v-if="report.pushTime" class="flow-row">
<span>同步时间</span>
<strong>{{ formatTime(report.pushTime) }}</strong>
</div>
<div v-if="report.pushResponse" class="flow-row block-row">
<span>同步结果</span>
<strong>{{ report.pushResponse }}</strong>
</div>
<div class="flow-row">
<span>相似隐患提示</span>
<el-tag size="mini" type="info">暂无接口数据</el-tag>
</div>
<div class="flow-row">
<span>预计/已发积分</span>
<strong class="points">{{ pointsText }}</strong>
</div>
<div v-if="report.pointsStatusName || report.pointsStatus" class="flow-row">
<span>积分状态</span>
<strong>{{ report.pointsStatusName || report.pointsStatus }}</strong>
</div>
</div>
<el-alert
title="通过后由后端完成员工通知、积分处理与生产运营平台同步。"
type="info"
:closable="false"
show-icon
/>
</el-card>
</template>
<script>
export default {
name: 'FlowSyncPanel',
props: {
report: {
type: Object,
default: () => ({})
}
},
computed: {
flowStatusText() {
const map = { 0: '未开始', 1: '进行中', 2: '已完成' }
return map[this.report.flowStatus] || this.report.flowStatus || '—'
},
flowTagType() {
return Number(this.report.flowStatus) === 2 ? 'success' : 'warning'
},
pushTagType() {
const text = this.report.pushStatusName || this.report.pushStatus || ''
if (/成功|已同步/i.test(text)) return 'success'
if (/失败/i.test(text)) return 'danger'
return 'warning'
},
pointsText() {
if (this.report.pointsAwarded === undefined || this.report.pointsAwarded === null || this.report.pointsAwarded === '') return '以后端规则结果为准'
const points = Number(this.report.pointsAwarded)
return `${points > 0 ? '+' : ''}${this.report.pointsAwarded}`
}
},
methods: {
formatTime(value) {
return value ? String(value).replace('T', ' ').slice(0, 19) : '—'
}
}
}
</script>
<style lang="scss" scoped>
.card-header { font-weight: 600; }
.flow-list { margin-bottom: 16px; }
.flow-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding: 12px 0; border-bottom: 1px solid #ebeef5; font-size: 12px; }
.flow-row > span:first-child { flex: 0 0 90px; color: #606266; }
.flow-row strong { color: #909399; font-weight: 500; text-align: right; word-break: break-word; }
.flow-row.block-row { display: grid; grid-template-columns: 90px minmax(0, 1fr); }
.points { color: #f56c6c !important; font-size: 14px; font-weight: 600 !important; }
::v-deep .el-alert__title { line-height: 1.6; }
</style>

166
src/views/hazard/audit/components/HazardReportPanel.vue

@ -0,0 +1,166 @@ @@ -0,0 +1,166 @@
<template>
<el-card class="audit-card report-card" shadow="never">
<div slot="header" class="card-header">
<span>上报内容 · 按 APP 字段展示</span>
<el-tag type="warning" size="mini">{{ report.reportNo || '暂无编号' }}</el-tag>
</div>
<div v-if="attachments.length" class="evidence-grid">
<el-image
v-for="item in imageAttachments"
:key="item.id || item.filePath || item.fileUrl"
:src="attachmentUrl(item)"
:preview-src-list="previewUrls"
fit="cover"
class="evidence-image"
>
<div slot="error" class="image-error"><i class="el-icon-picture-outline" /></div>
</el-image>
<div v-for="item in otherAttachments" :key="item.id || item.filePath" class="file-tile">
<i class="el-icon-document" />
<span>{{ item.fileName || '附件' }}</span>
</div>
</div>
<el-empty v-else :image-size="54" description="暂无现场附件" />
<div class="section-tip">现场取证 · 共 {{ attachments.length }} 个附件(原型约定至多 8 个)</div>
<section-title title="一、基础信息" />
<div class="info-grid">
<info-item label="隐患名称" :value="report.hazardName" />
<info-item label="检查人" :value="report.reporterName" :extra="report.reporterUsername" />
<info-item label="单位" :value="report.unitName" />
<info-item label="所属部门" :value="report.departmentName || report.factoryDeptName" />
<info-item label="风险分析对象" :value="report.riskTarget" />
<info-item label="风险分析单元" :value="report.riskUnit" />
<info-item label="发现时间" :value="formatTime(report.discoverTime)" />
</div>
<section-title title="二、隐患信息" />
<div class="info-grid">
<info-item label="隐患状态" :value="report.statusName || report.status" tag />
<info-item label="隐患分类" :value="report.hazardCategoryName || report.hazardCategory" tag />
<info-item label="管理级别" :value="report.hazardLevelName || report.currentFlowLevel || report.hazardLevel" />
<info-item label="资金来源" :value="report.fundsSourceName || report.fundsSource" optional />
<info-item label="隐患来源" :value="report.sourceTypeName || report.sourceType" />
<info-item label="治理类型" :value="report.governanceTypeName || report.governanceType" />
<info-item label="隐患类型" :value="report.hazardTypeName || report.hazardType" />
<info-item label="限定完成时间" :value="formatTime(report.limitedCompleteTime, true)" />
<info-item label="整改负责人" :value="report.chargePersonName" :extra="report.chargePersonUsername" />
<info-item label="专业" :value="report.majorName || report.major" />
</div>
<section-title title="三、隐患描述" />
<div class="description-list">
<info-item label="隐患描述" :value="report.description" block />
<info-item label="原因分析" :value="report.causeAnalysis" optional block />
<info-item label="整改方案" :value="report.rectificationPlan" optional block />
<info-item label="防范措施" :value="report.preventiveMeasures" optional block />
<info-item label="备注" :value="report.remark" optional block />
</div>
<div class="location-tip">
<i class="el-icon-location-outline" />
位置:{{ report.factoryDeptName || report.departmentName || report.unitName || '暂无位置数据' }}
<span>· 上报人:{{ report.reporterName || '—' }}</span>
<span>· {{ formatTime(report.createTime) }}</span>
</div>
</el-card>
</template>
<script>
/* global MyConfig */
const SectionTitle = {
functional: true,
props: { title: String },
render(h, context) {
return h('div', { class: 'section-title' }, context.props.title)
}
}
const InfoItem = {
functional: true,
props: {
label: String,
value: [String, Number],
extra: [String, Number],
tag: Boolean,
optional: Boolean,
block: Boolean
},
render(h, context) {
const props = context.props
const empty = props.value === undefined || props.value === null || props.value === ''
const text = empty ? (props.optional ? '非必填项' : '—') : String(props.value)
const valueNode = props.tag && !empty
? h('el-tag', { props: { size: 'mini', type: 'warning' }}, text)
: h('strong', { class: { optional: empty && props.optional }}, [
text,
props.extra ? h('small', ` / ${props.extra}`) : null
])
return h('div', { class: ['info-item', { block: props.block }] }, [
h('span', { class: 'info-label' }, props.label),
valueNode
])
}
}
export default {
name: 'HazardReportPanel',
components: { SectionTitle, InfoItem },
props: {
report: {
type: Object,
default: () => ({})
},
attachments: {
type: Array,
default: () => []
}
},
computed: {
imageAttachments() {
return this.attachments.filter(item => this.isImage(item))
},
otherAttachments() {
return this.attachments.filter(item => !this.isImage(item))
},
previewUrls() {
return this.imageAttachments.map(item => this.attachmentUrl(item)).filter(Boolean)
}
},
methods: {
isImage(item) {
return item.attachmentType === 'IMAGE' || /^image\//i.test(item.fileType || '') || /\.(png|jpe?g|gif|webp|bmp)$/i.test(item.fileName || item.filePath || item.fileUrl || '')
},
attachmentUrl(item) {
const path = item.fileUrl || item.filePath || ''
if (!path || /^https?:\/\//i.test(path)) return path
return MyConfig.BASE_API.replace(/\/$/, '') + '/' + path.replace(/^\//, '')
},
formatTime(value, dateOnly) {
if (!value) return '—'
return dateOnly ? String(value).slice(0, 10) : String(value).replace('T', ' ').slice(0, 19)
}
}
}
</script>
<style lang="scss" scoped>
.card-header { display: flex; align-items: center; justify-content: space-between; gap: 8px; font-weight: 600; }
.evidence-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.evidence-image, .file-tile { width: 100%; height: 62px; border: 1px solid #e4e7ed; border-radius: 6px; background: #f7f9fc; }
.image-error, .file-tile { display: flex; align-items: center; justify-content: center; color: #909399; }
.file-tile { flex-direction: column; gap: 4px; padding: 4px; font-size: 11px; overflow: hidden; }
.file-tile span { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.section-tip, .location-tip { margin-top: 8px; color: #909399; font-size: 12px; line-height: 1.7; }
.section-title { margin: 16px 0 8px; color: #606266; font-size: 12px; font-weight: 600; }
.info-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 14px; }
.description-list { display: grid; gap: 9px; }
::v-deep .info-item { display: grid; grid-template-columns: 92px minmax(0, 1fr); align-items: start; gap: 7px; min-width: 0; font-size: 12px; line-height: 1.55; }
::v-deep .info-label { color: #909399; }
::v-deep .info-item strong { min-width: 0; color: #303133; font-weight: 600; word-break: break-word; }
::v-deep .info-item strong.optional { color: #c0c4cc; font-weight: 400; }
::v-deep .info-item small { color: #606266; font-weight: 400; }
::v-deep .el-empty { padding: 8px 0; }
@media (max-width: 1500px) { .info-grid { grid-template-columns: 1fr; } }
</style>

199
src/views/hazard/audit/index.vue

@ -0,0 +1,199 @@ @@ -0,0 +1,199 @@
<template>
<div class="hazard-audit-page">
<el-page-header content="隐患审核" class="page-header" @back="goBack" />
<el-alert
v-if="routeError"
:title="routeError"
type="warning"
:closable="false"
show-icon
class="route-alert"
/>
<div v-else v-loading="loading" class="audit-content">
<el-alert
v-if="loadError"
:title="loadError"
type="error"
:closable="false"
show-icon
class="route-alert"
>
<el-button slot="default" type="text" @click="loadPage">重新加载</el-button>
</el-alert>
<template v-else-if="loaded">
<hazard-report-panel :report="report" :attachments="attachments" />
<audit-action-form
:report="report"
:attachments="attachments"
:task-id="taskId"
:submitting="submitting"
@upload="handleAttachmentUpload"
@submit="handleAuditSubmit"
@switch-level="handleSwitchLevel"
/>
<flow-sync-panel :report="report" />
</template>
</div>
</div>
</template>
<script>
import HazardReportPanel from './components/HazardReportPanel'
import AuditActionForm from './components/AuditActionForm'
import FlowSyncPanel from './components/FlowSyncPanel'
import {
completeHazardAudit,
getHazardAuditDetail,
listHazardAttachments,
switchHazardLevel,
updateHazardReport,
uploadHazardAttachment
} from '@/api/hazard/audit'
export default {
name: 'HazardAudit',
components: { HazardReportPanel, AuditActionForm, FlowSyncPanel },
data() {
return {
loading: false,
submitting: false,
loaded: false,
loadError: '',
report: {},
attachments: []
}
},
computed: {
reportId() {
return String(this.$route.query.id || '')
},
taskId() {
return String(this.$route.query.taskId || '')
},
routeError() {
if (!this.reportId && !this.taskId) return '缺少隐患 ID 和任务 ID,请从待办任务的“办理”入口进入。'
if (!this.reportId) return '缺少隐患 ID,无法加载审核详情。'
if (!this.taskId) return '缺少任务 ID,无法执行审批;请从待办任务入口重新进入。'
return ''
}
},
watch: {
'$route.query': {
immediate: true,
deep: true,
handler() {
if (this.routeError) {
this.resetPage()
return
}
this.loadPage()
}
}
},
methods: {
resetPage() {
this.loading = false
this.loaded = false
this.loadError = ''
this.report = {}
this.attachments = []
},
async loadPage() {
this.loading = true
this.loaded = false
this.loadError = ''
try {
const results = await Promise.all([
getHazardAuditDetail(this.reportId),
listHazardAttachments(this.reportId)
])
this.report = results[0].data || {}
this.attachments = Array.isArray(results[1].data) ? results[1].data : []
this.loaded = true
} catch (error) {
this.loadError = '隐患详情或附件加载失败,请稍后重试。'
} finally {
this.loading = false
}
},
handleAttachmentUpload(payload) {
uploadHazardAttachment(payload.file, payload.attachmentType).then(response => {
const data = response.data
const items = Array.isArray(data) ? data : (data ? [data] : [])
if (!items.length) throw new Error('上传接口未返回附件信息')
payload.done(items.map(item => ({
...item,
reportId: item.reportId || this.reportId,
attachmentType: item.attachmentType || payload.attachmentType
})))
this.$modal.msgSuccess('附件上传成功,审批时将保存关联')
}).catch(() => {
payload.fail()
})
},
async handleAuditSubmit(payload) {
this.submitting = true
try {
await updateHazardReport(payload.saveData)
await completeHazardAudit(payload.completeData)
this.$modal.msgSuccess(payload.completeData.result === '1' ? '审核已通过' : '上报已驳回')
this.goBack()
} catch (error) {
this.$modal.msgError('操作未完成:补录保存或流程审批失败')
} finally {
this.submitting = false
}
},
handleSwitchLevel(data) {
this.$confirm('切换等级后旧流程将作废,并按新等级重新发起审批。是否继续?', '重新评估等级', {
confirmButtonText: '确认切换',
cancelButtonText: '取消',
type: 'warning'
}).then(async() => {
this.submitting = true
try {
await switchHazardLevel({
reportId: this.reportId,
newHazardLevel: data.newHazardLevel,
switchReason: data.switchReason
})
this.$modal.msgSuccess('隐患等级已切换,新流程已启动')
this.goBack()
} catch (error) {
this.$modal.msgError('隐患等级切换失败')
} finally {
this.submitting = false
}
}).catch(() => {})
},
goBack() {
if (window.history.length > 1) {
this.$tab.closePage().then(() => {})
return
}
this.$router.push('/')
}
}
}
</script>
<style lang="scss" scoped>
.hazard-audit-page { min-height: calc(100vh - 84px); padding: 16px; background: #f3f5f8; }
.page-header { margin-bottom: 14px; padding: 14px 18px; border-radius: 8px; background: #fff; }
.route-alert { margin-bottom: 14px; }
.audit-content { display: grid; grid-template-columns: minmax(330px, 1.05fr) minmax(540px, 1.9fr) minmax(280px, .9fr); align-items: start; gap: 14px; min-height: 280px; }
::v-deep .audit-card { margin: 0; border: 0; border-radius: 8px; }
::v-deep .audit-card > .el-card__header { padding: 16px; border-bottom-color: #ebeef5; }
::v-deep .audit-card > .el-card__body { padding: 16px; }
@media (max-width: 1450px) {
.audit-content { grid-template-columns: minmax(300px, 1fr) minmax(500px, 1.6fr); }
.audit-content > :last-child { grid-column: 1 / -1; }
}
@media (max-width: 980px) {
.audit-content { grid-template-columns: 1fr; }
.audit-content > :last-child { grid-column: auto; }
}
</style>

55
src/views/hazard/ledger/index.vue

@ -0,0 +1,55 @@ @@ -0,0 +1,55 @@
<template>
<div class="app-container hazard-ledger">
<el-form ref="queryForm" :model="queryParams" size="small" :inline="true" class="filter-bar">
<el-form-item label="状态" prop="status"><el-select v-model="queryParams.status" clearable placeholder="全部状态" class="filter-control"><el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" /></el-select></el-form-item>
<el-form-item label="单位" prop="unitId"><el-select v-model="queryParams.unitId" clearable filterable placeholder="全部单位" class="filter-control"><el-option v-for="item in unitOptions" :key="item.id" :label="item.label" :value="item.id" /></el-select></el-form-item>
<!-- 隐患名称筛选暂时隐藏,保留 queryParams 以便后续恢复。 -->
<!-- <el-form-item label="隐患名称" prop="hazardName"><el-input v-model.trim="queryParams.hazardName" clearable placeholder="请输入隐患名称" class="name-control" @keyup.enter.native="handleQuery" /></el-form-item> -->
<el-form-item><el-button type="primary" icon="el-icon-search" @click="handleQuery">查询</el-button><el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button></el-form-item>
<div class="summary-inline"><span>当前筛选 <b>{{ total }}</b> 条</span><span>本页待审核 <b class="warning-text">{{ summary.pending }}</b></span><span>本页整改中 <b class="warning-text">{{ summary.rectifying }}</b></span><span>本页已闭环 <b class="success-text">{{ summary.closed }}</b></span><span>本页已驳回 <b class="danger-text">{{ summary.rejected }}</b></span></div>
</el-form>
<el-card shadow="never" class="table-card">
<el-table v-loading="loading" :data="ledgerList" stripe empty-text="暂无隐患台账数据" class="ledger-table">
<el-table-column prop="reportNo" label="隐患编号" min-width="150" show-overflow-tooltip /><el-table-column prop="hazardName" label="隐患名称" min-width="190" show-overflow-tooltip />
<el-table-column label="分级" width="100" align="center"><template slot-scope="scope"><el-tag :type="levelTagType(scope.row)" size="small">{{ levelLabel(scope.row) }}</el-tag></template></el-table-column>
<el-table-column label="状态" width="110" align="center"><template slot-scope="scope"><el-tag :type="statusTagType(scope.row)" size="small">{{ statusLabel(scope.row) }}</el-tag></template></el-table-column>
<el-table-column label="积分发放" min-width="130" align="center"><template slot-scope="scope"><el-tag :type="pointsTagType(scope.row)" size="small">{{ pointsLabel(scope.row) }}</el-tag></template></el-table-column>
<el-table-column label="平台同步" min-width="120" align="center"><template slot-scope="scope"><el-tag :type="pushTagType(scope.row)" size="small">{{ pushLabel(scope.row) }}</el-tag></template></el-table-column>
<el-table-column prop="reporterName" label="上报人" width="100" show-overflow-tooltip /><el-table-column label="时间" width="145"><template slot-scope="scope">{{ formatTime(scope.row.createTime || scope.row.discoverTime) }}</template></el-table-column>
<el-table-column label="操作" width="210" fixed="right" align="center"><template slot-scope="scope"><el-button type="text" size="small" @click="openDetail(scope.row)">详情</el-button><el-button v-if="isPending(scope.row)" type="primary" size="mini" @click="goAudit(scope.row)">去审核</el-button><el-button v-if="isSyncFailed(scope.row)" type="text" size="small" class="retry-button" @click="handleRetrySync(scope.row)">重试同步</el-button></template></el-table-column>
</el-table>
<div class="table-note">隐患状态与员工端一致:待审核 → 整改中 → 已闭环(审批通过即发积分)/ 已驳回。整改闭环由生产运营平台负责,不在本系统范围。</div>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
</el-card>
<el-dialog title="隐患详情" :visible.sync="detailVisible" width="980px" top="5vh" append-to-body>
<div v-loading="detailLoading" class="detail-dialog"><template v-if="detail"><div class="detail-head"><div><span class="detail-no">{{ detail.reportNo || '暂无编号' }}</span><span class="detail-name">{{ detail.hazardName || '未命名隐患' }}</span></div><div class="detail-tags"><el-tag :type="levelTagType(detail)" size="small">{{ levelLabel(detail) }}</el-tag><el-tag :type="statusTagType(detail)" size="small">{{ statusLabel(detail) }}</el-tag></div></div><el-descriptions title="基础信息" :column="3" border size="small"><el-descriptions-item v-for="item in basicFields" :key="item.label" :label="item.label">{{ displayField(detail, item) }}</el-descriptions-item></el-descriptions><el-descriptions title="整改与流程" :column="3" border size="small" class="detail-section"><el-descriptions-item v-for="item in flowFields" :key="item.label" :label="item.label">{{ displayField(detail, item) }}</el-descriptions-item></el-descriptions><div class="text-section"><div class="section-title">描述与处理</div><div v-for="item in textFields" :key="item.label" class="text-row"><span>{{ item.label }}</span><p>{{ detail[item.key] || '—' }}</p></div></div><div class="attachment-section"><div class="section-title">附件({{ attachments.length }})</div><el-tag v-for="item in attachments" :key="item.id || item.filePath" size="small" effect="plain" class="attachment-tag">{{ item.fileName || '附件' }}</el-tag><span v-if="!attachments.length" class="muted">暂无附件</span></div></template><el-empty v-else-if="!detailLoading" description="暂无详情数据" /></div>
<span slot="footer"><el-button @click="detailVisible = false">关闭</el-button><el-button v-if="detail && isPending(detail)" type="primary" @click="goAudit(detail)">去审核</el-button></span>
</el-dialog>
</div>
</template>
<script>
import { deptTreeSelect } from '@/api/system/user'
import { listHazardLedger, getHazardLedgerDetail, listHazardLedgerAttachments, retryHazardSync } from '@/api/hazard/ledger'
export default {
name: 'HazardLedger',
data() { return { loading: false, detailLoading: false, detailVisible: false, ledgerList: [], total: 0, unitOptions: [], attachments: [], detail: null, queryParams: { pageNum: 1, pageSize: 10, status: undefined, unitId: undefined, hazardName: undefined }, statusOptions: [{ label: '待审核', value: '1' }, { label: '整改中', value: '2' }, { label: '已闭环', value: '3' }, { label: '已驳回', value: '4' }], basicFields: [{ label: '单位', key: 'unitName' }, { label: '所属部门', key: 'departmentName', fallback: 'factoryDeptName' }, { label: '上报人', key: 'reporterName' }, { label: '隐患分类', key: 'hazardCategoryName', fallback: 'hazardCategory' }, { label: '隐患类型', key: 'hazardTypeName', fallback: 'hazardType' }, { label: '隐患来源', key: 'sourceTypeName', fallback: 'sourceType' }, { label: '专业', key: 'majorName', fallback: 'major' }, { label: '风险分析单元', key: 'riskUnit' }, { label: '风险分析对象', key: 'riskTarget' }, { label: '发现时间', key: 'discoverTime', time: true }, { label: '创建时间', key: 'createTime', time: true }, { label: '更新人', key: 'updateBy' }], flowFields: [{ label: '治理类型', key: 'governanceTypeName', fallback: 'governanceType' }, { label: '整改负责人', key: 'chargePersonName' }, { label: '限定完成时间', key: 'limitedCompleteTime', time: true }, { label: '实际完成时间', key: 'actualCompleteTime', time: true }, { label: '奖励积分', key: 'pointsAwarded', suffix: ' 分' }, { label: '积分状态', key: 'pointsStatusName', fallback: 'pointsStatus' }, { label: '平台同步', key: 'pushStatusName', fallback: 'pushStatus' }, { label: '同步时间', key: 'pushTime', time: true }, { label: '第三方记录', key: 'thirdPartyId' }, { label: '流程状态', key: 'flowStatus' }, { label: '审核人', key: 'auditUserNameName', fallback: 'auditUserName' }, { label: '审核时间', key: 'auditTime', time: true }], textFields: [{ label: '隐患描述', key: 'description' }, { label: '原因分析', key: 'causeAnalysis' }, { label: '整改方案', key: 'rectificationPlan' }, { label: '防范措施', key: 'preventiveMeasures' }, { label: '审核意见', key: 'auditRemark' }, { label: '备注', key: 'remark' }] } },
computed: { summary() { return this.ledgerList.reduce((result, row) => { const status = this.statusKey(row); if (status === '1') result.pending++; else if (status === '2') result.rectifying++; else if (status === '3') result.closed++; else if (status === '4') result.rejected++; return result }, { pending: 0, rectifying: 0, closed: 0, rejected: 0 }) } },
created() { this.getList(); this.getUnits() },
methods: {
getList() { this.loading = true; listHazardLedger(this.queryParams).then(response => { const page = response.data || response; this.ledgerList = page.list || page.rows || []; this.total = Number(page.total || page.totalCount || this.ledgerList.length) }).catch(() => { this.ledgerList = []; this.total = 0; this.$modal.msgError('隐患台账加载失败,请检查后端服务和登录状态') }).finally(() => { this.loading = false }) },
getUnits() { deptTreeSelect().then(response => { this.unitOptions = this.flattenTree(response.data || []) }).catch(() => { this.unitOptions = [] }) }, flattenTree(nodes, result = []) { nodes.forEach(node => { result.push({ id: node.id, label: node.label || node.deptName }); if (node.children) this.flattenTree(node.children, result) }); return result },
handleQuery() { this.queryParams.pageNum = 1; this.getList() }, resetQuery() { this.$refs.queryForm.resetFields(); this.queryParams.pageNum = 1; this.getList() },
openDetail(row) { this.detailVisible = true; this.detail = null; this.attachments = []; this.detailLoading = true; Promise.all([getHazardLedgerDetail(row.id), listHazardLedgerAttachments(row.id)]).then(results => { this.detail = results[0].data || results[0]; const data = results[1].data || results[1]; this.attachments = Array.isArray(data) ? data : [] }).catch(() => { this.$modal.msgError('隐患详情加载失败') }).finally(() => { this.detailLoading = false }) },
goAudit(row) { const taskId = row.taskId || row.taskID || row.todoTaskId; if (!taskId) { this.$modal.msgWarning('当前记录缺少任务 ID,无法进入审核'); return } this.detailVisible = false; this.$router.push({ path: '/hazard/audit/detail', query: { id: String(row.id), taskId: String(taskId) } }) },
handleRetrySync(row) { this.$confirm('确认重试将该隐患同步到生产运营平台吗?', '重试同步', { type: 'warning' }).then(() => retryHazardSync(row.id)).then(() => { this.$modal.msgSuccess('同步重试成功'); this.getList() }).catch(error => { if (error !== 'cancel') this.$modal.msgError(error.message || '同步重试失败') }) },
statusKey(row) { const value = String(row.status || ''); if (/待审核/.test(row.statusName || '') || value === '1') return '1'; if (/整改中/.test(row.statusName || '') || value === '2') return '2'; if (/闭环|已通过/.test(row.statusName || '') || value === '3') return '3'; if (/驳回/.test(row.statusName || '') || value === '4') return '4'; return value }, isPending(row) { return this.statusKey(row) === '1' }, isSyncFailed(row) { return /失败|异常/.test(row.pushStatusName || row.pushStatus || '') }, levelLabel(row) { return row.hazardLevelName || ({ general: '一般', major: '较大', critical: '重大' }[row.hazardLevel] || row.hazardLevel || '—') }, statusLabel(row) { return row.statusName || ({ 0: '待提交', 1: '待审核', 2: '整改中', 3: '已闭环', 4: '已驳回' }[String(row.status)] || row.status || '—') }, pointsLabel(row) { if (row.pointsStatusName) return row.pointsAwarded === undefined || row.pointsAwarded === null ? row.pointsStatusName : `${row.pointsAwarded > 0 ? '+' : ''}${row.pointsAwarded} ${row.pointsStatusName}`; return row.pointsAwarded === undefined || row.pointsAwarded === null ? '—' : `${row.pointsAwarded > 0 ? '+' : ''}${row.pointsAwarded} 分` }, pushLabel(row) { return row.pushStatusName || ({ SUCCESS: '已同步', FAIL: '同步失败', FAILED: '同步失败', WAIT: '待同步' }[String(row.pushStatus).toUpperCase()] || row.pushStatus || '—') }, statusTagType(row) { const value = this.statusKey(row); return value === '3' ? 'success' : value === '4' ? 'danger' : value === '1' || value === '2' ? 'warning' : 'info' }, levelTagType(row) { return String(row.hazardLevel || '').toLowerCase() === 'critical' ? 'danger' : String(row.hazardLevel || '').toLowerCase() === 'major' ? 'warning' : 'info' }, pointsTagType(row) { return row.pointsStatusName && /待|未/.test(row.pointsStatusName) ? 'info' : row.pointsAwarded === undefined || row.pointsAwarded === null ? 'info' : 'success' }, pushTagType(row) { return this.isSyncFailed(row) ? 'danger' : /待/.test(this.pushLabel(row)) ? 'info' : 'success' },
displayField(row, item) { const value = row[item.key] || (item.fallback && row[item.fallback]); if (value === undefined || value === null || value === '') return '—'; return (item.time ? this.formatTime(value) : String(value)) + (item.suffix || '') }, formatTime(value) { return value ? String(value).replace('T', ' ').slice(0, 19) : '—' }
}
}
</script>
<style lang="scss" scoped>
.hazard-ledger { min-height: calc(100vh - 84px); background: #f3f5f8; }.filter-bar { display: flex; align-items: center; flex-wrap: wrap; margin-bottom: 14px; padding: 16px 18px 2px; background: #fff; border-radius: 8px; }.filter-control { width: 170px; }.name-control { width: 210px; }.summary-inline { display: flex; align-items: center; gap: 20px; margin: 0 0 14px auto; padding: 0 6px; color: #909399; font-size: 13px; white-space: nowrap; }.summary-inline b { margin-left: 3px; color: #303133; }.warning-text { color: #e6a23c !important; }.success-text { color: #67c23a !important; }.danger-text { color: #f56c6c !important; }.table-card { border: 0; border-radius: 8px; }.table-note { margin-top: 12px; color: #909399; font-size: 12px; line-height: 1.6; }.retry-button { color: #e6a23c; }.detail-dialog { min-height: 250px; max-height: 68vh; overflow-y: auto; padding: 2px 2px 8px; }.detail-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }.detail-no { margin-right: 14px; color: #909399; font-size: 13px; }.detail-name { color: #303133; font-size: 18px; font-weight: 600; }.detail-tags { display: flex; gap: 8px; }.detail-section, .text-section, .attachment-section { margin-top: 16px; }.section-title { margin-bottom: 8px; color: #606266; font-weight: 600; }.text-row { display: grid; grid-template-columns: 90px 1fr; gap: 10px; padding: 7px 0; border-bottom: 1px solid #f0f2f5; font-size: 13px; }.text-row > span { color: #909399; }.text-row p { margin: 0; color: #303133; white-space: pre-wrap; word-break: break-word; }.attachment-tag { margin: 0 8px 8px 0; }.muted { color: #c0c4cc; font-size: 13px; }@media (max-width: 800px) { .summary-inline { width: 100%; justify-content: flex-end; flex-wrap: wrap; gap: 8px 16px; margin: 0 0 10px; white-space: normal; }.filter-control, .name-control { width: 100%; }.filter-bar .el-form-item { width: 100%; margin-right: 0; } }
</style>

9
src/views/points/management/index.vue

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<template>
<div class="app-container"></div>
</template>
<script>
export default {
name: 'PointsManagement'
}
</script>

1
unused-files.json

@ -4,7 +4,6 @@ @@ -4,7 +4,6 @@
"C:\\Du\\work\\duu\\zhongyou\\zhongyou_web\\src\\api\\generic.js",
"C:\\Du\\work\\duu\\zhongyou\\zhongyou_web\\src\\assets\\images\\questionModule.jpg",
"C:\\Du\\work\\duu\\zhongyou\\zhongyou_web\\src\\assets\\logo\\logo.png",
"C:\\Du\\work\\duu\\zhongyou\\zhongyou_web\\src\\components\\SelectTree\\index.vue",
"C:\\Du\\work\\duu\\zhongyou\\zhongyou_web\\src\\components\\TableList\\index.vue",
"C:\\Du\\work\\duu\\zhongyou\\zhongyou_web\\src\\components\\TopNav\\index.vue",
"C:\\Du\\work\\duu\\zhongyou\\zhongyou_web\\src\\img\\01.png",

Loading…
Cancel
Save