peixue-dev/Archive/peidu-temp-files/sql/[一次性]诊断时卡不显示问题-2026-01-25.sql

126 lines
3.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ========================================
-- 诊断时卡在确认订单页面不显示的问题
-- 日期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;