Merge branch 'feat-cjy-taskBench' into dev
This commit is contained in:
commit
2b60f44b85
@ -2,6 +2,7 @@ package dao
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
@ -40,36 +41,31 @@ func RunInitialTaskBalanceSync() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 获取当前有效(未过期且已支付)的艺人及其最新订单
|
||||
validArtists, err := GetValidArtistList()
|
||||
if err != nil {
|
||||
// 直接获取所有BundleBalance记录进行同步,不再依赖GetValidArtistList的严格过滤
|
||||
var bundleBalances []model.BundleBalance
|
||||
if err := app.ModuleClients.BundleDB.Find(&bundleBalances).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if len(validArtists) == 0 {
|
||||
|
||||
if len(bundleBalances) == 0 {
|
||||
_ = app.ModuleClients.TaskBenchDB.Create(&model.TaskSyncStatus{
|
||||
SyncKey: model.InitialSyncKey,
|
||||
ExecutedAt: time.Now(),
|
||||
Remark: "skipped: no valid artists",
|
||||
Remark: "skipped: no bundle_balance records found",
|
||||
}).Error
|
||||
return nil
|
||||
}
|
||||
|
||||
// 构造待插入的 TaskBalance 列表
|
||||
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
|
||||
}
|
||||
tasks := make([]model.TaskBalance, 0, len(bundleBalances))
|
||||
skippedCount := 0
|
||||
|
||||
for _, bb := range bundleBalances {
|
||||
subNum, telNum, err := fetchIdentityForBundle(&bb)
|
||||
if err != nil {
|
||||
// 无法获取身份信息则跳过该条
|
||||
// 无法获取身份信息则跳过该条,但记录跳过数量
|
||||
fmt.Println("跳过 BundleBalance ID:", bb.ID, "错误:", err)
|
||||
skippedCount++
|
||||
continue
|
||||
}
|
||||
|
||||
@ -100,10 +96,17 @@ 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: "initial sync executed",
|
||||
Remark: remark,
|
||||
}).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
@ -156,27 +159,33 @@ 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
|
||||
type userRow struct {
|
||||
Tel string `gorm:"column:tel_num"`
|
||||
}
|
||||
var ur userRow
|
||||
var telNum string
|
||||
if err := app.ModuleClients.BundleDB.Table("`micro-account`.`user`").Unscoped().
|
||||
Select("tel_num").Where("id = ?", bb.UserId).First(&ur).Error; err != nil {
|
||||
Select("tel_num").Where("id = ?", bb.UserId).Scan(&telNum).Error; err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
|
||||
// customer_num 来自 bundle_order_records(按 order_uuid)
|
||||
type orderRow struct {
|
||||
Customer string `gorm:"column:customer_num"`
|
||||
// 添加容错机制:如果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)
|
||||
}
|
||||
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
|
||||
return customerNum, telNum, nil
|
||||
}
|
||||
|
||||
// UpdateTaskBalance 每月批量更新任务余额
|
||||
@ -348,6 +357,11 @@ 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
|
||||
@ -373,6 +387,11 @@ 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
|
||||
@ -398,6 +417,15 @@ 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 {
|
||||
|
Loading…
Reference in New Issue
Block a user