You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

372 lines
8.9 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 康策 CSM 系统 API 接口文档
> 自动生成时间2025-07-11
> Swagger UIhttp://localhost:5276/swagger
> 基地址http://localhost:5276
---
## 📋 接口概览
| Controller | 路由前缀 | 接口数 | 是否需要认证 |
|---|---|---|---|
| AdminController | `/api/admin` | 14 | 除登录外均需 JWT |
| HospitalController | `/api/hospital` | 9 | 除登录外均需 JWT |
| UploadController | `/api/upload` | 2 | 上传需 JWT |
---
## 🔐 认证说明
```
Authorization: Bearer {token}
```
- 调用登录接口获取 Token
- Token 有效期1440 分钟24 小时)
- 签发者CSM_System
- 受众CSM_Client
---
## 📐 统一响应格式
所有接口均返回 `ApiResponse``ApiResponse<T>`
```json
// 成功
{ "code": 200, "message": "success", "data": { ... } }
// 错误
{ "code": 400, "message": "参数错误", "data": null }
{ "code": 401, "message": "未授权", "data": null }
{ "code": 403, "message": "无权限", "data": null }
{ "code": 404, "message": "资源不存在", "data": null }
{ "code": 500, "message": "服务器内部错误", "data": null }
```
分页接口返回 `ApiResponse<PagedResult<T>>`
```json
{
"code": 200,
"message": "success",
"data": {
"total": 100,
"page": 1,
"pageSize": 10,
"list": [...]
}
}
```
---
## 一、管理端 API — `/api/admin`
### 1.1 登录
> **POST** `/api/admin/login` · 无需认证
**请求体:**
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| username | string | 是 | 用户名 |
| password | string | 是 | 密码 |
**请求示例:**
```json
{ "username": "admin", "password": "123456" }
```
**响应数据:**
| 字段 | 类型 | 说明 |
|---|---|---|
| token | string | JWT Token |
| userId | int | 用户 ID |
| userName | string | 用户名 |
| userType | string | 用户类型Admin/Hospital |
| hospitalId | int? | 所属医院 IDAdmin 为 null |
| hospitalName | string | 所属医院名称 |
| role | string | 角色 |
| name | string | 姓名 |
> ⚠️ 仅允许 `userType == "Admin"` 的账号登录,否则返回 403
---
### 1.2 服务工单
#### 获取工单列表
> **GET** `/api/admin/orders` · ✅ 需认证
| 查询参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | int | 否 | 页码,默认 1 |
| pageSize | int | 否 | 每页条数,默认 10 |
| status | string | 否 | 状态筛选 |
| priority | string | 否 | 优先级筛选(高/中/低) |
| type | string | 否 | 服务类型筛选 |
| keyword | string | 否 | 关键词搜索 |
| startDate | string | 否 | 开始时间 |
| endDate | string | 否 | 结束时间 |
| hospitalId | int | 否 | 医院 ID 筛选 |
#### 获取工单详情
> **GET** `/api/admin/orders/{id}` · ✅ 需认证
| 路径参数 | 类型 | 说明 |
|---|---|---|
| id | int | 工单 ID |
#### 管理端提交工单
> **POST** `/api/admin/orders` · ✅ 需认证
**请求体:**
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| title | string | 是 | 工单标题 |
| priority | string | 是 | 优先级(高/中/低) |
| serviceType | string | 是 | 服务类型 |
| description | string | 是 | 详细描述HTML |
| department | string | 否 | 科室 |
| submitter | string | 否 | 提交人 |
| colorTag | string | 否 | 颜色标签 |
| hospitalId | int | 否 | 指定医院 ID |
#### 处理工单
> **PUT** `/api/admin/orders/{id}/process` · ✅ 需认证
**路径参数:** `id` — 工单 ID
**请求体:**
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| processRemark | string | 是 | 处理备注HTML |
| status | string | 是 | 目标状态(如"已完成" |
---
### 1.3 医院信息
#### 获取医院列表
> **GET** `/api/admin/hospitals` · ✅ 需认证
| 查询参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | int | 否 | 页码,默认 1 |
| pageSize | int | 否 | 每页条数,默认 10 |
| keyword | string | 否 | 关键词搜索 |
| category | string | 否 | 类别筛选 |
#### 获取医院详情
> **GET** `/api/admin/hospitals/{id}` · ✅ 需认证
| 路径参数 | 类型 | 说明 |
|---|---|---|
| id | int | 医院 ID |
#### 添加医院
> **POST** `/api/admin/hospitals` · ✅ 需认证
**请求体:**
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 医院名称 |
| customerCategory | string | 是 | 客户类别(如 A |
| contactDept | string | 否 | 联系部门 |
| contactPerson | string | 否 | 联系人 |
| contactPosition | string | 否 | 联系人职位 |
| contactPhone | string | 否 | 联系电话 |
| signDate | DateTime | 是 | 签约日期 |
| acceptDate | DateTime | 是 | 验收日期 |
| contractYears | int | 是 | 合同年限 |
| maintenanceEnd | DateTime | 是 | 维保到期日 |
| managerId | int | 否 | 负责人 ID |
| remark | string | 否 | 备注 |
#### 更新医院信息
> **PUT** `/api/admin/hospitals/{id}` · ✅ 需认证
请求体同「添加医院」
---
### 1.4 账号管理
#### 获取账号列表
> **GET** `/api/admin/accounts` · ✅ 需认证
| 查询参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| type | string | 否 | 用户类型Admin/Hospital |
| page | int | 否 | 页码 |
| pageSize | int | 否 | 每页条数 |
| keyword | string | 否 | 关键词搜索 |
#### 添加账号
> **POST** `/api/admin/accounts` · ✅ 需认证
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| username | string | 是 | 用户名 |
| password | string | 是 | 密码 |
| name | string | 是 | 姓名 |
| gender | string | 否 | 性别 |
| userType | string | 是 | 类型Admin/Hospital |
| hospitalId | int | 否 | 所属医院 ID |
| role | string | 否 | 角色 |
#### 编辑账号
> **PUT** `/api/admin/accounts/{id}` · ✅ 需认证
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 否 | 姓名 |
| gender | string | 否 | 性别 |
| hospitalId | int | 否 | 所属医院 ID |
| role | string | 否 | 角色 |
#### 切换账号状态
> **PUT** `/api/admin/accounts/{id}/status` · ✅ 需认证
切换启用/禁用状态,无需请求体。
#### 重置密码
> **POST** `/api/admin/accounts/{id}/reset-password` · ✅ 需认证
重置为默认密码 `123456`,无需请求体。
---
## 二、医院端 API — `/api/hospital`
### 2.1 登录
> **POST** `/api/hospital/login` · 无需认证
请求体同管理端登录。
> ⚠️ 仅允许 `userType == "Hospital"` 的账号登录,否则返回 403
---
### 2.2 工作台
#### 获取统计数据
> **GET** `/api/hospital/workbench` · ✅ 需认证
| 查询参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| period | string | 否 | 统计周期month |
| start | DateTime | 否 | 开始日期 |
| end | DateTime | 否 | 结束日期 |
**响应数据:**
| 字段 | 类型 | 说明 |
|---|---|---|
| totalOrders | int | 总工单数 |
| completedOrders | int | 已完成数 |
| pendingOrders | int | 待处理数 |
| highPriorityOrders | int | 高优先级数 |
| trendData | array | 趋势图数据 `[{ date, submitCount, completeCount }]` |
---
### 2.3 工单管理
#### 我的工单列表
> **GET** `/api/hospital/orders` · ✅ 需认证
查询参数同管理端工单列表(不含 `hospitalId`,自动绑定当前医院)
#### 工单详情
> **GET** `/api/hospital/orders/{id}` · ✅ 需认证
| 路径参数 | 类型 | 说明 |
|---|---|---|
| id | int | 工单 ID |
返回工单详情(含附件列表 + 状态流转日志)
#### 快速提交工单
> **POST** `/api/hospital/orders` · ✅ 需认证
请求体同管理端提交工单(不含 `hospitalId`,自动绑定当前医院)
#### 编辑工单
> **PUT** `/api/hospital/orders/{id}` · ✅ 需认证
#### 取消工单
> **DELETE** `/api/hospital/orders/{id}` · ✅ 需认证
---
### 2.4 积分
#### 积分总览
> **GET** `/api/hospital/points` · ✅ 需认证
**响应:**
```json
{ "totalPoints": 0, "rewardCount": 0 }
```
#### 积分明细
> **GET** `/api/hospital/points/details` · ✅ 需认证
| 查询参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | int | 否 | 页码,默认 1 |
| pageSize | int | 否 | 每页条数,默认 10 |
**响应:**
```json
[{ "source": "string", "orderNo": "string", "changeAmount": 0, "description": "string", "createdAt": "2025-01-01" }]
```
---
## 三、附件上传下载 — `/api/upload`
### 3.1 上传附件
> **POST** `/api/upload` · ✅ 需认证
**请求格式:** `multipart/form-data`
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| orderNo | string | 是 | 关联工单号 |
| files | file[] | 是 | 文件列表 |
- 单文件最大50 MB
- 存储路径:`Uploads/Attachments/`
### 3.2 下载/预览附件
> **GET** `/api/upload/{fileName}` · 无需认证
| 路径参数 | 类型 | 说明 |
|---|---|---|
| fileName | string | 文件名 |
---
## 🏷️ 附录:状态码说明
| 状态码 | 说明 |
|---|---|
| 200 | 请求成功 |
| 400 | 参数校验失败 |
| 401 | 未登录或 Token 过期 |
| 403 | 无操作权限 |
| 404 | 资源不存在 |
| 500 | 服务器内部错误 |