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