Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+238
View File
@@ -0,0 +1,238 @@
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(&params); 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(&params); 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())
}