diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml index f126855..ab5f7c4 100644 --- a/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml @@ -286,7 +286,7 @@ pay_type = #{param.payType}, - pay_status = #{param.payType}, + pay_status = #{param.payStatus}, order_status = #{param.orderStatus}, diff --git a/src/main/resources/sql/fix_pay_status_102_error.sql b/src/main/resources/sql/fix_pay_status_102_error.sql new file mode 100644 index 0000000..5d9b297 --- /dev/null +++ b/src/main/resources/sql/fix_pay_status_102_error.sql @@ -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;