vitesse-yitisheng-web/docs/user_volunteer_controller_a...

515 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 用户志愿控制器 API 接口文档
## 概述
用户志愿控制器 (UserVolunteerController) 提供了志愿管理的相关接口,包括志愿保存、详情查询、名称修改、列表查询、删除和切换功能。
**基础路径**: `/api/user/volunteer`
**认证方式**: 需要登录认证,通过 JWT Token 进行身份验证
---
## 1. 保存志愿明细
保存用户选择的志愿专业列表到当前激活的志愿表中。
**请求**
- **方法**: `POST`
- **路径**: `/api/user/volunteer/save`
- **Content-Type**: `application/json`
**请求参数**
| 参数名 | 类型 | 必填 | 说明 |
|--------|--------|------|----------------------------------------|
| keys | string[] | 是 | 志愿专业Key列表格式`学校代码_专业代码_招生代码` |
**请求示例**
```json
[
"10001_1001_001",
"10002_2001_002",
"10003_3001_003"
]
```
**响应**
| 字段名 | 类型 | 说明 |
|----------|--------|----------|
| code | int | 状态码 |
| message | string | 响应消息 |
| data | string | 响应数据 |
**成功响应示例**
```json
{
"code": 200,
"message": "success",
"data": "保存成功"
}
```
**错误响应示例**
```json
{
"code": 500,
"message": "未找到计算表名",
"data": null
}
```
**错误码说明**
| 错误码 | 说明 |
|--------|----------------------------|
| 500 | 获取用户成绩信息失败 |
| 500 | 未找到计算表名 |
| 500 | 查找志愿表失败 |
| 500 | 请先创建志愿表 |
| 500 | 查找专业信息失败 |
| 500 | 删除旧数据失败 |
| 500 | 保存失败 |
**业务逻辑**
1. 对传入的keys进行去重处理
2. 获取当前登录用户的激活成绩信息
3. 查找当前激活的志愿表
4. 根据keys查找对应的专业信息
5. 构建志愿记录列表,保持提交顺序
6. 先删除旧的志愿记录,再批量插入新记录
---
## 2. 获取当前志愿单详情
获取当前激活志愿单的详细信息,包括志愿记录按批次分组展示。
**请求**
- **方法**: `GET`
- **路径**: `/api/user/volunteer/detail`
**请求参数**
**响应**
| 字段名 | 类型 | 说明 |
|----------|--------|--------------------|
| code | int | 状态码 |
| message | string | 响应消息 |
| data | object | 志愿详情数据 |
**data 数据结构**
| 字段名 | 类型 | 说明 |
|------------|--------|--------------------------|
| volunteer | object | 志愿单基本信息 |
| items | object | 按批次分组的志愿明细 |
**items 数据结构**
| 批次 | 类型 | 说明 |
|--------|------|------|
| 提前批 | array | 提前批志愿记录列表 |
| 本科批 | array | 本科批志愿记录列表 |
| 专科批 | array | 专科批志愿记录列表 |
**志愿记录项数据结构**
| 字段名 | 类型 | 说明 |
|------------------------|---------|--------------------------------|
| volunteerID | string | 志愿单ID |
| schoolCode | string | 学校代码 |
| majorCode | string | 专业代码 |
| enrollmentCode | string | 招生代码 |
| indexs | int | 志愿序号 |
| batch | string | 批次 |
| enrollProbability | float64 | 录取概率 |
| studentConvertedScore | float64 | 学生折合分 |
| calculationMajorID | string | 计算专业ID |
| schoolName | string | 学校名称 |
| majorName | string | 专业名称 |
| planNum | int | 计划人数 |
| tuition | string | 学费 |
| province | string | 省份 |
| schoolNature | string | 院校性质 |
| institutionType | string | 院校类型 |
| majorDetail | string | 专业详情 |
**成功响应示例**
```json
{
"code": 200,
"message": "success",
"data": {
"volunteer": {
"id": "123456789",
"volunteerName": "我的志愿表",
"scoreId": "987654321",
"createType": 1,
"state": 1
},
"items": {
"提前批": [
{
"volunteerID": "123456789",
"schoolCode": "10001",
"majorCode": "1001",
"enrollmentCode": "001",
"indexs": 1,
"batch": "本科提前批",
"schoolName": "某某大学",
"majorName": "美术学",
"planNum": 30,
"tuition": "8000元/年",
"enrollProbability": 85.5
}
],
"本科批": [],
"专科批": []
}
}
}
```
**错误码说明**
| 错误码 | 说明 |
|--------|------------------------|
| 500 | 获取用户成绩信息失败 |
| 500 | 查找志愿表失败 |
| 500 | 查找志愿明细失败 |
**批次分类规则**
- **提前批**: `提前批`、`本科提前批`
- **专科批**: `高职高专`、`专科批`
- **本科批**: 其他所有批次
---
## 3. 编辑志愿单名称
修改志愿单的名称。
**请求**
- **方法**: `PUT`
- **路径**: `/api/user/volunteer/updateName`
**请求参数**
| 参数名 | 类型 | 必填 | 位置 | 说明 |
|--------|--------|------|--------|------------|
| id | string | 是 | query | 志愿单ID |
| name | string | 是 | query | 志愿单名称 |
**请求示例**
```
PUT /api/user/volunteer/updateName?id=123456789&name=我的新志愿表
```
**响应**
| 字段名 | 类型 | 说明 |
|----------|--------|----------|
| code | int | 状态码 |
| message | string | 响应消息 |
| data | string | 响应数据 |
**成功响应示例**
```json
{
"code": 200,
"message": "success",
"data": "更新成功"
}
```
**错误响应示例**
```json
{
"code": 400,
"message": "参数错误",
"data": null
}
```
**错误码说明**
| 错误码 | 说明 |
|--------|----------------|
| 400 | 参数错误 |
| 500 | 更新失败 |
---
## 4. 获取当前用户志愿单列表
分页查询当前用户的志愿单列表。
**请求**
- **方法**: `GET`
- **路径**: `/api/user/volunteer/list`
**请求参数**
| 参数名 | 类型 | 必填 | 位置 | 默认值 | 说明 |
|--------|------|------|-------|--------|--------|
| page | int | 否 | query | 1 | 页码 |
| size | int | 否 | query | 10 | 每页数量 |
**请求示例**
```
GET /api/user/volunteer/list?page=1&size=10
```
**响应**
| 字段名 | 类型 | 说明 |
|----------|--------|----------|
| code | int | 状态码 |
| message | string | 响应消息 |
| data | object | 响应数据 |
**data 数据结构**
| 字段名 | 类型 | 说明 |
|--------|--------|--------------|
| items | array | 志愿单列表 |
| total | int64 | 总数量 |
**志愿单数据结构**
| 字段名 | 类型 | 说明 |
|----------------|---------|------------------------------|
| id | string | 志愿单ID |
| volunteerName | string | 志愿单名称 |
| scoreId | string | 关联成绩ID |
| createType | int | 生成类型 (1.手动, 2.智能) |
| state | string | 状态 (0.未使用, 1.使用中, 2.历史) |
| createBy | string | 创建人 |
| createTime | string | 创建时间 |
| updateBy | string | 更新人 |
| updateTime | string | 更新时间 |
**成功响应示例**
```json
{
"code": 200,
"message": "success",
"data": {
"items": [
{
"id": "123456789",
"volunteerName": "我的志愿表",
"scoreId": "987654321",
"createType": 1,
"state": "1",
"createBy": "user001",
"createTime": "2026-01-31T10:00:00Z"
}
],
"total": 1
}
}
```
**错误码说明**
| 错误码 | 说明 |
|--------|----------------|
| 500 | 查询失败 |
---
## 5. 删除志愿单
删除指定的志愿单。
**请求**
- **方法**: `DELETE`
- **路径**: `/api/user/volunteer/delete`
**请求参数**
| 参数名 | 类型 | 必填 | 位置 | 说明 |
|--------|--------|------|-------|----------|
| id | string | 是 | query | 志愿单ID |
**请求示例**
```
DELETE /api/user/volunteer/delete?id=123456789
```
**响应**
| 字段名 | 类型 | 说明 |
|----------|--------|----------|
| code | int | 状态码 |
| message | string | 响应消息 |
| data | string | 响应数据 |
**成功响应示例**
```json
{
"code": 200,
"message": "success",
"data": "删除成功"
}
```
**错误响应示例**
```json
{
"code": 400,
"message": "参数错误",
"data": null
}
```
**错误码说明**
| 错误码 | 说明 |
|--------|----------------|
| 400 | 参数错误 |
| 500 | 删除失败 |
---
## 6. 切换当前志愿单
切换当前激活的志愿单。
**请求**
- **方法**: `POST`
- **路径**: `/api/user/volunteer/switch`
**请求参数**
| 参数名 | 类型 | 必填 | 位置 | 说明 |
|--------|--------|------|-------|----------|
| id | string | 是 | query | 志愿单ID |
**请求示例**
```
POST /api/user/volunteer/switch?id=123456789
```
**响应**
| 字段名 | 类型 | 说明 |
|----------|--------|----------|
| code | int | 状态码 |
| message | string | 响应消息 |
| data | string | 响应数据 |
**成功响应示例**
```json
{
"code": 200,
"message": "success",
"data": "切换成功"
}
```
**特殊响应示例(已是当前志愿单)**
```json
{
"code": 200,
"message": "success",
"data": "已是当前志愿单,忽略切换"
}
```
**错误码说明**
| 错误码 | 说明 |
|--------|----------------------------|
| 400 | 参数错误 |
| 500 | 获取用户成绩信息失败 |
| 500 | 切换失败 |
**业务逻辑**
1. 检查当前是否已是该志愿单,如果是则忽略切换
2. 执行志愿单切换操作
3. Redis 缓存同步(由 Service 层处理)
---
## 通用响应格式说明
### 成功响应
```json
{
"code": 200,
"message": "success",
"data": {}
}
```
### 错误响应
```json
{
"code": 错误码,
"message": "错误信息",
"data": null
}
```
### 常见错误码
| 错误码 | 说明 |
|--------|--------------------|
| 200 | 成功 |
| 400 | 请求参数错误 |
| 500 | 服务器内部错误 |
---
## 认证说明
所有接口都需要在请求头中携带 JWT Token
```
Authorization: Bearer {token}
```
Token 从登录接口获取有效期24小时。
---
## 注意事项
1. **保存志愿明细**: 每次保存会先删除当前志愿表中的所有记录,再插入新记录
2. **批次分类**: 志愿详情按 提前批、本科批、专科批 三大类分组展示
3. **数据去重**: 保存志愿时会自动去重,避免重复添加相同专业
4. **顺序保持**: 志愿序号按照提交的 keys 顺序依次递增
5. **权限控制**: 所有操作都基于当前登录用户的身份,只能操作自己的志愿数据