mahjong_group/docs/1.0.0/历史需求/快速开始指南.md
2026-01-01 14:39:23 +08:00

6.7 KiB
Raw Blame History

预约系统按时段优化 - 快速开始指南

部署前检查清单

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.csProgram.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语句

解决

  1. 检查项目引用关系
  2. 确保所有新建的文件都已包含在项目中
  3. 添加必要的using语句

Q2: 运行时错误 "未注册服务"

原因:依赖注入配置缺失

解决 在Startup.cs中添加服务注册

services.AddScoped<ISQRoomPricingServices, SQRoomPricingServices>();
services.AddScoped<ISQRoomPricingRepository, SQRoomPricingRepository>();

Q3: 数据库脚本执行失败

原因:数据库版本不兼容或权限不足

解决

  1. 确认SQL Server版本建议2016+
  2. 确认数据库用户有CREATE TABLE权限
  3. 检查数据库名称是否正确

Q4: 接口返回500错误

可能原因

  1. 数据库迁移未完成
  2. 房间价格未配置
  3. 服务未正确注入

排查步骤

  1. 检查数据库是否有SQRoomPricing表
  2. 查询该表是否有数据
  3. 查看应用日志获取详细错误信息

Q5: 时段价格显示为0

原因:房间价格未配置或查询失败

解决

  1. 检查SQRoomPricing表是否有对应房间的价格配置
  2. 运行以下SQL查询
SELECT * FROM SQRoomPricing WHERE room_id = 1 AND is_active = 1
  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. 异常监控

关注以下异常:

  • 价格查询失败
  • 时段计算错误
  • 数据库连接超时
  • 并发预约冲突

后续维护

日常维护

  1. 价格调整:根据业务需求定期调整各时段价格
  2. 数据清理:定期清理过期的不可用时段配置
  3. 性能监控:监控接口响应时间和数据库查询性能
  4. 备份策略定期备份SQRoomPricing表数据

数据分析

定期分析以下数据:

  • 各时段预约热度
  • 房间利用率
  • 价格与预约量关系
  • 用户预约行为模式

功能扩展

根据需求可以添加:

  • 后台管理界面
  • 价格批量导入导出
  • 预约统计报表
  • 移动端适配

技术支持

文档资源

  • API接口文档API接口文档_预约时段优化.md
  • 需求文档需求文档.md
  • 开发总结开发完成总结.md

联系方式

问题反馈

遇到问题时,请提供:

  1. 错误信息或异常堆栈
  2. 复现步骤
  3. 环境信息(数据库版本、.NET版本等
  4. 相关日志

版本信息

  • 当前版本v2.0
  • 发布日期2025-12-06
  • 兼容性.NET 6.0+, SQL Server 2016+
  • 状态 生产就绪

祝部署顺利! 🎉