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.

133 lines
4.1 KiB

package service
import (
"errors"
"fmt"
"gorm.io/gorm"
"pure/global"
"pure/model"
"pure/model/request"
"pure/model/response"
)
func AddSysMissionReward(params request.AddSysMissionReward, tx *gorm.DB) error {
switch params.Type {
case 1:
//上传视频
var (
rewardData, checkReward model.SysMissionReward
bonusMap map[int64]float64
err error
bonus float64
)
bonusMap = map[int64]float64{
1: 0.5,
3: 1.0,
5: 2.0,
}
if _, ok := bonusMap[params.AchieveNum]; !ok {
return err
}
bonus = bonusMap[params.AchieveNum]
err = tx.Model(&model.SysMissionReward{}).
Where("create_by = ? and achieve_num = ? and type = ?", params.CreateBy, params.AchieveNum, params.Type).
First(&checkReward).Error
if checkReward.ID > 0 {
return errors.New("不能重复提交")
}
rewardData = model.SysMissionReward{
Title: fmt.Sprintf("上传%d次带货视频", params.AchieveNum),
Type: params.Type,
RelationId: params.RelationId,
Bonus: bonus,
Status: 1, //待发放
AchieveNum: params.AchieveNum,
CreateBy: params.CreateBy,
}
err = tx.Model(&model.SysMissionReward{}).Create(&rewardData).Error
if err != nil {
return errors.New("提交失败")
}
case 2:
//信息完善
return nil
case 3:
//商家任务
return nil
}
return nil
}
func GetSysMissionRewardList(params request.SearchSysReward, uuid string) (err error, list []model.SysMissionReward, total int64) {
limit := params.PageSize
offset := params.PageSize * (params.Page - 1)
db := global.MG_DB.Model(&model.SysMissionReward{}).
Where("create_by = ?", uuid)
if params.Status != 0 {
db = db.Where("status = ?", params.Status)
}
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 GetSysRewardSummary(uuid string, params request.SearchSysRewardSummary) (err error, res response.SysMissionBonus) {
var (
bonus []model.SysMissionBonus
)
db := global.MG_DB.Model(&model.SysMissionReward{}).Select("sum(bonus) as bonus,type,count(1) as total").
Where("create_by = ?", uuid)
if params.Status != 0 {
db = db.Where("status = ?", params.Status)
}
err = db.Group("type").Find(&bonus).Error
if err != nil {
return errors.New("查询失败"), res
}
db = global.MG_DB.Model(&model.SysMissionReward{}).
Where("create_by = ?", uuid)
var recordList []model.SysMissionReward
err = db.Order("id desc").Find(&recordList).Error
if err != nil {
return errors.New("查询失败"), res
}
res.VideoBonus.Title = "视频上传"
res.VideoBonus.AchieveMax = 5
res.VideoBonus.MissionList = []response.SysMissionDesc{
{Title: "上传1次带货视频", Bonus: 0.5, Description: "每个任务仅计入1次,不可重复上传", TitleEng: "Upload a sales video once", DescriptionEng: "Each task is only counted once and cannot be uploaded repeatedly"},
{Title: "上传3次带货视频", Bonus: 1, Description: "每个任务仅计入1次,不可重复上传", TitleEng: "Upload sales videos 3 times", DescriptionEng: "Each task is only counted once and cannot be uploaded repeatedly"},
{Title: "上传5次带货视频", Bonus: 2, Description: "每个任务仅计入1次,不可重复上传", TitleEng: "Upload sales videos 5 times", DescriptionEng: "Each task is only counted once and cannot be uploaded repeatedly"},
}
for _, vBonus := range bonus {
switch vBonus.Type {
case 1:
//视频上传
var achieveNum int64
global.MG_DB.Model(&model.MissionClaimVideo{}).Where("create_by = ? and source_type = 2 and status in (1,2)", uuid).Count(&achieveNum)
vBonus.AchieveNum = achieveNum
res.VideoBonus.SysMissionBonus = vBonus
//标记用户奖励状态
for vi, _ := range res.VideoBonus.MissionList {
for _, vRecord := range recordList {
if res.VideoBonus.MissionList[vi].Title == vRecord.Title {
res.VideoBonus.MissionList[vi].Status = vRecord.Status
}
}
}
}
res.Total += vBonus.Total
res.TotalBonus += vBonus.Bonus
}
return nil, res
}