3.9 KiB
3.9 KiB
预约时间段Bug最终调试指南
问题确认
- 数据库中只有上午排班记录
- 但前端显示了上午和下午的时间段
- 测试脚本证明代码逻辑是正确的
调试步骤
步骤1: 确认数据库数据
SELECT id, doctor_id, date, period, status, quota,
HEX(period) as period_hex, -- 查看period的十六进制值
LENGTH(period) as period_length -- 查看period的长度
FROM zyt_doctor_roster
WHERE doctor_id = 1 AND date = '2026-03-06';
期望结果:
- 只有1条记录
- period = 'morning' 或 '上午' 或 1
- status = 1
如果有2条记录,说明数据有问题!
步骤2: 清除所有缓存
后端缓存
# 清除ThinkPHP缓存
rm -rf runtime/cache/*
rm -rf runtime/temp/*
前端缓存
- 浏览器按 Ctrl+Shift+Delete 清除缓存
- 或者按 Ctrl+Shift+R 强制刷新
- 或者打开开发者工具 -> Network -> 勾选 "Disable cache"
步骤3: 测试API并查看响应
使用浏览器测试
访问:
http://your-domain/adminapi/doctor.appointment/availableSlots?doctor_id=1&appointment_date=2026-03-06&period=all
使用curl测试
curl "http://your-domain/adminapi/doctor.appointment/availableSlots?doctor_id=1&appointment_date=2026-03-06&period=all"
检查返回的JSON:
{
"code": 1,
"data": {
"slots": [
{"time": "09:00", ...},
{"time": "09:15", ...},
...
{"time": "11:45", ...}
]
}
}
如果slots数组中有14:00之后的时间,说明后端返回了错误数据!
步骤4: 查看日志
查看文件:runtime/log/日期.log
搜索关键字:
该日期所有排班数据(包括非出诊)
日志应该显示:
该日期所有排班数据(包括非出诊): {
"count": 1, // 只有1条记录
"all_rosters": [
{
"id": 1,
"doctor_id": 1,
"date": "2026-03-06",
"period": "morning",
"status": 1,
...
}
]
}
然后搜索:
morning_slots
afternoon_slots
应该显示:
生成的时间段数量(去重后): {
"count": 12,
"morning_slots": 12,
"afternoon_slots": 0,
...
}
如果afternoon_slots > 0,说明代码生成了下午时段!
步骤5: 前端调试
在浏览器控制台查看:
// 应该会看到两行输出
时间段数据: {slots: Array(12)}
处理后的时间段: Array(12)
如果Array的长度大于12,说明返回了下午时段!
可能的原因和解决方案
原因1: 数据库中有多条记录
解决方案: 删除多余的记录
-- 查看所有记录
SELECT * FROM zyt_doctor_roster WHERE doctor_id = 1 AND date = '2026-03-06';
-- 如果有下午的记录且不需要,删除它
DELETE FROM zyt_doctor_roster
WHERE doctor_id = 1 AND date = '2026-03-06' AND period IN ('afternoon', '下午', '2');
原因2: period字段值异常
解决方案: 修正period字段
-- 检查period字段的实际值
SELECT DISTINCT period, HEX(period), LENGTH(period)
FROM zyt_doctor_roster;
-- 如果发现异常值,统一修正
UPDATE zyt_doctor_roster SET period = 'morning' WHERE period = '上午';
UPDATE zyt_doctor_roster SET period = 'afternoon' WHERE period = '下午';
原因3: 前端缓存
解决方案: 清除浏览器缓存,强制刷新
原因4: 代码被修改过
解决方案: 检查是否有其他人修改了代码,或者有其他版本的代码在运行
终极测试
运行测试脚本:
php test_slot_generation.php
应该输出:
✓ 测试通过!逻辑正确。
如果测试通过,说明代码逻辑没问题,问题在数据或缓存。
下一步
根据上述调试结果,确定问题所在:
- 如果是数据问题 -> 清理数据库
- 如果是缓存问题 -> 清除缓存
- 如果是代码问题 -> 检查代码版本
- 如果都不是 -> 提供日志和API响应,我们继续分析