# 订单系统实现完成 ## ✅ 已完成的工作 ### 前端实现 - ✅ 订单 API 接口 (`src/api/order.ts`) - ✅ 订单列表页面 (`src/views/order/index.vue`) - ✅ 搜索、筛选、分页功能 - ✅ 订单详情、支付、取消、退款、删除操作 ### 后端实现 - ✅ 订单模型 (`app/common/model/Order.php`) - ✅ 订单详情模型 (`app/common/model/OrderDetail.php`) - ✅ 订单控制器 (`app/adminapi/controller/order/OrderController.php`) - ✅ 订单业务逻辑 (`app/adminapi/logic/order/OrderLogic.php`) - ✅ 订单验证规则 (`app/adminapi/validate/order/OrderValidate.php`) - ✅ 订单列表类 (`app/adminapi/lists/order/OrderLists.php`) - ✅ 数据库迁移文件 (`database/migrations/2024_03_10_create_order_tables.php`) ### 数据库 - ✅ 订单表 (`la_order`) - ✅ 订单详情表 (`la_order_detail`) - ✅ 所有必要的索引和约束 ### 文档 - ✅ 完整的系统指南 (`ORDER_SYSTEM_GUIDE.md`) - ✅ 快速安装指南 (`ORDER_SETUP.md`) - ✅ 表安装指南 (`INSTALL_ORDER_TABLES.md`) ## 🚀 快速开始 ### 第一步:创建数据库表 **方式一:直接执行 SQL(推荐)** 在数据库管理工具中执行 `admin/order.sql` 文件中的 SQL 语句。 **方式二:使用命令行** ```bash mysql -u root -p your_database < admin/order.sql ``` **方式三:使用 ThinkPHP 迁移** ```bash cd server php think migrate:run ``` ### 第二步:验证表创建 ```sql SHOW TABLES LIKE 'la_order%'; DESC la_order; DESC la_order_detail; ``` ### 第三步:添加权限节点 在后端权限管理系统中添加以下权限: ``` 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 - 导出订单 ``` ### 第四步:访问订单页面 在前端路由中添加订单页面,然后访问 `/order` 即可使用订单功能。 ## 📋 API 端点 所有 API 端点都遵循 RESTful 规范,使用 `/order.order/` 前缀: ``` GET /order.order/lists - 获取订单列表 GET /order.order/detail - 获取订单详情 POST /order.order/create - 创建订单 POST /order.order/edit - 编辑订单 POST /order.order/pay - 支付订单 POST /order.order/cancel - 取消订单 POST /order.order/refund - 退款订单 POST /order.order/delete - 删除订单 GET /order.order/export - 导出订单 ``` ## 🔑 关键特性 ### 1. 创建人追踪 - 自动记录创建订单的管理员 ID(推广 ID) - 支持查询特定创建人的订单 ### 2. 多种订单类型 - 挂号费 (type=1) - 问诊费 (type=2) - 药品费用 (type=3) ### 3. 订单状态管理 - 待支付 (status=1) - 已支付 (status=2) - 已取消 (status=3) - 已退款 (status=4) ### 4. 支付方式 - 支付宝 (alipay) - 微信 (wechat) - 银行卡 (bank) ### 5. 订单详情 - 支持多个订单项 - 关联挂号、问诊、药品等 - 记录单价和总价 ### 6. 数据安全 - 软删除支持 - 事务处理 - 唯一订单号 - 完整的验证规则 ## 📊 数据库表结构 ### la_order(订单表) ```sql CREATE TABLE `la_order` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `order_no` varchar(50) NOT NULL UNIQUE, `patient_id` int(11) NOT NULL, `creator_id` int(11) NOT NULL, `order_type` tinyint(1) NOT NULL, `amount` decimal(10, 2) NOT NULL, `status` tinyint(1) DEFAULT 1, `payment_method` varchar(20), `payment_time` datetime, `remark` varchar(500), `create_time` datetime DEFAULT CURRENT_TIMESTAMP, `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `delete_time` datetime, PRIMARY KEY (`id`), UNIQUE KEY `uk_order_no` (`order_no`), KEY `idx_patient` (`patient_id`), KEY `idx_creator` (`creator_id`), KEY `idx_status` (`status`), KEY `idx_create_time` (`create_time`) ); ``` ### la_order_detail(订单详情表) ```sql CREATE TABLE `la_order_detail` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `order_id` int(11) NOT NULL, `related_type` varchar(20) NOT NULL, `related_id` int(11) NOT NULL, `quantity` int(11) DEFAULT 1, `unit_price` decimal(10, 2) NOT NULL, `total_price` decimal(10, 2) NOT NULL, `create_time` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_order` (`order_id`), KEY `idx_related` (`related_type`, `related_id`) ); ``` ## 📁 文件清单 ### 前端文件 - `admin/src/api/order.ts` - API 接口 - `admin/src/views/order/index.vue` - 列表页面 ### 后端文件 - `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` - 列表类 ### 数据库文件 - `server/database/migrations/2024_03_10_create_order_tables.php` - 迁移文件 - `admin/order.sql` - SQL 脚本 ### 文档文件 - `admin/ORDER_SYSTEM_GUIDE.md` - 完整系统指南 - `admin/ORDER_SETUP.md` - 快速安装指南 - `admin/INSTALL_ORDER_TABLES.md` - 表安装指南 - `admin/ORDER_IMPLEMENTATION_COMPLETE.md` - 本文件 ## 🔧 使用示例 ### 创建订单 ```typescript import { orderCreate } from '@/api/order' const result = await orderCreate({ 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 } ] }) ``` ### 支付订单 ```typescript import { orderPay } from '@/api/order' const result = await orderPay({ id: 1, payment_method: 'alipay' }) ``` ### 获取订单列表 ```typescript import { orderLists } from '@/api/order' const result = await orderLists({ page_no: 1, page_size: 15, order_no: '', patient_keyword: '', order_type: 1, status: 1, create_time_start: '2024-03-01', create_time_end: '2024-03-31' }) ``` ## ⚠️ 注意事项 1. **表前缀**: 使用 `la_` 前缀,与项目其他表保持一致 2. **订单号**: 自动生成,格式为 `ORD + 时间戳 + 随机数` 3. **软删除**: 订单支持软删除,不会真正删除数据 4. **事务处理**: 创建订单时使用事务确保数据一致性 5. **权限验证**: 所有操作都需要相应的权限节点 ## 🐛 故障排除 ### 表不存在错误 **错误信息**: `Table 'zyt.order' doesn't exist` **解决方案**: 1. 确保已执行 SQL 脚本创建表 2. 检查表前缀是否正确(应该是 `la_order` 而不是 `zyt_order`) 3. 检查数据库连接配置 ### 控制器找不到 **错误信息**: `控制器不存在:\\app\\adminapi\\controller\\order\\OrderController` **解决方案**: 1. 确保文件在正确的目录:`server/app/adminapi/controller/order/` 2. 检查命名空间是否正确 3. 清除应用缓存 ### 权限不足 **错误信息**: `权限不足,无法访问或操作` **解决方案**: 1. 在权限管理系统中添加相应的权限节点 2. 确保用户被分配了正确的权限 3. 检查权限缓存 ## 📞 支持 如需帮助,请参考: - `ORDER_SYSTEM_GUIDE.md` - 完整的系统文档 - `INSTALL_ORDER_TABLES.md` - 表安装指南 - 项目的其他模块实现作为参考 ## ✨ 下一步建议 1. **支付集成**: 集成第三方支付接口(支付宝、微信等) 2. **订单统计**: 添加订单统计和报表功能 3. **自动对账**: 定期与支付平台对账 4. **订单提醒**: 支付超时提醒、订单状态变更通知 5. **发票管理**: 支持订单发票申请和管理 6. **退款流程**: 完善退款审核和处理流程 --- **实现日期**: 2024-03-10 **版本**: 1.0.0 **状态**: ✅ 完成