154 lines
4.9 KiB
MySQL
154 lines
4.9 KiB
MySQL
|
|
-- 检查订单状态字段的定义和使用情况
|
|||
|
|
|
|||
|
|
-- ========================================
|
|||
|
|
-- 订单状态字段说明
|
|||
|
|
-- ========================================
|
|||
|
|
-- pay_status(支付状态):
|
|||
|
|
-- 0 = 未支付
|
|||
|
|
-- 1 = 已支付
|
|||
|
|
-- 2 = 已退款
|
|||
|
|
--
|
|||
|
|
-- status(订单状态):
|
|||
|
|
-- 0 = 待派单(已支付,等待管理师分配陪伴员)
|
|||
|
|
-- 1 = 已派单/待接单(已分配陪伴员,等待陪伴员接单)
|
|||
|
|
-- 2 = 待服务(陪伴员已接单,等待服务开始)
|
|||
|
|
-- 3 = 服务中(服务进行中)
|
|||
|
|
-- 4 = 已完成(服务已完成)
|
|||
|
|
-- 5 = 已取消(订单已取消)
|
|||
|
|
-- ========================================
|
|||
|
|
|
|||
|
|
-- 1. 查看 pay_status 和 status 的组合分布
|
|||
|
|
SELECT
|
|||
|
|
pay_status,
|
|||
|
|
CASE
|
|||
|
|
WHEN pay_status = 0 THEN '未支付'
|
|||
|
|
WHEN pay_status = 1 THEN '已支付'
|
|||
|
|
WHEN pay_status = 2 THEN '已退款'
|
|||
|
|
ELSE CONCAT('未知支付状态(', pay_status, ')')
|
|||
|
|
END as pay_status_name,
|
|||
|
|
status,
|
|||
|
|
CASE
|
|||
|
|
WHEN status = 0 THEN '待派单'
|
|||
|
|
WHEN status = 1 THEN '已派单/待接单'
|
|||
|
|
WHEN status = 2 THEN '待服务'
|
|||
|
|
WHEN status = 3 THEN '服务中'
|
|||
|
|
WHEN status = 4 THEN '已完成'
|
|||
|
|
WHEN status = 5 THEN '已取消'
|
|||
|
|
WHEN status = -1 THEN '未知状态(-1)'
|
|||
|
|
WHEN status IS NULL THEN 'NULL'
|
|||
|
|
ELSE CONCAT('未知订单状态(', status, ')')
|
|||
|
|
END as status_name,
|
|||
|
|
teacher_id IS NOT NULL as has_teacher,
|
|||
|
|
COUNT(*) as count,
|
|||
|
|
-- 检查是否合理
|
|||
|
|
CASE
|
|||
|
|
-- 未支付的订单应该是待派单或已取消
|
|||
|
|
WHEN pay_status = 0 AND status NOT IN (0, 5) THEN '❌ 异常:未支付但状态不是待派单或已取消'
|
|||
|
|
-- 已支付但未分配陪伴员应该是待派单
|
|||
|
|
WHEN pay_status = 1 AND teacher_id IS NULL AND status != 0 THEN '❌ 异常:已支付未派单但状态不是0'
|
|||
|
|
-- 已支付且已分配陪伴员应该是已派单或更后面的状态
|
|||
|
|
WHEN pay_status = 1 AND teacher_id IS NOT NULL AND status = 0 THEN '❌ 异常:已派单但状态还是待派单'
|
|||
|
|
ELSE '✅ 正常'
|
|||
|
|
END as check_result
|
|||
|
|
FROM `order`
|
|||
|
|
WHERE deleted = 0
|
|||
|
|
GROUP BY pay_status, status, has_teacher
|
|||
|
|
ORDER BY pay_status, status;
|
|||
|
|
|
|||
|
|
-- 2. 检查可能存在的状态冲突
|
|||
|
|
-- 情况1:已支付但未分配陪伴员,status不是0(应该是待派单)
|
|||
|
|
SELECT
|
|||
|
|
'已支付未派单但status不是0' as issue_type,
|
|||
|
|
COUNT(*) as count
|
|||
|
|
FROM `order`
|
|||
|
|
WHERE pay_status = 1
|
|||
|
|
AND teacher_id IS NULL
|
|||
|
|
AND status != 0
|
|||
|
|
AND deleted = 0;
|
|||
|
|
|
|||
|
|
-- 3. 列出具体的异常订单(已支付未派单但status不是0)
|
|||
|
|
SELECT
|
|||
|
|
id,
|
|||
|
|
order_no,
|
|||
|
|
pay_status,
|
|||
|
|
status,
|
|||
|
|
teacher_id,
|
|||
|
|
create_time,
|
|||
|
|
update_time,
|
|||
|
|
CASE
|
|||
|
|
WHEN status = 0 THEN '待派单'
|
|||
|
|
WHEN status = 1 THEN '已派单/待接单'
|
|||
|
|
WHEN status = 2 THEN '待服务'
|
|||
|
|
WHEN status = 3 THEN '服务中'
|
|||
|
|
WHEN status = 4 THEN '已完成'
|
|||
|
|
WHEN status = 5 THEN '已取消'
|
|||
|
|
ELSE CONCAT('未知(', status, ')')
|
|||
|
|
END as status_name
|
|||
|
|
FROM `order`
|
|||
|
|
WHERE pay_status = 1
|
|||
|
|
AND teacher_id IS NULL
|
|||
|
|
AND status != 0
|
|||
|
|
AND deleted = 0
|
|||
|
|
ORDER BY create_time DESC
|
|||
|
|
LIMIT 20;
|
|||
|
|
|
|||
|
|
-- 4. 检查另一种冲突:已分配陪伴员但status还是0
|
|||
|
|
SELECT
|
|||
|
|
'已派单但status还是0' as issue_type,
|
|||
|
|
COUNT(*) as count
|
|||
|
|
FROM `order`
|
|||
|
|
WHERE pay_status = 1
|
|||
|
|
AND teacher_id IS NOT NULL
|
|||
|
|
AND status = 0
|
|||
|
|
AND deleted = 0;
|
|||
|
|
|
|||
|
|
-- 5. 列出具体的异常订单(已派单但status还是0)
|
|||
|
|
SELECT
|
|||
|
|
id,
|
|||
|
|
order_no,
|
|||
|
|
pay_status,
|
|||
|
|
status,
|
|||
|
|
teacher_id,
|
|||
|
|
create_time,
|
|||
|
|
update_time
|
|||
|
|
FROM `order`
|
|||
|
|
WHERE pay_status = 1
|
|||
|
|
AND teacher_id IS NOT NULL
|
|||
|
|
AND status = 0
|
|||
|
|
AND deleted = 0
|
|||
|
|
ORDER BY create_time DESC
|
|||
|
|
LIMIT 20;
|
|||
|
|
|
|||
|
|
-- 6. 统计各种状态组合的数量
|
|||
|
|
SELECT
|
|||
|
|
CONCAT(
|
|||
|
|
'pay_status=', pay_status,
|
|||
|
|
', status=', IFNULL(status, 'NULL'),
|
|||
|
|
', teacher_id=', IF(teacher_id IS NULL, 'NULL', 'NOT NULL')
|
|||
|
|
) as state_combination,
|
|||
|
|
COUNT(*) as count,
|
|||
|
|
-- 判断是否合理
|
|||
|
|
CASE
|
|||
|
|
WHEN pay_status = 0 AND status = 0 AND teacher_id IS NULL THEN '✅ 未支付待派单'
|
|||
|
|
WHEN pay_status = 1 AND status = 0 AND teacher_id IS NULL THEN '✅ 已支付待派单'
|
|||
|
|
WHEN pay_status = 1 AND status = 1 AND teacher_id IS NOT NULL THEN '✅ 已派单待接单'
|
|||
|
|
WHEN pay_status = 1 AND status = 2 AND teacher_id IS NOT NULL THEN '✅ 待服务'
|
|||
|
|
WHEN pay_status = 1 AND status = 3 AND teacher_id IS NOT NULL THEN '✅ 服务中'
|
|||
|
|
WHEN pay_status = 1 AND status = 4 AND teacher_id IS NOT NULL THEN '✅ 已完成'
|
|||
|
|
WHEN pay_status = 1 AND status = 5 THEN '✅ 已取消'
|
|||
|
|
ELSE '❌ 异常状态组合'
|
|||
|
|
END as status_check
|
|||
|
|
FROM `order`
|
|||
|
|
WHERE deleted = 0
|
|||
|
|
GROUP BY pay_status, status, teacher_id IS NOT NULL
|
|||
|
|
ORDER BY count DESC;
|
|||
|
|
|
|||
|
|
-- 7. 查看所有不同的status值(包括异常值)
|
|||
|
|
SELECT DISTINCT
|
|||
|
|
status,
|
|||
|
|
COUNT(*) as count
|
|||
|
|
FROM `order`
|
|||
|
|
WHERE deleted = 0
|
|||
|
|
GROUP BY status
|
|||
|
|
ORDER BY status;
|