You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.3 KiB
108 lines
3.3 KiB
9 months ago
|
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
|
||
|
}
|