package service import ( "errors" "gorm.io/gorm" "pure-admin/global" "pure-admin/model" "pure-admin/model/request" "strconv" ) func GetSysMissionRewardList(params request.SearchSysReward) (err error, list []model.SysMissionReward, total int64) { limit := params.PageSize offset := params.PageSize * (params.Page - 1) db := global.MG_DB.Model(&model.SysMissionReward{}) db.Count(&total) var res []model.SysMissionReward err = db.Order("id desc").Offset(offset).Limit(limit).Find(&res).Error if err != nil { return err, nil, 0 } return err, res, total } func SendSysMissionReward(uuid string, info request.IdReq) (err error) { var ( checkReward model.SysMissionReward checkMission model.MissionClaim checkVideo model.MissionClaimVideo ) err = global.MG_DB.Model(&model.SysMissionReward{}).Where("id = ?", info.ID).First(&checkReward).Error if errors.Is(err, gorm.ErrRecordNotFound) { return err } err = global.MG_DB.Model(&model.MissionClaimVideo{}).Where("id = ?", checkReward.RelationId).First(&checkVideo).Error if errors.Is(err, gorm.ErrRecordNotFound) { return err } err = global.MG_DB.Model(&model.MissionClaim{}).Where("id = ?", checkVideo.MissionClaimId).First(&checkMission).Error if errors.Is(err, gorm.ErrRecordNotFound) { return err } var bkbWallet model.Wallet err = global.MG_DB.Model(&model.Wallet{}).Where("platform = 'bkb' AND user_id = 'bkb'").First(&bkbWallet).Error if err != nil { return } tx := global.MG_DB.Begin() //修改任务状态 err = global.MG_DB.Model(&model.SysMissionReward{}).Where("id = ?", info.ID).Update("status", 3).Error if err != nil { tx.Rollback() err = errors.New("update mission reward status failed") return } // 扣除商家锁定营销账户 err = tx.Model(&model.Wallet{}).Where("id = ?", bkbWallet.ID).UpdateColumn("fund", gorm.Expr("fund - ?", checkReward.Bonus)).Error if err != nil { tx.Rollback() err = errors.New("settle seller wallet failed") return } var billFund model.BillFund billFund.UserID = "bkb" billFund.TransactionType = 1 billFund.TransactionId = "MB" + generate() // mission-bill billFund.Title = "" billFund.Price = checkReward.Bonus billFund.Balance = bkbWallet.Fund billFund.Platform = "seller" billFund.RelatedId = strconv.Itoa(int(checkReward.ID)) billFund.Status = 2 err = tx.Model(&model.BillFund{}).Create(&billFund).Error if err != nil { tx.Rollback() return } // 结算至网红钱包-余额 var influenceWallet model.Wallet err = tx.Model(&model.Wallet{}).Where("platform = 'influencer' AND user_id = ?", checkVideo.CreateBy). Updates(map[string]interface{}{"balance": gorm.Expr("balance + ?", checkReward.Bonus), "transit_balance": gorm.Expr("transit_balance - ?", checkReward.Bonus)}).First(&influenceWallet).Error if err != nil { tx.Rollback() err = errors.New("settle influencer wallet failed") return } // 创建任务结算账单 var bill model.Bill bill.UserID = checkVideo.CreateBy bill.Type = "1" bill.Title = "平台奖励发放-" + checkReward.Title bill.Price = checkReward.Bonus bill.Balance = influenceWallet.Balance bill.Status = 2 bill.Receipt = 1 bill.Platform = "influencer" err = tx.Model(&model.Bill{}).Create(&bill).Error if err != nil { tx.Rollback() err = errors.New("create influencer mission settle bill failed") return } tx.Commit() return err }