diff --git a/docs/sql/fix_online_insurance_pay_amount_20260725.sql b/docs/sql/fix_online_insurance_pay_amount_20260725.sql index ed455558c..1057d90dc 100644 --- a/docs/sql/fix_online_insurance_pay_amount_20260725.sql +++ b/docs/sql/fix_online_insurance_pay_amount_20260725.sql @@ -36,12 +36,14 @@ JOIN ( SELECT order_code, SUM(pay_amount) AS pay_record_sum FROM order_pay_record WHERE del_flag = '0' + AND create_time > '2026-07-25 00:00:00' GROUP BY order_code ) pr ON pr.order_code = o.order_code WHERE o.pay_mode IN ('4','5') -- 在线支付(微信/支付宝) AND o.pay_status = '1' -- 已支付 AND o.insurance_amount > 0 -- 有保险 AND ABS(o.pay_amount - pr.pay_record_sum) < 0.005 -- pay_amount == 明细汇总 => 含了保险(错误) + AND o.create_time > '2026-07-25 00:00:00' ORDER BY o.order_status, o.order_code; @@ -94,16 +96,16 @@ ON DUPLICATE KEY UPDATE backup_time = NOW(); -- ▸ 方案 B:矫正「全部」受影响订单(含已完成,仅让记录口径一致;已多退的保险无法追回) -- 如需按此执行,去掉下面这条的注释: --- UPDATE order_basic_info o --- JOIN ( --- SELECT order_code, SUM(pay_amount) AS pay_record_sum --- FROM order_pay_record WHERE del_flag = '0' GROUP BY order_code --- ) pr ON pr.order_code = o.order_code --- SET o.pay_amount = o.pay_amount - o.insurance_amount --- WHERE o.pay_mode IN ('4','5') --- AND o.pay_status = '1' --- AND o.insurance_amount > 0 --- AND ABS(o.pay_amount - pr.pay_record_sum) < 0.005; +UPDATE order_basic_info o +JOIN ( + SELECT order_code, SUM(pay_amount) AS pay_record_sum + FROM order_pay_record WHERE del_flag = '0' GROUP BY order_code +) pr ON pr.order_code = o.order_code +SET o.pay_amount = o.pay_amount - o.insurance_amount +WHERE o.pay_mode IN ('4','5') + AND o.pay_status = '1' + AND o.insurance_amount > 0 + AND ABS(o.pay_amount - pr.pay_record_sum) < 0.005; -- ---------------------------------------------------------------------------