peixue-dev/Archive/peidu-temp-files/sql/🔍诊断预约与日历数据差异-2026-01-24.sql

239 lines
6.1 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-24
-- 问题: 预约页面显示62个待服务日历只显示6个
-- ============================================
-- SQL 1: 检查订单状态分布
-- ============================================
SELECT
status,
CASE status
WHEN 0 THEN '待支付'
WHEN 1 THEN '待服务'
WHEN 2 THEN '进行中'
WHEN 3 THEN '已完成'
WHEN 4 THEN '已取消'
ELSE '未知'
END AS status_text,
COUNT(*) AS count
FROM `order`
WHERE user_id = 1
AND deleted = 0
GROUP BY status
ORDER BY status;
-- ============================================
-- SQL 2: 检查待服务订单的日期分布
-- ============================================
SELECT
DATE_FORMAT(service_date, '%Y-%m') AS month,
COUNT(*) AS count,
GROUP_CONCAT(order_no ORDER BY service_date SEPARATOR ', ') AS order_nos
FROM `order`
WHERE user_id = 1
AND status = 1
AND deleted = 0
GROUP BY DATE_FORMAT(service_date, '%Y-%m')
ORDER BY month;
-- ============================================
-- SQL 3: 检查2026年1月的所有订单
-- ============================================
SELECT
id,
order_no,
status,
CASE status
WHEN 0 THEN '待支付'
WHEN 1 THEN '待服务'
WHEN 2 THEN '进行中'
WHEN 3 THEN '已完成'
WHEN 4 THEN '已取消'
ELSE '未知'
END AS status_text,
service_date,
time_slot,
service_name,
create_time
FROM `order`
WHERE user_id = 1
AND deleted = 0
AND service_date >= '2026-01-01'
AND service_date <= '2026-01-31'
ORDER BY service_date, time_slot;
-- ============================================
-- SQL 4: 模拟日历的查询条件
-- ============================================
SELECT
id,
order_no,
status,
CASE status
WHEN 0 THEN '待支付'
WHEN 1 THEN '待服务'
WHEN 2 THEN '进行中'
WHEN 3 THEN '已完成'
WHEN 4 THEN '已取消'
ELSE '未知'
END AS status_text,
service_date,
time_slot,
service_name
FROM `order`
WHERE user_id = 1
AND deleted = 0
AND status IN (1, 2, 3, 4) -- 日历的状态筛选条件
AND service_date >= '2026-01-01'
AND service_date <= '2026-01-31'
ORDER BY service_date, time_slot;
-- ============================================
-- SQL 5: 检查不在日历显示范围的订单
-- ============================================
SELECT
id,
order_no,
status,
CASE status
WHEN 0 THEN '待支付'
WHEN 1 THEN '待服务'
WHEN 2 THEN '进行中'
WHEN 3 THEN '已完成'
WHEN 4 THEN '已取消'
ELSE '未知'
END AS status_text,
service_date,
time_slot,
service_name,
CASE
WHEN status = 0 THEN '❌ 状态为待支付,日历不显示'
WHEN service_date IS NULL THEN '❌ 服务日期为空'
WHEN service_date < '2026-01-01' THEN '❌ 日期早于2026年1月'
WHEN service_date > '2026-01-31' THEN '❌ 日期晚于2026年1月'
ELSE '✅ 应该显示在日历上'
END AS display_reason
FROM `order`
WHERE user_id = 1
AND deleted = 0
AND status = 1 -- 只看待服务的订单
ORDER BY service_date;
-- ============================================
-- SQL 6: 统计待服务订单的详细分布
-- ============================================
SELECT
'总待服务订单' AS category,
COUNT(*) AS count
FROM `order`
WHERE user_id = 1
AND status = 1
AND deleted = 0
UNION ALL
SELECT
'1月份待服务订单' AS category,
COUNT(*) AS count
FROM `order`
WHERE user_id = 1
AND status = 1
AND deleted = 0
AND service_date >= '2026-01-01'
AND service_date <= '2026-01-31'
UNION ALL
SELECT
'其他月份待服务订单' AS category,
COUNT(*) AS count
FROM `order`
WHERE user_id = 1
AND status = 1
AND deleted = 0
AND (service_date < '2026-01-01' OR service_date > '2026-01-31')
UNION ALL
SELECT
'日期为空的待服务订单' AS category,
COUNT(*) AS count
FROM `order`
WHERE user_id = 1
AND status = 1
AND deleted = 0
AND service_date IS NULL;
-- ============================================
-- SQL 7: 查看所有待服务订单的详细信息
-- ============================================
SELECT
id,
order_no,
service_date,
time_slot,
service_name,
CASE
WHEN service_date IS NULL THEN '⚠️ 无日期'
WHEN service_date >= '2026-01-01' AND service_date <= '2026-01-31' THEN '✅ 1月'
WHEN service_date < '2026-01-01' THEN CONCAT('📅 ', DATE_FORMAT(service_date, '%Y年%m月'))
WHEN service_date > '2026-01-31' THEN CONCAT('📅 ', DATE_FORMAT(service_date, '%Y年%m月'))
END AS date_category,
create_time
FROM `order`
WHERE user_id = 1
AND status = 1
AND deleted = 0
ORDER BY
CASE
WHEN service_date IS NULL THEN 3
WHEN service_date >= '2026-01-01' AND service_date <= '2026-01-31' THEN 1
ELSE 2
END,
service_date;
-- ============================================
-- SQL 8: 检查预约页面的查询条件
-- ============================================
-- 预约页面可能使用的查询条件
SELECT
id,
order_no,
status,
CASE status
WHEN 0 THEN '待支付'
WHEN 1 THEN '待服务'
WHEN 2 THEN '进行中'
WHEN 3 THEN '已完成'
WHEN 4 THEN '已取消'
ELSE '未知'
END AS status_text,
service_date,
time_slot,
service_name,
create_time
FROM `order`
WHERE user_id = 1
AND deleted = 0
ORDER BY create_time DESC
LIMIT 100;
-- ============================================
-- 执行说明
-- ============================================
/*
1. 在Navicat中依次执行上面的SQL
2. 重点关注:
- SQL 1: 查看订单状态分布确认是否有62个待服务订单
- SQL 2: 查看待服务订单的月份分布
- SQL 4: 查看日历实际能查到多少订单
- SQL 6: 统计各类订单的数量
3. 根据结果判断:
- 如果62个订单分布在不同月份 → 需要添加月份切换功能
- 如果部分订单status=0 → 需要修改日历查询条件
- 如果service_date为空 → 需要修复数据
4. 将结果截图或复制,以便分析问题
*/