package taskctrl import ( "91porn-server/models/v/taskmod" "fmt" "sync" "91porn-server/app/service/activityclient" "91porn-server/app/service/taskser" "91porn-server/common" "91porn-server/common/log" "91porn-server/common/stderr" "91porn-server/models/v/usermod" "91porn-server/models/v/walletmod" "github.com/gin-gonic/gin" ) /* // 获取任务列表 func GetTaskList(c *gin.Context) { uid, err := common.GetUID(c) if err != nil { common.ServeJSON(c, stderr.ErrNoToken, nil) return } data, code := taskser.GetTaskList(uid) if code != stderr.Success { common.ServeJSON(c, code, nil) return } common.ServeJSON(c, stderr.Success, data) } // 获取任务详情 func GetTaskDetails(c *gin.Context) { uid, err := common.GetUID(c) if err != nil { common.ServeJSON(c, stderr.ErrNoToken, nil) return } log.Info("GetTaskDetails start", log.Any("uid", uid)) var params struct { Type int `form:"type" binding:"required,min=3"` } if err = c.ShouldBindQuery(¶ms); err != nil { common.ServeJSON(c, stderr.ErrParamError, err.Error()) return } log.Info("GetTaskDetails start", log.Any("uid", uid), log.Any("params", params)) data, code := taskser.GetTaskDetails(uid, params.Type) if code != stderr.Success { common.ServeJSON(c, code, nil) return } common.ServeJSON(c, stderr.Success, data) } // 领取宝箱奖励 func GetBoon(c *gin.Context) { uid, err := common.GetUID(c) if err != nil { common.ServeJSON(c, stderr.ErrNoToken, nil) return } log.InfoX(c, "GetJewelBoxPrize start", log.Any("uid", uid)) var params struct { ID string `json:"id"` Type int `json:"type"` } if err = c.ShouldBindJSON(¶ms); err != nil { common.ServeJSON(c, stderr.ErrParamError, err.Error()) return } log.InfoX(c, "GetJewelBoxPrize start", log.Any("uid", uid), log.Any("params", params)) if code := taskser.GetBoon(c, uid, params.ID, params.Type); code != stderr.Success { common.ServeJSON(c, code, nil) return } common.ServeJSON(c, stderr.Success, "success") } */ // GetNewTask doc // @Summary 任务列表 // @Description 任务列表 // @Tags 福利任务 // @Accept mpfd,json // @Produce json,html // @Success 200 {object} taskser.NewTaskResponse "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /app/task/list [post] func GetNewTask(c *gin.Context) { uid, err := common.GetUID(c) if err != nil { common.ServeJSON(c, stderr.ErrNoToken, nil) return } var user *usermod.User var wallet *walletmod.Wallet user, _ = usermod.FindUserByUID(uid) if user != nil { wallet, _ = walletmod.GetWallet(uid) } var dailyTasks []taskser.DailyTaskResponse var onceTasks []taskser.OnceTaskResponse var growthTasks []*taskser.GrowthTaskResponse var dailyTaskCode, onceTaskCode, growthCode stderr.Code var dailyTaskMsg, onceTaskMsg, growthTaskMsg string wg := sync.WaitGroup{} wg.Add(3) common.Go(func() { defer wg.Done() dailyTasks, dailyTaskCode, dailyTaskMsg = taskser.GetDailyTask(uid) }) common.Go(func() { defer wg.Done() onceTasks, onceTaskCode, onceTaskMsg = taskser.GetOnceTask(uid) }) common.Go(func() { defer wg.Done() growthTasks, growthCode, growthTaskMsg = taskser.GetGrowthTask(uid) }) wg.Wait() if dailyTaskCode != stderr.Success { common.ServeJSON(c, dailyTaskCode, dailyTaskMsg) return } if onceTaskCode != stderr.Success { common.ServeJSON(c, onceTaskCode, onceTaskMsg) return } if growthCode != stderr.Success { common.ServeJSON(c, growthCode, growthTaskMsg) return } // 按 Link 中的 type 推导倒计时类型。CountdownType=1 (红包雨) 但活动服无可用场次时,过滤该任务。 filteredDailyTasks := make([]taskser.DailyTaskResponse, 0, len(dailyTasks)) for i := range dailyTasks { start, end, ctype, ok := activityclient.ResolveCountdownByLink(dailyTasks[i].Link) if !ok { continue } dailyTasks[i].StartAt = start dailyTasks[i].EndAt = end dailyTasks[i].CountdownType = ctype dailyTasks[i].Link = activityclient.ReplaceActivityDomain(dailyTasks[i].Link, user, wallet) filteredDailyTasks = append(filteredDailyTasks, dailyTasks[i]) } dailyTasks = filteredDailyTasks filteredOnceTasks := make([]taskser.OnceTaskResponse, 0, len(onceTasks)) for i := range onceTasks { start, end, ctype, ok := activityclient.ResolveCountdownByLink(onceTasks[i].Link) if !ok { continue } onceTasks[i].StartAt = start onceTasks[i].EndAt = end onceTasks[i].CountdownType = ctype onceTasks[i].Link = activityclient.ReplaceActivityDomain(onceTasks[i].Link, user, wallet) filteredOnceTasks = append(filteredOnceTasks, onceTasks[i]) } onceTasks = filteredOnceTasks common.ServeJSON(c, stderr.Success, taskser.NewTaskResponse{ DailyTasks: dailyTasks, OnceTasks: onceTasks, GrowthTasks: growthTasks, }) } // Receive doc // @Summary 我的任务 - 领取积分 // @Description 领取积分 // @Tags 福利任务 // @Accept mpfd,json // @Produce json,html // @Param taskId formData string true "任务ID" // @Param type formData int true "任务类型 1、每日任务 2、一次行任务" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/app/task/receive [post] func Receive(c *gin.Context) { uid, err := common.GetUID(c) if err != nil { common.ServeJSON(c, stderr.ErrNoToken, nil) return } var in taskmod.ReceiveTaskReq err = c.ShouldBindJSON(&in) if err != nil { log.Error(fmt.Sprintf("task Receive task param err:%v", err)) common.ServeJSON(c, stderr.ErrParamError, err.Error()) return } code := taskser.ReceiveTask(uid, &in) if code != stderr.Success { common.ServeJSON(c, code, code.Error()) return } common.ServeJSON(c, stderr.Success, stderr.Success.Msg()) } // Do doc // @Summary 我的任务-做任务 // @Description 做任务 // @Tags 福利任务 // @Accept mpfd,json // @Produce json,html // @Param taskId formData string true "任务ID" // @Param type formData int true "任务类型 1、每日任务 2、一次行任务" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/app/task/do [post] func Do(c *gin.Context) { uid, err := common.GetUID(c) if err != nil { common.ServeJSON(c, stderr.ErrNoToken, nil) return } var in taskmod.DoTaskReq err = c.ShouldBindJSON(&in) if err != nil { log.Error(fmt.Sprintf("task do task param err:%v", err)) common.ServeJSON(c, stderr.ErrParamError, err.Error()) return } code := taskser.DoTask(uid, &in) if code != stderr.Success { common.ServeJSON(c, code, code.Error()) return } common.ServeJSON(c, stderr.Success, stderr.Success.Msg()) }