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
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
|
|
}
|
|
|