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 }