chore: 清理敏感与开发文档,仅同步代码
- 永久忽略并从仓库移除 开发文档/ - 移除并忽略 .env 与小程序私有配置 - 同步小程序/管理端/API与脚本改动 Made-with: Cursor
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
@@ -69,10 +70,53 @@ func RunSyncOrders(ctx context.Context, days int) (synced, total int, err error)
|
||||
}
|
||||
tradeState, transactionID, totalFee, qerr := wechat.QueryOrderByOutTradeNo(ctx, o.OrderSN)
|
||||
if qerr != nil {
|
||||
// 微信返回「订单不存在」:说明该 out_trade_no 在微信侧已无效,直接将本地订单标记为关闭
|
||||
if strings.Contains(qerr.Error(), "ORDER_NOT_EXIST") {
|
||||
now := time.Now()
|
||||
if err := db.Model(&o).Updates(map[string]interface{}{
|
||||
"status": "closed",
|
||||
"updated_at": now,
|
||||
}).Error; err != nil {
|
||||
syncOrdersLogf("微信提示订单不存在,标记订单 %s 为关闭失败: %v", o.OrderSN, err)
|
||||
} else {
|
||||
syncOrdersLogf("微信提示订单不存在,已将本地订单标记为关闭: %s", o.OrderSN)
|
||||
}
|
||||
continue
|
||||
}
|
||||
syncOrdersLogf("查询订单 %s 失败: %v", o.OrderSN, qerr)
|
||||
continue
|
||||
}
|
||||
// 根据微信支付状态决定本地订单后续处理:
|
||||
// - SUCCESS:补齐漏单,发放权益
|
||||
// - NOTPAY/USERPAYING:在有效期内保持 created,超过一定时间自动标记为关闭
|
||||
// - 其他终态(CLOSED、REVOKED、PAYERROR 等):标记为关闭,避免无限轮询
|
||||
if tradeState != "SUCCESS" {
|
||||
// 对仍未支付的订单设置超时关闭(避免长时间轮询)
|
||||
if tradeState == "NOTPAY" || tradeState == "USERPAYING" {
|
||||
// 超过 30 分钟仍未支付,视为关闭
|
||||
if time.Since(o.CreatedAt) > 30*time.Minute {
|
||||
now := time.Now()
|
||||
if err := db.Model(&o).Updates(map[string]interface{}{
|
||||
"status": "closed",
|
||||
"updated_at": now,
|
||||
}).Error; err != nil {
|
||||
syncOrdersLogf("标记超时未支付订单 %s 为关闭失败: %v", o.OrderSN, err)
|
||||
} else {
|
||||
syncOrdersLogf("订单超时未支付,标记为关闭: %s", o.OrderSN)
|
||||
}
|
||||
}
|
||||
continue
|
||||
}
|
||||
// 其他非 SUCCESS 状态(如 CLOSED、REVOKED、PAYERROR 等),直接在本地标记为关闭
|
||||
now := time.Now()
|
||||
if err := db.Model(&o).Updates(map[string]interface{}{
|
||||
"status": "closed",
|
||||
"updated_at": now,
|
||||
}).Error; err != nil {
|
||||
syncOrdersLogf("标记订单 %s 为关闭状态失败(trade_state=%s): %v", o.OrderSN, tradeState, err)
|
||||
} else {
|
||||
syncOrdersLogf("订单在微信已为终态 %s,本地标记为关闭: %s", tradeState, o.OrderSN)
|
||||
}
|
||||
continue
|
||||
}
|
||||
// 微信已支付,本地未更新 → 补齐
|
||||
|
||||
Reference in New Issue
Block a user