126 lines
3.9 KiB
SQL
126 lines
3.9 KiB
SQL
-- ========================================
|
||
-- 诊断时卡在确认订单页面不显示的问题
|
||
-- 日期:2026-01-25
|
||
-- ========================================
|
||
|
||
-- 1. 查看当前用户的所有时卡(不加任何过滤条件)
|
||
SELECT
|
||
id,
|
||
user_id,
|
||
card_no,
|
||
card_name,
|
||
status,
|
||
CASE status
|
||
WHEN 0 THEN '未激活'
|
||
WHEN 1 THEN '进行中'
|
||
WHEN 2 THEN '已完成'
|
||
WHEN 3 THEN '已过期'
|
||
ELSE '未知'
|
||
END AS status_name,
|
||
total_hours,
|
||
used_hours,
|
||
remaining_hours,
|
||
start_date,
|
||
expire_date,
|
||
CASE
|
||
WHEN expire_date IS NULL THEN '❌ 到期日期为空'
|
||
WHEN expire_date <= CURDATE() THEN '❌ 已过期'
|
||
WHEN expire_date > CURDATE() THEN '✅ 未过期'
|
||
END AS expire_status,
|
||
deleted,
|
||
create_time
|
||
FROM time_card
|
||
WHERE user_id = (SELECT id FROM user WHERE phone = '你的手机号' LIMIT 1) -- ⚠️ 请替换为实际手机号
|
||
ORDER BY create_time DESC;
|
||
|
||
-- 2. 检查时卡不符合"可用"条件的原因
|
||
SELECT
|
||
id,
|
||
card_name,
|
||
'检查项' AS check_item,
|
||
CASE
|
||
WHEN status != 1 THEN CONCAT('❌ 状态不是进行中,当前状态:', status)
|
||
ELSE '✅ 状态正常'
|
||
END AS status_check,
|
||
CASE
|
||
WHEN remaining_hours <= 0 THEN CONCAT('❌ 剩余时长不足,当前:', remaining_hours, '小时')
|
||
ELSE CONCAT('✅ 剩余时长充足:', remaining_hours, '小时')
|
||
END AS hours_check,
|
||
CASE
|
||
WHEN expire_date IS NULL THEN '❌ 到期日期为空'
|
||
WHEN expire_date <= CURDATE() THEN CONCAT('❌ 已过期,到期日期:', expire_date)
|
||
ELSE CONCAT('✅ 未过期,到期日期:', expire_date)
|
||
END AS expire_check,
|
||
CASE
|
||
WHEN deleted = 1 THEN '❌ 已删除'
|
||
ELSE '✅ 未删除'
|
||
END AS delete_check
|
||
FROM time_card
|
||
WHERE user_id = (SELECT id FROM user WHERE phone = '你的手机号' LIMIT 1) -- ⚠️ 请替换为实际手机号
|
||
ORDER BY create_time DESC;
|
||
|
||
-- 3. 模拟后端的getAvailableCards查询(完整条件)
|
||
SELECT
|
||
id,
|
||
card_no,
|
||
card_name,
|
||
status,
|
||
total_hours,
|
||
used_hours,
|
||
remaining_hours,
|
||
start_date,
|
||
expire_date,
|
||
create_time
|
||
FROM time_card
|
||
WHERE user_id = (SELECT id FROM user WHERE phone = '你的手机号' LIMIT 1) -- ⚠️ 请替换为实际手机号
|
||
AND status = 1 -- 必须是"进行中"状态
|
||
AND remaining_hours > 0 -- 剩余时长必须大于0
|
||
AND expire_date > CURDATE() -- 到期日期必须大于今天
|
||
AND deleted = 0
|
||
ORDER BY expire_date ASC;
|
||
|
||
-- 4. 查看当前数据库日期
|
||
SELECT
|
||
CURRENT_DATE AS current_date,
|
||
CURRENT_TIMESTAMP AS current_datetime;
|
||
|
||
-- 5. 如果第3步查询结果为空,执行修复SQL
|
||
-- ⚠️ 请根据第2步的检查结果,选择性执行以下修复语句
|
||
|
||
-- 修复1:如果status不是1,更新为进行中
|
||
-- UPDATE time_card
|
||
-- SET status = 1, update_time = NOW()
|
||
-- WHERE user_id = (SELECT id FROM user WHERE phone = '你的手机号' LIMIT 1)
|
||
-- AND status != 1
|
||
-- AND remaining_hours > 0
|
||
-- AND deleted = 0;
|
||
|
||
-- 修复2:如果expire_date为空或已过期,设置为1年后
|
||
-- UPDATE time_card
|
||
-- SET expire_date = DATE_ADD(CURDATE(), INTERVAL 1 YEAR), update_time = NOW()
|
||
-- WHERE user_id = (SELECT id FROM user WHERE phone = '你的手机号' LIMIT 1)
|
||
-- AND (expire_date IS NULL OR expire_date <= CURDATE())
|
||
-- AND deleted = 0;
|
||
|
||
-- 修复3:如果start_date为空,设置为今天
|
||
-- UPDATE time_card
|
||
-- SET start_date = CURDATE(), update_time = NOW()
|
||
-- WHERE user_id = (SELECT id FROM user WHERE phone = '你的手机号' LIMIT 1)
|
||
-- AND start_date IS NULL
|
||
-- AND deleted = 0;
|
||
|
||
-- 6. 验证修复后的结果
|
||
-- SELECT
|
||
-- id,
|
||
-- card_name,
|
||
-- status,
|
||
-- remaining_hours,
|
||
-- expire_date,
|
||
-- '修复后' AS note
|
||
-- FROM time_card
|
||
-- WHERE user_id = (SELECT id FROM user WHERE phone = '你的手机号' LIMIT 1)
|
||
-- AND status = 1
|
||
-- AND remaining_hours > 0
|
||
-- AND expire_date > CURDATE()
|
||
-- AND deleted = 0;
|