6.7 KiB
6.7 KiB
预约系统按时段优化 - 快速开始指南
部署前检查清单
✅ 1. 数据库准备
- 备份现有数据库
- 检查数据库连接字符串配置
- 确认SQL Server版本兼容性
✅ 2. 代码检查
- 确认所有新文件都已添加到项目中
- 检查项目引用是否正确
- 确保代码可以编译通过
✅ 3. 依赖注入配置
- 检查Startup.cs或Program.cs中的服务注册
快速部署步骤
步骤1:执行数据库迁移
# 1. 打开 SQL Server Management Studio
# 2. 连接到您的数据库
# 3. 打开脚本文件:数据库/SqlServer/更新脚本_预约时段优化.sql
# 4. 修改第15行的数据库名称为实际数据库名
# 5. 执行整个脚本
重要提示:
- 脚本执行前会检查表和字段是否已存在
- 首次执行会自动为现有房间创建默认价格配置
- 标准价 = 原price_per_hour × 6,会员价 = 标准价 × 0.8
步骤2:添加服务注册
在 Startup.cs 或 Program.cs 的服务配置部分添加:
// 注册新的服务
services.AddScoped<ISQRoomPricingRepository, SQRoomPricingRepository>();
services.AddScoped<ISQRoomPricingServices, SQRoomPricingServices>();
步骤3:编译并发布
# 编译项目
dotnet build
# 发布项目
dotnet publish -c Release
步骤4:测试验证
使用Postman或Swagger测试以下接口:
4.1 测试获取日期列表
GET http://your-domain/api/SQ/GetAvailableDates
预期响应:返回未来8天的日期列表
4.2 测试获取房间列表
GET http://your-domain/api/SQ/GetRoomListWithSlotsNew?date=1733443200
预期响应:返回房间列表,每个房间包含4个时段的状态和价格
4.3 测试创建预约(需要登录)
POST http://your-domain/api/SQ/AddSQReservationBySlot
Content-Type: application/json
Authorization: Bearer {your_token}
{
"room_id": 1,
"date": 1733443200,
"time_slot_type": 1,
"player_count": 4,
"deposit_fee": 20,
"title": "测试预约",
"game_type": "德州扑克",
"is_solo_mode": false
}
预期响应:返回预约ID和时间信息
常见问题排查
Q1: 编译错误 "找不到类型或命名空间"
原因:缺少项目引用或using语句
解决:
- 检查项目引用关系
- 确保所有新建的文件都已包含在项目中
- 添加必要的using语句
Q2: 运行时错误 "未注册服务"
原因:依赖注入配置缺失
解决: 在Startup.cs中添加服务注册:
services.AddScoped<ISQRoomPricingServices, SQRoomPricingServices>();
services.AddScoped<ISQRoomPricingRepository, SQRoomPricingRepository>();
Q3: 数据库脚本执行失败
原因:数据库版本不兼容或权限不足
解决:
- 确认SQL Server版本(建议2016+)
- 确认数据库用户有CREATE TABLE权限
- 检查数据库名称是否正确
Q4: 接口返回500错误
可能原因:
- 数据库迁移未完成
- 房间价格未配置
- 服务未正确注入
排查步骤:
- 检查数据库是否有SQRoomPricing表
- 查询该表是否有数据
- 查看应用日志获取详细错误信息
Q5: 时段价格显示为0
原因:房间价格未配置或查询失败
解决:
- 检查SQRoomPricing表是否有对应房间的价格配置
- 运行以下SQL查询:
SELECT * FROM SQRoomPricing WHERE room_id = 1 AND is_active = 1
- 如果没有数据,手动插入或重新运行迁移脚本的初始化部分
功能验证清单
基础功能
- 可以获取未来7天日期列表
- 可以查看房间列表及4个时段状态
- 可以查看房间详情
- 可以获取营业时间配置
预约功能
- 可以按时段创建预约
- 创建预约时正确计算价格
- 无需组局模式正常工作
- 时间冲突检测正常工作
- 不能加入独享模式预约
房间状态
- 可预约时段显示为绿色/available
- 已预约时段显示为红色/reserved
- 不可用时段显示为灰色/unavailable
- 使用中时段显示正确
价格功能
- 各时段价格正确显示
- 标准价格和会员价格都有显示
- 创建预约时记录actual_price
性能优化建议
1. 数据库索引
已自动创建的索引:
- SQRoomPricing表:room_id + time_slot_type
- SQRoomPricing表:effective_date_start + effective_date_end
如需进一步优化,可添加:
-- SQReservations表时段类型索引
CREATE INDEX IX_SQReservations_TimeSlot
ON SQReservations(time_slot_type, status, start_time);
-- SQRoomUnavailableTimes表时段类型索引
CREATE INDEX IX_SQRoomUnavailableTimes_TimeSlot
ON SQRoomUnavailableTimes(room_id, time_slot_type);
2. 缓存策略
考虑对以下数据使用缓存:
- 房间列表(已实现Redis缓存)
- 房间价格配置(可缓存1小时)
- 营业时间配置(可缓存到应用重启)
3. 查询优化
- 批量查询房间价格而不是逐个查询
- 使用分页查询历史预约记录
- 定期清理已结束的旧预约数据
监控建议
1. 关键指标
- API响应时间(建议<500ms)
- 预约创建成功率
- 时段预约分布
- 价格查询命中率
2. 日志记录
建议记录以下事件:
- 预约创建/取消
- 价格配置变更
- 不可用时段设置
- 时间冲突检测触发
3. 异常监控
关注以下异常:
- 价格查询失败
- 时段计算错误
- 数据库连接超时
- 并发预约冲突
后续维护
日常维护
- 价格调整:根据业务需求定期调整各时段价格
- 数据清理:定期清理过期的不可用时段配置
- 性能监控:监控接口响应时间和数据库查询性能
- 备份策略:定期备份SQRoomPricing表数据
数据分析
定期分析以下数据:
- 各时段预约热度
- 房间利用率
- 价格与预约量关系
- 用户预约行为模式
功能扩展
根据需求可以添加:
- 后台管理界面
- 价格批量导入导出
- 预约统计报表
- 移动端适配
技术支持
文档资源
- API接口文档:
API接口文档_预约时段优化.md - 需求文档:
需求文档.md - 开发总结:
开发完成总结.md
联系方式
- 邮箱:jianweie@163.com
- 项目主页:https://www.corecms.net
问题反馈
遇到问题时,请提供:
- 错误信息或异常堆栈
- 复现步骤
- 环境信息(数据库版本、.NET版本等)
- 相关日志
版本信息
- 当前版本:v2.0
- 发布日期:2025-12-06
- 兼容性:.NET 6.0+, SQL Server 2016+
- 状态:✅ 生产就绪
祝部署顺利! 🎉