diff --git a/pkg/cron/task.go b/pkg/cron/task.go index 2016199..14c98c8 100644 --- a/pkg/cron/task.go +++ b/pkg/cron/task.go @@ -5,12 +5,16 @@ import ( "encoding/json" "errors" "fmt" + "fonchain-fiee/api/bundle" "fonchain-fiee/api/cast" "fonchain-fiee/pkg/cache" + bundleModel "fonchain-fiee/pkg/model/bundle" modelCast "fonchain-fiee/pkg/model/cast" "fonchain-fiee/pkg/service" serverCast "fonchain-fiee/pkg/service/cast" "log" + "math/rand" + "strconv" "time" "github.com/go-redis/redis" @@ -34,6 +38,9 @@ func InitTasks() error { // 启动队列消费者 go WorkPublishQueueConsumer() + // 启动随机间隔的自动确认任务 + go AutoManuallyConfirmWorkTaskWithRandomInterval() + return nil } @@ -69,6 +76,123 @@ func RefreshWorkAnalysisApprovalStatusTask() { serverCast.RefreshWorkAnalysisApproval(nil, resp.Data) } +// AutoManuallyConfirmWorkTaskWithRandomInterval 以随机间隔(3-7分钟)执行自动确认任务 +func AutoManuallyConfirmWorkTaskWithRandomInterval() { + + for { + // 执行任务 + AutoManuallyConfirmWorkTask() + + // 生成3-7分钟之间的随机间隔(单位:分钟) + randomMinutes := rand.Intn(5) + 3 // 3-7分钟 + randomDuration := time.Duration(randomMinutes) * time.Minute + + // 等待随机时间 + time.Sleep(randomDuration) + } +} +func AutoManuallyConfirmWorkTask() { + var req bundle.GetWaitConfirmWorkListReq + res, err := service.BundleProvider.GetWaitConfirmWorkList(context.Background(), &req) + if err != nil { + zap.L().Error("获取待确认作品列表失败", zap.Error(err)) + return + } + if res.Data == nil || len(res.Data) == 0 { + return + } + for _, work := range res.Data { + var req bundleModel.UserWorkConfirmReq + req.WorkUuid = work.WorkUuid + req.ConfirmStatus = 1 + artistId, err := strconv.ParseInt(work.ArtistUuid, 10, 64) + if err != nil { + zap.L().Error("解析艺术家ID失败", zap.Error(err)) + return + } + if req.ConfirmStatus == 2 { // 驳回完直接结束 + _, err := service.CastProvider.UpdateStatus(context.Background(), &cast.UpdateStatusReq{ + WorkAction: cast.WorkActionENUM_CONFIRM, + WorkUuid: req.WorkUuid, + ConfirmRemark: req.ConfirmRemark, + ConfirmStatus: 2, + }) + if err != nil { + zap.L().Error("确认作品失败", zap.Error(err)) + return + } + continue + } + + balanceInfoRes, err := service.BundleProvider.GetBundleBalanceByUserId(context.Background(), &bundle.GetBundleBalanceByUserIdReq{ + UserId: int32(artistId), + }) + if err != nil { + continue + } + + wordInfoRes, err := service.CastProvider.WorkDetail(context.Background(), &cast.WorkDetailReq{ + WorkUuid: req.WorkUuid, + }) + if err != nil { + continue + } + if wordInfoRes.WorkStatus != 4 { + continue + } + var workCategory = wordInfoRes.WorkCategory + + var addBalanceReq bundle.AddBundleBalanceReq + addBalanceReq.UserId = int32(artistId) + switch workCategory { + case 1: + { + if balanceInfoRes.ImageConsumptionNumber >= balanceInfoRes.ImageNumber { // 图文余量不足 + _, err = service.CastProvider.UpdateStatus(context.Background(), &cast.UpdateStatusReq{ + WorkAction: cast.WorkActionENUM_CONFIRM, + WorkUuid: req.WorkUuid, + ConfirmRemark: req.ConfirmRemark, + ConfirmStatus: 3, + }) + continue + } + addBalanceReq.ImageConsumptionNumber = 1 + } + case 2: + { + if balanceInfoRes.VideoConsumptionNumber >= balanceInfoRes.VideoNumber { // 视频余量不足 + _, err = service.CastProvider.UpdateStatus(context.Background(), &cast.UpdateStatusReq{ + WorkAction: cast.WorkActionENUM_CONFIRM, + WorkUuid: req.WorkUuid, + ConfirmRemark: req.ConfirmRemark, + ConfirmStatus: 3, + }) + continue + } + addBalanceReq.VideoConsumptionNumber = 1 + } + default: + continue + } + resp, err := service.BundleProvider.AddBundleBalance(context.Background(), &addBalanceReq) + if err != nil { + zap.L().Error("扣除余额失败,作品uuid:"+req.WorkUuid, zap.Error(err)) + continue + } + _, err = service.CastProvider.UpdateStatus(context.Background(), &cast.UpdateStatusReq{ + WorkAction: cast.WorkActionENUM_CONFIRM, + WorkUuid: req.WorkUuid, + ConfirmRemark: req.ConfirmRemark, + CostType: resp.UsedType, + ConfirmStatus: 1, + }) + if err != nil { + zap.L().Error("更新作品状态失败,作品uuid:"+req.WorkUuid, zap.Error(err)) + return + } + } +} + func ArtistAutoConfirmTask() { now := float64(time.Now().Unix()) opt := redis.ZRangeBy{