chore: 清理敏感与开发文档,仅同步代码

- 永久忽略并从仓库移除 开发文档/
- 移除并忽略 .env 与小程序私有配置
- 同步小程序/管理端/API与脚本改动

Made-with: Cursor
This commit is contained in:
卡若
2026-03-17 17:50:12 +08:00
parent 868b0a10d9
commit 76965adb23
443 changed files with 24175 additions and 64154 deletions

View File

@@ -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
}
// 微信已支付,本地未更新 → 补齐