# 订单系统实现文档
## 功能概述
完整的订单管理系统,支持订单创建、支付、取消、退款等操作。订单关联患者和创建人(推广ID),支持多种订单类型(挂号费、问诊费、药品费用)。
## 系统架构
### 前端结构
```
admin/
├── src/
│ ├── api/
│ │ └── order.ts # 订单API接口
│ └── views/
│ └── order/
│ └── index.vue # 订单列表页面
├── order.sql # 数据库表定义
└── ORDER_SYSTEM_GUIDE.md # 本文档
```
### 后端结构
```
server/
├── app/
│ ├── common/
│ │ └── model/
│ │ ├── Order.php # 订单模型
│ │ └── OrderDetail.php # 订单详情模型
│ └── adminapi/
│ ├── controller/
│ │ └── order/
│ │ └── OrderController.php # 订单控制器
│ ├── logic/
│ │ └── order/
│ │ └── OrderLogic.php # 订单业务逻辑
│ ├── validate/
│ │ └── order/
│ │ └── OrderValidate.php # 订单验证规则
│ └── lists/
│ └── order/
│ └── OrderLists.php # 订单列表类
├── database/
│ └── migrations/
│ └── 2024_03_10_create_order_tables.php # 数据库迁移
└── order.sql # SQL脚本
```
## 数据库设计
### 订单表 (zyt_order)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | int | 主键 |
| order_no | varchar(50) | 订单号(唯一) |
| patient_id | int | 患者ID |
| creator_id | int | 创建人ID(推广ID) |
| order_type | tinyint | 订单类型:1=挂号费,2=问诊费,3=药品费用 |
| amount | decimal(10,2) | 订单金额 |
| status | tinyint | 订单状态:1=待支付,2=已支付,3=已取消,4=已退款 |
| payment_method | varchar(20) | 支付方式:alipay/wechat/bank |
| payment_time | datetime | 支付时间 |
| remark | varchar(500) | 备注 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间(软删除) |
### 订单详情表 (zyt_order_detail)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | int | 主键 |
| order_id | int | 订单ID |
| related_type | varchar(20) | 关联类型:appointment/diagnosis/medicine |
| related_id | int | 关联ID |
| quantity | int | 数量 |
| unit_price | decimal(10,2) | 单价 |
| total_price | decimal(10,2) | 总价 |
| create_time | datetime | 创建时间 |
## API接口文档
### 1. 获取订单列表
**请求**
```
GET /order.order/lists
```
**参数**
```json
{
"page_no": 1,
"page_size": 15,
"order_no": "", // 订单号(可选)
"patient_keyword": "", // 患者关键词(可选)
"order_type": "", // 订单类型(可选)
"status": "", // 订单状态(可选)
"create_time_start": "", // 创建时间开始(可选)
"create_time_end": "" // 创建时间结束(可选)
}
```
**响应**
```json
{
"code": 1,
"msg": "success",
"data": {
"lists": [
{
"id": 1,
"order_no": "ORD20240310120000123456",
"patient_id": 1,
"patient_name": "张三",
"patient_phone": "13800138000",
"creator_id": 1,
"creator_name": "李四",
"order_type": 1,
"order_type_desc": "挂号费",
"amount": "100.00",
"status": 1,
"status_desc": "待支付",
"payment_method": null,
"payment_time": null,
"remark": "",
"create_time": "2024-03-10 12:00:00",
"update_time": "2024-03-10 12:00:00"
}
],
"count": 100,
"page_no": 1,
"page_size": 15
}
}
```
### 2. 获取订单详情
**请求**
```
GET /order.order/detail
```
**参数**
```json
{
"id": 1
}
```
**响应**
```json
{
"code": 1,
"msg": "success",
"data": {
"id": 1,
"order_no": "ORD20240310120000123456",
"patient_id": 1,
"patient_name": "张三",
"patient_phone": "13800138000",
"creator_id": 1,
"creator_name": "李四",
"order_type": 1,
"order_type_desc": "挂号费",
"amount": "100.00",
"status": 1,
"status_desc": "待支付",
"payment_method": null,
"payment_time": null,
"remark": "备注信息",
"create_time": "2024-03-10 12:00:00",
"update_time": "2024-03-10 12:00:00",
"details": [
{
"id": 1,
"order_id": 1,
"related_type": "appointment",
"related_type_desc": "挂号",
"related_id": 1,
"quantity": 1,
"unit_price": "100.00",
"total_price": "100.00",
"create_time": "2024-03-10 12:00:00"
}
]
}
}
```
### 3. 创建订单
**请求**
```
POST /order.order/create
```
**参数**
```json
{
"patient_id": 1,
"order_type": 1,
"amount": "100.00",
"remark": "备注信息",
"details": [
{
"related_type": "appointment",
"related_id": 1,
"quantity": 1,
"unit_price": "100.00",
"total_price": "100.00"
}
]
}
```
**响应**
```json
{
"code": 1,
"msg": "创建成功",
"data": {
"id": 1,
"order_no": "ORD20240310120000123456",
"patient_id": 1,
"creator_id": 1,
"order_type": 1,
"amount": "100.00",
"status": 1,
"payment_method": null,
"payment_time": null,
"remark": "备注信息",
"create_time": "2024-03-10 12:00:00",
"update_time": "2024-03-10 12:00:00"
}
}
```
### 4. 编辑订单
**请求**
```
POST /order.order/edit
```
**参数**
```json
{
"id": 1,
"remark": "更新后的备注"
}
```
**响应**
```json
{
"code": 1,
"msg": "编辑成功"
}
```
### 5. 支付订单
**请求**
```
POST /order.order/pay
```
**参数**
```json
{
"id": 1,
"payment_method": "alipay"
}
```
**响应**
```json
{
"code": 1,
"msg": "支付成功"
}
```
### 6. 取消订单
**请求**
```
POST /order.order/cancel
```
**参数**
```json
{
"id": 1
}
```
**响应**
```json
{
"code": 1,
"msg": "取消成功"
}
```
### 7. 退款订单
**请求**
```
POST /order.order/refund
```
**参数**
```json
{
"id": 1
}
```
**响应**
```json
{
"code": 1,
"msg": "退款成功"
}
```
### 8. 删除订单
**请求**
```
POST /order.order/delete
```
**参数**
```json
{
"id": 1
}
```
**响应**
```json
{
"code": 1,
"msg": "删除成功"
}
```
### 9. 导出订单
**请求**
```
GET /order.order/export
```
**参数**
```json
{
"page_no": 1,
"page_size": 15,
"order_no": "",
"patient_keyword": "",
"order_type": "",
"status": "",
"create_time_start": "",
"create_time_end": ""
}
```
## 前端使用指南
### 1. 导入API
```typescript
import {
orderLists,
orderDetail,
orderCreate,
orderEdit,
orderPay,
orderCancel,
orderRefund,
orderDelete,
orderExport
} from '@/api/order'
```
### 2. 使用列表页面
```vue
```
### 3. 搜索和筛选
```typescript
// 搜索订单
const queryParams = {
order_no: 'ORD20240310',
patient_keyword: '张三',
order_type: 1,
status: 1,
create_time_start: '2024-03-01',
create_time_end: '2024-03-31'
}
const { pager, getLists } = usePaging({
fetchFun: orderLists,
params: queryParams
})
// 执行搜索
getLists()
```
## 后端使用指南
### 1. 创建订单
```php
use app\adminapi\logic\OrderLogic;
$params = [
'patient_id' => 1,
'creator_id' => 1,
'order_type' => 1,
'amount' => 100.00,
'remark' => '备注',
'details' => [
[
'related_type' => 'appointment',
'related_id' => 1,
'quantity' => 1,
'unit_price' => 100.00,
'total_price' => 100.00
]
]
];
$result = OrderLogic::create($params);
if (!$result) {
echo OrderLogic::getError();
}
```
### 2. 支付订单
```php
$result = OrderLogic::pay(1, 'alipay');
if (!$result) {
echo OrderLogic::getError();
}
```
### 3. 获取订单详情
```php
$order = OrderLogic::detail(1);
```
## 权限配置
需要在后端权限系统中添加以下权限节点:
```
order.order/lists - 订单列表
order.order/detail - 订单详情
order.order/create - 创建订单
order.order/edit - 编辑订单
order.order/pay - 支付订单
order.order/cancel - 取消订单
order.order/refund - 退款订单
order.order/delete - 删除订单
order.order/export - 导出订单
```
## 安装步骤
### 1. 执行数据库迁移
```bash
# 使用迁移文件
php think migrate:run
# 或直接执行SQL
mysql -u root -p database_name < admin/order.sql
```
### 2. 前端集成
- 将 `admin/src/api/order.ts` 复制到项目
- 将 `admin/src/views/order/index.vue` 复制到项目
- 在路由中添加订单页面
### 3. 后端集成
- 将 `server/app/common/model/Order.php` 复制到项目
- 将 `server/app/common/model/OrderDetail.php` 复制到项目
- 将 `server/app/adminapi/controller/order/OrderController.php` 复制到项目
- 将 `server/app/adminapi/logic/order/OrderLogic.php` 复制到项目
- 将 `server/app/adminapi/validate/order/OrderValidate.php` 复制到项目
- 将 `server/app/adminapi/lists/order/OrderLists.php` 复制到项目
### 4. 权限配置
在后端权限管理中添加订单相关权限节点。
## 业务流程
### 订单生命周期
```
创建订单 (status=1)
↓
支付订单 (status=2) 或 取消订单 (status=3)
↓
如果已支付,可以退款 (status=4)
↓
删除订单
```
### 订单类型
- **1 - 挂号费**: 关联医生排班和患者预约
- **2 - 问诊费**: 关联诊断记录
- **3 - 药品费用**: 关联药品订单
## 注意事项
1. **订单号生成**: 自动生成唯一订单号,格式为 `ORD + 时间戳 + 随机数`
2. **软删除**: 订单支持软删除,不会真正删除数据
3. **关联关系**: 订单详情记录了订单与其他模块的关联关系
4. **支付方式**: 支持支付宝、微信、银行卡三种支付方式
5. **状态转换**: 订单状态转换有严格的业务规则限制
## 扩展建议
1. **支付集成**: 集成第三方支付接口(支付宝、微信等)
2. **发票管理**: 支持订单发票申请和管理
3. **订单统计**: 添加订单统计和报表功能
4. **自动对账**: 定期与支付平台对账
5. **订单提醒**: 支付超时提醒、订单状态变更通知
6. **退款流程**: 完善退款审核和处理流程
7. **订单模板**: 支持不同类型订单的模板配置