Files
zyt/server/APPOINTMENT_BACKEND_SETUP.md
T
2026-03-04 15:32:30 +08:00

380 lines
7.8 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.
# 医生预约系统后端安装说明
## 文件清单
已创建以下后端文件:
### 1. 数据库模型
- `server/app/common/model/doctor/Appointment.php` - 预约模型
### 2. 控制器
- `server/app/adminapi/controller/doctor/AppointmentController.php` - 预约控制器
### 3. 业务逻辑层
- `server/app/adminapi/logic/doctor/AppointmentLogic.php` - 预约业务逻辑
### 4. 验证器
- `server/app/adminapi/validate/doctor/AppointmentValidate.php` - 预约数据验证
### 5. 数据列表
- `server/app/adminapi/lists/doctor/AppointmentLists.php` - 预约列表
### 6. 数据库脚本
- `server/sql/doctor_appointment.sql` - 数据库表创建脚本
## 安装步骤
### 1. 创建数据库表
在MySQL中执行以下SQL脚本:
```bash
mysql -u your_username -p your_database < server/sql/doctor_appointment.sql
```
或者在phpMyAdmin中导入 `server/sql/doctor_appointment.sql` 文件。
### 2. 验证文件
确认所有文件已正确创建:
```bash
# 检查模型
ls -la server/app/common/model/doctor/Appointment.php
# 检查控制器
ls -la server/app/adminapi/controller/doctor/AppointmentController.php
# 检查逻辑层
ls -la server/app/adminapi/logic/doctor/AppointmentLogic.php
# 检查验证器
ls -la server/app/adminapi/validate/doctor/AppointmentValidate.php
# 检查列表
ls -la server/app/adminapi/lists/doctor/AppointmentLists.php
```
### 3. 清除缓存
```bash
cd server
php think clear
```
### 4. 测试API接口
#### 4.1 获取可用时间段
```bash
GET /adminapi/doctor.appointment/availableSlots?doctor_id=1&appointment_date=2026-03-04&period=morning
```
预期返回:
```json
{
"code": 1,
"msg": "success",
"data": {
"slots": [
{
"time": "09:00",
"available": true,
"quota": 5
},
...
]
}
}
```
#### 4.2 创建预约
```bash
POST /adminapi/doctor.appointment/create
Content-Type: application/json
{
"patient_id": 1,
"doctor_id": 1,
"appointment_date": "2026-03-04",
"period": "morning",
"appointment_time": "09:00",
"appointment_type": "video",
"remark": "测试预约"
}
```
预期返回:
```json
{
"code": 1,
"msg": "预约成功",
"data": {
"id": 1
}
}
```
#### 4.3 获取预约列表
```bash
GET /adminapi/doctor.appointment/lists?page_no=1&page_size=10
```
#### 4.4 取消预约
```bash
POST /adminapi/doctor.appointment/cancel
Content-Type: application/json
{
"id": 1
}
```
#### 4.5 获取医生可用号源数
```bash
GET /adminapi/doctor.appointment/doctorAvailability?doctor_id=1&date=2026-03-04
```
预期返回:
```json
{
"code": 1,
"msg": "success",
"data": {
"available_count": 10
}
}
```
## API接口说明
### 1. 获取可用时间段
**接口地址**: `/adminapi/doctor.appointment/availableSlots`
**请求方式**: GET
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| doctor_id | int | 是 | 医生ID |
| appointment_date | date | 是 | 预约日期 YYYY-MM-DD |
| period | string | 是 | 时段 morning/afternoon |
**返回数据**:
```json
{
"slots": [
{
"time": "09:00",
"available": true,
"quota": 5
}
]
}
```
### 2. 创建预约
**接口地址**: `/adminapi/doctor.appointment/create`
**请求方式**: POST
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| patient_id | int | 是 | 患者ID |
| doctor_id | int | 是 | 医生ID |
| appointment_date | date | 是 | 预约日期 |
| period | string | 是 | 时段 morning/afternoon |
| appointment_time | time | 是 | 预约时间 HH:mm |
| appointment_type | string | 否 | 预约类型 video/text/phone |
| remark | string | 否 | 备注 |
**返回数据**:
```json
{
"id": 1
}
```
### 3. 取消预约
**接口地址**: `/adminapi/doctor.appointment/cancel`
**请求方式**: POST
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| id | int | 是 | 预约ID |
### 4. 预约列表
**接口地址**: `/adminapi/doctor.appointment/lists`
**请求方式**: GET
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| page_no | int | 否 | 页码 |
| page_size | int | 否 | 每页数量 |
| patient_id | int | 否 | 患者ID |
| doctor_id | int | 否 | 医生ID |
| status | int | 否 | 状态 |
| appointment_date | date | 否 | 预约日期 |
### 5. 预约详情
**接口地址**: `/adminapi/doctor.appointment/detail`
**请求方式**: GET
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| id | int | 是 | 预约ID |
### 6. 医生可用号源数
**接口地址**: `/adminapi/doctor.appointment/doctorAvailability`
**请求方式**: GET
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| doctor_id | int | 是 | 医生ID |
| date | date | 是 | 日期 YYYY-MM-DD |
## 业务逻辑说明
### 1. 时间段生成规则
- 上午时段:09:00 - 11:3030分钟间隔)
- 下午时段:13:00 - 20:3030分钟间隔)
### 2. 预约规则
1. 必须有医生排班且状态为"出诊"status=1
2. 时间段不能重复预约
3. 预约数量不能超过排班设置的号源数(quota)
4. 使用数据库唯一索引防止并发冲突
### 3. 状态说明
**预约状态**:
- 1: 已预约
- 2: 已取消
- 3: 已完成
**排班状态**:
- 1: 出诊
- 2: 停诊
- 3: 休息
- 4: 请假
## 注意事项
1. **并发控制**: 使用数据库唯一索引 `unique_appointment` 防止重复预约
2. **事务处理**: 创建预约时使用事务确保数据一致性
3. **时间格式**:
- 日期格式:YYYY-MM-DD
- 时间格式:HH:mm
- 时间戳:整型(秒)
4. **权限控制**: 需要在后台权限管理中添加相应的权限节点
## 权限节点
建议添加以下权限节点:
```
doctor.appointment/availableSlots - 查看可用时间段
doctor.appointment/create - 创建预约
doctor.appointment/cancel - 取消预约
doctor.appointment/lists - 预约列表
doctor.appointment/detail - 预约详情
doctor.appointment/doctorAvailability - 医生可用号源
```
## 故障排查
### 1. 控制器不存在
**错误**: `控制器不存在: app\adminapi\controller\doctor\AppointmentController`
**解决方案**:
```bash
# 清除缓存
cd server
php think clear
# 检查文件是否存在
ls -la server/app/adminapi/controller/doctor/AppointmentController.php
# 检查命名空间是否正确
head -n 5 server/app/adminapi/controller/doctor/AppointmentController.php
```
### 2. 数据库表不存在
**错误**: `Table 'database.la_doctor_appointment' doesn't exist`
**解决方案**:
```bash
# 执行SQL脚本
mysql -u username -p database < server/sql/doctor_appointment.sql
# 或在MySQL中手动执行
mysql> source /path/to/server/sql/doctor_appointment.sql;
```
### 3. 参数验证失败
**错误**: `参数错误`
**解决方案**:
- 检查请求参数是否完整
- 检查参数类型是否正确
- 查看验证器规则是否匹配
## 测试数据
### 创建测试排班
```sql
INSERT INTO `la_doctor_roster` (`doctor_id`, `date`, `period`, `status`, `quota`, `max_patients`, `create_time`, `update_time`)
VALUES
(1, '2026-03-04', 'morning', 1, 10, 15, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
(1, '2026-03-04', 'afternoon', 1, 10, 15, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
```
### 创建测试预约
```sql
INSERT INTO `la_doctor_appointment` (`patient_id`, `doctor_id`, `roster_id`, `appointment_date`, `period`, `appointment_time`, `appointment_type`, `status`, `create_time`, `update_time`)
VALUES
(1, 1, 1, '2026-03-04', 'morning', '09:00:00', 'video', 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
```
## 完成状态
✅ 数据库模型创建完成
✅ 控制器创建完成
✅ 业务逻辑层创建完成
✅ 验证器创建完成
✅ 数据列表创建完成
✅ SQL脚本创建完成
⏳ 等待数据库表创建
⏳ 等待接口测试
---
**创建时间**: 2024-02-26
**最后更新**: 2024-02-26