From b105936840bfc8ac2b40d37869cf69ef17b914f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com>
Date: Sun, 31 Aug 2025 01:14:49 +0800
Subject: [PATCH] =?UTF-8?q?fix(shop):=20=E4=BF=AE=E5=A4=8D=E8=AE=A2?=
=?UTF-8?q?=E5=8D=95=E6=94=AF=E4=BB=98=E7=8A=B6=E6=80=81=E9=94=99=E8=AF=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 修复 ShopOrderMapper.xml 中更新订单支付状态的错误
- 添加 SQL 脚本修复已存在的错误数据
- 更新订单支付状态为已付款(1)或未付款(0)- 验证修复结果并生成修复报告
---
.../shop/mapper/xml/ShopOrderMapper.xml | 2 +-
.../sql/fix_pay_status_102_error.sql | 133 ++++++++++++++++++
2 files changed, 134 insertions(+), 1 deletion(-)
create mode 100644 src/main/resources/sql/fix_pay_status_102_error.sql
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;