Compare commits

..

No commits in common. "2b60f44b85854f67fa020922ce443812cb9a92af" and "58e429ad0c1d40bca97650d5a4f959970875e745" have entirely different histories.

View File

@ -2,7 +2,6 @@ package dao
import (
"errors"
"fmt"
"time"
"gorm.io/gorm"
@ -41,31 +40,36 @@ func RunInitialTaskBalanceSync() error {
return nil
}
// 直接获取所有BundleBalance记录进行同步不再依赖GetValidArtistList的严格过滤
var bundleBalances []model.BundleBalance
if err := app.ModuleClients.BundleDB.Find(&bundleBalances).Error; err != nil {
// 获取当前有效(未过期且已支付)的艺人及其最新订单
validArtists, err := GetValidArtistList()
if err != nil {
return err
}
if len(bundleBalances) == 0 {
if len(validArtists) == 0 {
_ = app.ModuleClients.TaskBenchDB.Create(&model.TaskSyncStatus{
SyncKey: model.InitialSyncKey,
ExecutedAt: time.Now(),
Remark: "skipped: no bundle_balance records found",
Remark: "skipped: no valid artists",
}).Error
return nil
}
// 构造待插入的 TaskBalance 列表
tasks := make([]model.TaskBalance, 0, len(bundleBalances))
skippedCount := 0
tasks := make([]model.TaskBalance, 0, len(validArtists))
for _, a := range validArtists {
// 根据 user_id + order_uuid 获取 BundleBalance 明细
var bb model.BundleBalance
if err := app.ModuleClients.BundleDB.Where("user_id = ? AND order_uuid = ?", a.UserID, a.OrderUUID).First(&bb).Error; err != nil {
// 若未查到则跳过该条
if err == gorm.ErrRecordNotFound {
continue
}
return err
}
for _, bb := range bundleBalances {
subNum, telNum, err := fetchIdentityForBundle(&bb)
if err != nil {
// 无法获取身份信息则跳过该条,但记录跳过数量
fmt.Println("跳过 BundleBalance ID:", bb.ID, "错误:", err)
skippedCount++
// 无法获取身份信息则跳过该条
continue
}
@ -96,17 +100,10 @@ func RunInitialTaskBalanceSync() error {
return err
}
}
// 记录同步结果
remark := "initial sync executed"
if skippedCount > 0 {
remark = fmt.Sprintf("initial sync executed with %d records skipped due to missing identity info", skippedCount)
}
if err := tx.Create(&model.TaskSyncStatus{
SyncKey: model.InitialSyncKey,
ExecutedAt: time.Now(),
Remark: remark,
Remark: "initial sync executed",
}).Error; err != nil {
tx.Rollback()
return err
@ -159,33 +156,27 @@ func SyncTaskBalanceFromBundleBalance(bb model.BundleBalance) error {
// fetchIdentityForBundle 根据 BundleBalance 拿到 sub_num 与 tel_num
func fetchIdentityForBundle(bb *model.BundleBalance) (string, string, error) {
// tel_num 来自 micro-account.user
var telNum string
type userRow struct {
Tel string `gorm:"column:tel_num"`
}
var ur userRow
if err := app.ModuleClients.BundleDB.Table("`micro-account`.`user`").Unscoped().
Select("tel_num").Where("id = ?", bb.UserId).Scan(&telNum).Error; err != nil {
Select("tel_num").Where("id = ?", bb.UserId).First(&ur).Error; err != nil {
return "", "", err
}
// customer_num 来自 bundle_order_records按 order_uuid
// 添加容错机制如果order_uuid为空或查询失败使用user_id作为备用方案
var customerNum string
if bb.OrderUUID != "" {
type orderRow struct {
Customer string `gorm:"column:customer_num"`
}
var or orderRow
if err := app.ModuleClients.BundleDB.Table("bundle_order_records").
Select("customer_num").Where("uuid = ?", bb.OrderUUID).First(&or).Error; err != nil {
// 如果查询失败如记录不存在使用user_id作为备用customer_num
customerNum = fmt.Sprintf("user_%d", bb.UserId)
} else {
customerNum = or.Customer
}
} else {
// 如果order_uuid为空使用user_id作为备用customer_num
customerNum = fmt.Sprintf("user_%d", bb.UserId)
type orderRow struct {
Customer string `gorm:"column:customer_num"`
}
return customerNum, telNum, nil
var or orderRow
if bb.OrderUUID == "" {
return "", "", errors.New("bundle order_uuid missing")
}
if err := app.ModuleClients.BundleDB.Table("bundle_order_records").
Select("customer_num").Where("uuid = ?", bb.OrderUUID).First(&or).Error; err != nil {
return "", "", err
}
return or.Customer, ur.Tel, nil
}
// UpdateTaskBalance 每月批量更新任务余额
@ -357,11 +348,6 @@ func copyBundleToTaskBalance(tb *model.TaskBalance, bb *model.BundleBalance) {
tb.TaskMonthlyBundleVideoConsumptionNumber = bb.MonthlyBundleVideoConsumptionNumber
tb.TaskMonthlyIncreaseVideoConsumptionNumber = bb.MonthlyIncreaseVideoConsumptionNumber
tb.TaskMonthlyLimitVideoQuotaNumber = bb.MonthlyLimitVideoQuotaNumber
// 手动扩展(视频)
tb.TaskManualVideoNumber = bb.ManualVideoNumber
tb.TaskManualVideoConsumptionNumber = bb.ManualVideoConsumptionNumber
tb.TaskMonthlyNewManualVideoNumber = bb.MonthlyNewManualVideoNumber
tb.TaskMonthlyManualVideoConsumptionNumber = bb.MonthlyManualVideoConsumptionNumber
// ===== 图片类 =====
tb.TaskBundleImageNumber = bb.BundleImageNumber
@ -387,11 +373,6 @@ func copyBundleToTaskBalance(tb *model.TaskBalance, bb *model.BundleBalance) {
tb.TaskMonthlyBundleImageConsumptionNumber = bb.MonthlyBundleImageConsumptionNumber
tb.TaskMonthlyIncreaseImageConsumptionNumber = bb.MonthlyIncreaseImageConsumptionNumber
tb.TaskMonthlyLimitImageQuotaNumber = bb.MonthlyLimitImageQuotaNumber
// 手动扩展(图片)
tb.TaskManualImageNumber = bb.ManualImageNumber
tb.TaskManualImageConsumptionNumber = bb.ManualImageConsumptionNumber
tb.TaskMonthlyNewManualImageNumber = bb.MonthlyNewManualImageNumber
tb.TaskMonthlyManualImageConsumptionNumber = bb.MonthlyManualImageConsumptionNumber
// ===== 数据分析类 =====
tb.TaskBundleDataAnalysisNumber = bb.BundleDataAnalysisNumber
@ -417,15 +398,6 @@ func copyBundleToTaskBalance(tb *model.TaskBalance, bb *model.BundleBalance) {
tb.TaskMonthlyBundleDataAnalysisConsumptionNumber = bb.MonthlyBundleDataAnalysisConsumptionNumber
tb.TaskMonthlyIncreaseDataAnalysisConsumptionNumber = bb.MonthlyIncreaseDataAnalysisConsumptionNumber
tb.TaskMonthlyLimitDataAnalysisQuotaNumber = bb.MonthlyLimitDataAnalysisQuotaNumber
// 手动扩展(数据分析)
tb.TaskManualDataAnalysisNumber = bb.ManualDataAnalysisNumber
tb.TaskManualDataAnalysisConsumptionNumber = bb.ManualDataAnalysisConsumptionNumber
tb.TaskMonthlyNewManualDataAnalysisNumber = bb.MonthlyNewManualDataAnalysisNumber
tb.TaskMonthlyManualDataAnalysisConsumptionNumber = bb.MonthlyManualDataAnalysisConsumptionNumber
// 其他字段
tb.TaskMonthlyNewDurationNumber = bb.MonthlyNewDurationNumber
tb.TaskExpansionPacksNumber = bb.ExpansionPacksNumber
}
func ExtendTaskBalanceByUserId(userId int, imageNumber int, dataAnalysisNumber int, videoNumber int, durationNumber int) error {