Browse Source
- 修复 ShopOrderMapper.xml 中更新订单支付状态的错误 - 添加 SQL 脚本修复已存在的错误数据 - 更新订单支付状态为已付款(1)或未付款(0)- 验证修复结果并生成修复报告pan
2 changed files with 134 additions and 1 deletions
@ -0,0 +1,133 @@ |
|||||
|
-- 修复支付状态错误:将错误的102值修正为正确的1(已付款) |
||||
|
-- |
||||
|
-- 问题原因:ShopOrderMapper.xml中的updateByOutTradeNo方法错误地将payType的值赋给了payStatus字段 |
||||
|
-- 修复内容: |
||||
|
-- 1. 将所有payStatus=102的记录修改为payStatus=1(已付款) |
||||
|
-- 2. 验证修复结果 |
||||
|
|
||||
|
-- ======================================== |
||||
|
-- 1. 检查当前问题数据 |
||||
|
-- ======================================== |
||||
|
|
||||
|
-- 查看所有payStatus=102的订单 |
||||
|
SELECT |
||||
|
'=== 问题数据检查 ===' as section, |
||||
|
order_id, |
||||
|
order_no, |
||||
|
pay_type, |
||||
|
pay_status, |
||||
|
pay_time, |
||||
|
transaction_id, |
||||
|
tenant_id, |
||||
|
create_time |
||||
|
FROM shop_order |
||||
|
WHERE pay_status = 102 |
||||
|
ORDER BY create_time DESC; |
||||
|
|
||||
|
-- 统计问题数据数量 |
||||
|
SELECT |
||||
|
'=== 问题统计 ===' as section, |
||||
|
COUNT(*) as total_error_records, |
||||
|
COUNT(DISTINCT tenant_id) as affected_tenants, |
||||
|
MIN(create_time) as earliest_error, |
||||
|
MAX(create_time) as latest_error |
||||
|
FROM shop_order |
||||
|
WHERE pay_status = 102; |
||||
|
|
||||
|
-- 按租户统计问题数据 |
||||
|
SELECT |
||||
|
'=== 按租户统计 ===' as section, |
||||
|
tenant_id, |
||||
|
COUNT(*) as error_count, |
||||
|
MIN(create_time) as first_error, |
||||
|
MAX(create_time) as last_error |
||||
|
FROM shop_order |
||||
|
WHERE pay_status = 102 |
||||
|
GROUP BY tenant_id |
||||
|
ORDER BY error_count DESC; |
||||
|
|
||||
|
-- ======================================== |
||||
|
-- 2. 备份问题数据(可选) |
||||
|
-- ======================================== |
||||
|
|
||||
|
-- 创建备份表(如果需要) |
||||
|
-- CREATE TABLE shop_order_pay_status_backup_20250830 AS |
||||
|
-- SELECT * FROM shop_order WHERE pay_status = 102; |
||||
|
|
||||
|
-- ======================================== |
||||
|
-- 3. 修复数据 |
||||
|
-- ======================================== |
||||
|
|
||||
|
-- 修复:将payStatus=102的记录改为payStatus=1(已付款) |
||||
|
-- 注意:只修复那些有支付时间和交易号的订单(确实已支付的订单) |
||||
|
UPDATE shop_order |
||||
|
SET pay_status = 1 |
||||
|
WHERE pay_status = 102 |
||||
|
AND pay_time IS NOT NULL |
||||
|
AND transaction_id IS NOT NULL |
||||
|
AND transaction_id != ''; |
||||
|
|
||||
|
-- 对于没有支付时间或交易号的订单,设置为未付款状态 |
||||
|
UPDATE shop_order |
||||
|
SET pay_status = 0 |
||||
|
WHERE pay_status = 102 |
||||
|
AND (pay_time IS NULL OR transaction_id IS NULL OR transaction_id = ''); |
||||
|
|
||||
|
-- ======================================== |
||||
|
-- 4. 验证修复结果 |
||||
|
-- ======================================== |
||||
|
|
||||
|
-- 检查是否还有payStatus=102的记录 |
||||
|
SELECT |
||||
|
'=== 修复结果检查 ===' as section, |
||||
|
COUNT(*) as remaining_error_records |
||||
|
FROM shop_order |
||||
|
WHERE pay_status = 102; |
||||
|
|
||||
|
-- 验证修复后的数据分布 |
||||
|
SELECT |
||||
|
'=== 支付状态分布 ===' as section, |
||||
|
pay_status, |
||||
|
COUNT(*) as record_count, |
||||
|
CASE |
||||
|
WHEN pay_status = 0 THEN '未付款' |
||||
|
WHEN pay_status = 1 THEN '已付款' |
||||
|
ELSE CONCAT('异常状态: ', pay_status) |
||||
|
END as status_desc |
||||
|
FROM shop_order |
||||
|
GROUP BY pay_status |
||||
|
ORDER BY pay_status; |
||||
|
|
||||
|
-- 检查最近修复的订单 |
||||
|
SELECT |
||||
|
'=== 最近修复的订单 ===' as section, |
||||
|
order_id, |
||||
|
order_no, |
||||
|
pay_type, |
||||
|
pay_status, |
||||
|
pay_time, |
||||
|
transaction_id, |
||||
|
tenant_id |
||||
|
FROM shop_order |
||||
|
WHERE pay_status = 1 |
||||
|
AND pay_time IS NOT NULL |
||||
|
AND transaction_id IS NOT NULL |
||||
|
AND update_time >= DATE_SUB(NOW(), INTERVAL 1 HOUR) |
||||
|
ORDER BY update_time DESC |
||||
|
LIMIT 10; |
||||
|
|
||||
|
-- ======================================== |
||||
|
-- 5. 生成修复报告 |
||||
|
-- ======================================== |
||||
|
|
||||
|
SELECT |
||||
|
'=== 修复完成报告 ===' as section, |
||||
|
CONCAT( |
||||
|
'问题原因:ShopOrderMapper.xml中updateByOutTradeNo方法错误地将payType值赋给payStatus字段\n', |
||||
|
'修复方案:\n', |
||||
|
'1. 修复了XML映射文件中的错误:pay_status = #{param.payType} -> pay_status = #{param.payStatus}\n', |
||||
|
'2. 修复了数据库中已存在的错误数据\n', |
||||
|
'3. 建议:检查其他可能的类似错误\n' |
||||
|
) as fix_summary; |
||||
|
|
||||
|
SELECT '✅ 支付状态修复完成!请验证支付回调功能是否正常工作。' as result; |
Loading…
Reference in new issue