wangbin 3 роки тому
батько
коміт
8e505ed336

+ 115 - 4
api/v1/task/game_task.go

@@ -8,6 +8,8 @@ import (
 	"log-server/model/task/request"
 	taskResponse "log-server/model/task/response"
 	"log-server/utils"
+	"net/http"
+	"time"
 )
 
 type GameTaskApi struct {
@@ -57,11 +59,11 @@ func (s *GameTaskApi) GetGameTaskList(c *gin.Context) {
 		response.FailWithMessage("获取失败", c)
 	} else {
 		response.OkWithDetailed(taskResponse.GameTaskPageResult{
-			List:     list,
+			List:       list,
 			OptionList: option,
-			Total:    total,
-			Page:     paramsInfo.Page,
-			PageSize: paramsInfo.PageSize,
+			Total:      total,
+			Page:       paramsInfo.Page,
+			PageSize:   paramsInfo.PageSize,
 		}, "获取成功", c)
 	}
 }
@@ -163,3 +165,112 @@ func (s *GameTaskApi) DeleteGameTask(c *gin.Context) {
 		response.OkWithMessage("删除成功", c)
 	}
 }
+
+// @Tags gameTask
+// @Summary 游戏任务列表
+// @Security ApiKeyAuth
+// @accept application/json
+// @Produce application/json
+// @Param data body request.GetCardListRequest true "游戏任务列表"
+// @Success 200 {object} response.Response{data=response.GetGameTaskListReply,msg=string} "分页游戏任务列表,返回包括列表,总数,页码,每页数量"
+// @Router /gameTask/getGameTaskTargetList [post]
+func (s *GameTaskApi) GetGameTaskTargetList(c *gin.Context) {
+	var paramsInfo request.GetGameTaskListTargetRequest
+	_ = c.ShouldBindJSON(&paramsInfo)
+	if err := utils.Verify(paramsInfo.PageInfo, utils.PageInfoVerify); err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	if list, total, err := taskService.GetGameTaskTargetInfoList(paramsInfo.GameTargetCompleteRequest, paramsInfo.PageInfo, paramsInfo.OrderKey, paramsInfo.Desc); err != nil {
+		global.GVA_LOG.Error("获取失败!", zap.Error(err))
+		response.FailWithMessage("获取失败", c)
+	} else {
+		response.OkWithDetailed(response.PageResult{
+			List:     list,
+			Total:    total,
+			Page:     paramsInfo.Page,
+			PageSize: paramsInfo.PageSize,
+		}, "获取成功", c)
+	}
+}
+
+// @Tags gameTask
+// @Summary 根据id获取游戏任务信息
+// @Security ApiKeyAuth
+// @accept application/json
+// @Produce application/json
+// @Param data body request.GetById true "根据id获取游戏任务目标信息"
+// @Success 200 {object} response.Response{data=response.GetGameTargetComplete} "根据id获取游戏任务信息,返回包括游戏任务信息详情"
+// @Router /gameTask/getGameTaskTargetById [post]
+func (s *GameTaskApi) GetGameTaskTargetById(c *gin.Context) {
+	var idInfo request.GetGameTaskTargetByIdRequest
+	_ = c.ShouldBindJSON(&idInfo)
+	if err := utils.Verify(idInfo, utils.IdVerify); err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	date := time.Now().Format("2006-01-02")
+	if idInfo.CreateDate != date {
+		response.FailWithMessage("只能修改当天的任务", c)
+		return
+	}
+	api, err := taskService.GetGameTaskTargetById(idInfo.ID, date)
+	if err != nil {
+		global.GVA_LOG.Error("获取失败!", zap.Error(err))
+		response.FailWithMessage("获取失败", c)
+	} else {
+		response.OkWithDetailed(api, "获取成功", c)
+	}
+}
+
+// @Tags gameTask
+// @Summary 更新游戏任务目标
+// @Security ApiKeyAuth
+// @accept application/json
+// @Produce application/json
+// @Param data body request.GameTaskRequest true
+// @Success 200 {object} response.Response{msg=string} "更新游戏任务目标"
+// @Router /gameTask/updateTarget [post]
+func (s *GameTaskApi) UpdateGameTaskTarget(c *gin.Context) {
+	var api request.UpdateGameTaskTargetRequest
+	_ = c.ShouldBindJSON(&api)
+	if err := utils.Verify(api, utils.UpdateTargetVerify); err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+
+	if err := taskService.UpdateGameTaskTarget(api); err != nil {
+		global.GVA_LOG.Error("更新失败!", zap.Error(err))
+		response.FailWithMessage("更新失败", c)
+	} else {
+		response.OkWithMessage("更新成功", c)
+	}
+}
+
+// @Tags gameTask
+// @Summary 群控任务目标
+// @Security ApiKeyAuth
+// @accept application/json
+// @Produce application/json
+// @Param data Query new_date true
+// @Success 200 {object} []control.TargetStatisticsReply "更新游戏任务目标"
+// @Router /gameTask/targetStatistics [get]
+func (s *GameTaskApi) TargetStatistics(c *gin.Context) {
+	date := c.Query("new_date")
+	if date == "" {
+		response.FailWithMessage("获取失败!参数错误!", c)
+		return
+	}
+	if list, err := taskService.TargetStatistics(date); err != nil {
+		global.GVA_LOG.Error("获取失败!", zap.Error(err))
+		response.FailWithMessage("获取失败", c)
+	} else {
+		c.JSON(http.StatusOK, response.ControlResult{
+			Data:    list,
+			Message: "获取成功",
+			Code:    1000,
+			Date:    date,
+		})
+		return
+	}
+}

+ 8 - 8
initialize/timer.go

@@ -50,11 +50,11 @@ func Timer() {
 	//if err != nil {
 	//	fmt.Println("add TodayCreateStatisticsGameInfoLog timer error:", err)
 	//}
-	// 同步任务统计数据
-	_, err = global.GVA_Timer.AddTaskByFunc("TaskStatisticsDataCache", "2 0/3 6-23 * * * ", serviceStatisticsLog.TaskStatisticsDataCache)
-	if err != nil {
-		fmt.Println("add TaskStatisticsDataCache timer error:", err)
-	}
+	//// 同步任务统计数据
+	//_, err = global.GVA_Timer.AddTaskByFunc("TaskStatisticsDataCache", "2 0/3 6-23 * * * ", serviceStatisticsLog.TaskStatisticsDataCache)
+	//if err != nil {
+	//	fmt.Println("add TaskStatisticsDataCache timer error:", err)
+	//}
 	//// 重试失败数据
 	//_, err = global.GVA_Timer.AddTaskByFunc("createFailLog", "2 0/5 6-23 * * * ", ServiceLogList.CreateFailLog)
 	//if err != nil {
@@ -75,13 +75,13 @@ func Timer() {
 	//if err != nil {
 	//	fmt.Println("add RegularDelCheckData timer error:", err)
 	//}
-	// 定时添加任务
-	//_, err = global.GVA_Timer.AddTaskByFunc("EveryDaySyncTaskData", "2 39 18 * * *", syncData.EveryDaySyncTaskData)
+	////定时添加任务
+	//_, err = global.GVA_Timer.AddTaskByFunc("EveryDaySyncTaskData", "30 36 11 * * *", syncData.EveryDaySyncTaskData)
 	//if err != nil {
 	//	fmt.Println("add EveryDaySyncTaskData timer error:", err)
 	//}
 	//
-	//_, err = global.GVA_Timer.AddTaskByFunc("SyncTaskData", "2 0/3 6-23 * * *", syncData.SyncTaskData)
+	//_, err = global.GVA_Timer.AddTaskByFunc("SyncTaskData", "2 0/3 1-23 * * *", syncData.SyncTaskData)
 	//if err != nil {
 	//	fmt.Println("add SyncTaskData timer error:", err)
 	//}

+ 7 - 0
model/common/response/common.go

@@ -6,3 +6,10 @@ type PageResult struct {
 	Page     int         `json:"page"`
 	PageSize int         `json:"pageSize"`
 }
+
+type ControlResult struct {
+	Code    int         `json:"code"`
+	Message string      `json:"message"`
+	Date    string      `json:"date"`
+	Data    interface{} `json:"data"`
+}

+ 51 - 0
model/task/control/response.go

@@ -37,3 +37,54 @@ type XmyFreeReply struct {
 	Msg  string    `json:"msg"`
 	Data []XmyFree `json:"data"`
 }
+
+type TargetStatisticsReply struct {
+	GameName       string `json:"game_name"`
+	GameId         string `json:"game_id"`
+	GameDirector   string `json:"game_director"`
+	TargetNew      int    `json:"target_new"`
+	TargetPay      int    `json:"target_pay"`
+	TargetActive   int    `json:"target_active"`
+	CompleteNew    int    `json:"complete_new"`
+	CompletePay    int    `json:"complete_pay"`
+	CompleteActive int    `json:"complete_active"`
+	GamePort       string `json:"game_agent"`
+	Date           string
+	TaskId         string `json:"task_id"`
+	LoginMode      string `json:"login_mode"`
+	XmyId          string `json:"xmy_id"`
+	TaskName       string `json:"task_name"`
+	MeiZuGameId    string `json:"mz_id"`
+	MeiZuChannel   string `json:"mz_channel"`
+	QqId           string `json:"qq_id"`
+	QqChannel      string `json:"qq_channel"`
+}
+
+type ResponseTargetInfo struct {
+	Code    int                      `json:"code"`
+	Message string                   `json:"message"`
+	Date    string                   `json:"date"`
+	Data    []*TargetStatisticsReply `json:"data"`
+}
+
+type GetTargetStatisticsReply struct {
+	Id               uint   `json:"id"`
+	TaskId           string `json:"task_id"`
+	TaskName         string `json:"task_name"`
+	User             string `json:"user"`
+	LoginMethod      int    `json:"login_method"`
+	NewComplete      int    `json:"new_complete"`
+	PayComplete      int    `json:"pay_complete"`
+	RetainedComplete int    `json:"retained_complete"`
+	NewTarget        int    `json:"new_target"`
+	PayTarget        int    `json:"pay_target"`
+	RetainedTarget   int    `json:"retained_target"`
+	TxChannel        string `json:"tx_channel"`
+	TxGameId         string `json:"tx_game_id"`
+	MzChannel        string `json:"mz_channel"`
+	MzGameId         string `json:"mz_game_id"`
+	GameIdXmy        string `json:"game_id_xmy"`
+	GamePortId       int    `json:"game_port_id"`
+	GameName         string `json:"game_name"`
+	GameId           string `json:"game_id"`
+}

+ 1 - 0
model/task/game_target_complete.go

@@ -15,6 +15,7 @@ type GameTargetComplete struct {
 	CreateDate       time.Time `json:"create_date"`
 	UpdateTime       time.Time `json:"update_time"` // 更新时间
 	GameRate         string    `json:"game_rate"`
+	IsComplete       int       `json:"is_complete"`
 }
 
 func (GameTargetComplete) TableName() string {

+ 38 - 0
model/task/request/game_task.go

@@ -36,3 +36,41 @@ type UpdateGameTaskStatusRequest struct {
 	TaskId int `json:"task_id"`
 	Status int `json:"status"` // 状态-1关闭,1开启
 }
+
+type GetGameTaskListTargetRequest struct {
+	GameTargetCompleteRequest
+	PageInfo
+	OrderKey string `json:"orderKey"` // 排序
+	Desc     bool   `json:"desc"`     // 排序方式:升序false(默认)|降序true
+}
+
+type GameTargetCompleteRequest struct {
+	Id               uint   `json:"id"`
+	TaskId           int    `json:"task_id"`
+	TaskName         string `json:"task_name"`
+	User             string `json:"user"`
+	LoginMethod      string `json:"login_method"`
+	NewComplete      int    `json:"new_complete"`
+	PayComplete      int    `json:"pay_complete"`
+	RetainedComplete int    `json:"retained_complete"`
+	NewTarget        int    `json:"new_target"`
+	PayTarget        int    `json:"pay_target"`
+	RetainedTarget   int    `json:"retained_target"`
+	Amount           int    `json:"amount"`
+	CreateDate       string `json:"create_date"`
+	UpdateTime       string `json:"update_time"` // 更新时间
+	GameRate         string `json:"game_rate"`
+}
+
+type GetGameTaskTargetByIdRequest struct {
+	ID         int    `json:"id" form:"id"` // 主键ID
+	CreateDate string `json:"create_date"`
+}
+
+type UpdateGameTaskTargetRequest struct {
+	TaskId         int    `json:"task_id"`
+	NewTarget      int    `json:"new_target"`
+	PayTarget      int    `json:"pay_target"`
+	RetainedTarget int    `json:"retained_target"`
+	CreateDate     string `json:"create_date"`
+}

+ 19 - 0
model/task/response/game_task.go

@@ -18,3 +18,22 @@ type GetGameTaskListReply struct {
 	UpdateTime     string `json:"update_time"` // 更新时间
 	StopTime       string `json:"stop_time"`
 }
+
+type GetGameTargetComplete struct {
+	Id               uint   `json:"id"`
+	TaskId           int    `json:"task_id"`
+	TaskName         string `json:"task_name"`
+	User             string `json:"user"`
+	LoginMethod      string `json:"login_method"`
+	NewComplete      int    `json:"new_complete"`
+	PayComplete      int    `json:"pay_complete"`
+	RetainedComplete int    `json:"retained_complete"`
+	NewTarget        int    `json:"new_target"`
+	PayTarget        int    `json:"pay_target"`
+	RetainedTarget   int    `json:"retained_target"`
+	Amount           int    `json:"amount"`
+	CreateDate       string `json:"create_date"`
+	UpdateTime       string `json:"update_time"` // 更新时间
+	GameRate         string `json:"game_rate"`
+	IsComplete       int    `json:"is_complete"`
+}

+ 4 - 0
router/task/game_task.go

@@ -18,5 +18,9 @@ func (e *GameTaskRouter) InitGameTaskRouter(Router *gin.RouterGroup) {
 		GameTaskRouter.POST("statusOperation", GameTaskApi.StatusOperation)
 		GameTaskRouter.POST("update", GameTaskApi.UpdateGameTask)
 		GameTaskRouter.POST("delete", GameTaskApi.DeleteGameTask)
+		GameTaskRouter.POST("getGameTaskTargetList", GameTaskApi.GetGameTaskTargetList)
+		GameTaskRouter.POST("getGameTaskTargetById", GameTaskApi.GetGameTaskTargetById)
+		GameTaskRouter.POST("updateTarget", GameTaskApi.UpdateGameTaskTarget)
+		GameTaskRouter.GET("targetStatistics", GameTaskApi.TargetStatistics)
 	}
 }

+ 169 - 21
service/task/game_task.go

@@ -15,6 +15,7 @@ import (
 	"math"
 	"math/rand"
 	"strconv"
+	"strings"
 	"time"
 )
 
@@ -29,19 +30,19 @@ var AccountType = map[int]string{
 }
 
 var LoginMethod = map[int]string{
-	1: "小绵羊登录",
-	2: "魅族账号登录",
-	3: "QQ账号登录",
-	4: "网易账号登录",
-	5: "微信授权登录",
-	6: "微信+QQ授权登录",
+	1: "小绵羊",
+	2: "魅族",
+	3: "QQ",
+	4: "网易",
+	5: "微信",
+	6: "微信+QQ",
 }
 var GamePort = map[int]string{
-	1: "腾讯游戏",
-	2: "360游戏",
-	3: "网易游戏",
-	4: "酷派游戏",
-	5: "魅族游戏",
+	1: "腾讯",
+	2: "360",
+	3: "网易",
+	4: "酷派",
+	5: "魅族",
 }
 
 var (
@@ -122,14 +123,17 @@ func (s *GameTask) CreateGameTargetCompleteModel(oldA task.GameTask, date time.T
 	var retainedTarget int
 	rand.Seed(time.Now().UnixNano())
 	retainedTargetRate := rand.Float64()
-	if oldA.NewTarget < 100 {
-		newTarget = oldA.NewTarget
+	if oldA.RetainedTarget < 100 {
+		retainedTarget = oldA.RetainedTarget
 	} else {
-		newTarget = 200
+		retainedTarget = 200
 	}
 	targetComplete := new(task.GameTargetComplete)
 	targetComplete.TaskId = oldA.TaskId
 	targetComplete.NewTarget = oldA.NewTarget + int(math.Ceil(newTargetRate*float64(newTarget)))
+	if oldA.NewTarget == 0 {
+		targetComplete.NewTarget = 0
+	}
 	targetComplete.RetainedTarget = oldA.RetainedTarget + int(math.Ceil(retainedTargetRate*float64(retainedTarget)))
 	targetComplete.PayTarget = 0
 	targetComplete.CreateDate = date
@@ -228,22 +232,22 @@ func (apiService *GameTask) GetGameTaskInfoList(api task.GameTask, info request.
 		db = db.Where("status = ?", api.Status)
 	}
 
-	err = db.Count(&total).Error
-
+	if api.TaskId != 0 {
+		db = db.Where("task_id = ?", api.TaskId)
+	}
 
+	err = db.Count(&total).Error
 
 	//查找厂商名称,登录类型名称、账号类型名称
 	option := task.Option{}
-	global.GVA_DB.Table("game_channel").Select("id","channel_name").Find(&option.GamePortOptions)
+	global.GVA_DB.Table("game_channel").Select("id", "channel_name").Find(&option.GamePortOptions)
 	global.GVA_DB.Table("login_type").Select("id", "login_name").Find(&option.LoginTypeOptions)
 	global.GVA_DB.Table("account_type").Select("id", "type_name").Find(&option.AccountTypeOptions)
 	global.GVA_DB.Table("game_list").Select("id", "game_name").Find(&option.GameListOptions)
 	//fmt.Println(option)
 
-
-
 	if err != nil {
-		return apiList, option , total, err
+		return apiList, option, total, err
 	} else {
 		db = db.Limit(limit).Offset(offset)
 		if order != "" {
@@ -297,7 +301,7 @@ func (apiService *GameTask) GetGameTaskInfoList(api task.GameTask, info request.
 		}
 
 	}
-	return apisReply, option,  total, err
+	return apisReply, option, total, err
 }
 
 //@author: [piexlmax](https://github.com/piexlmax)
@@ -475,3 +479,147 @@ func (s *GameTask) DeleteGameTask(api request.GameTaskRequest) (err error) {
 	})
 	return
 }
+
+//@function: GetGameTaskTargetInfoList
+//@description: 分页获取数据,
+//@param: card card.Card, info request.PageInfo, order string, desc bool
+//@return: list interface{}, total int64, err error
+func (apiService *GameTask) GetGameTaskTargetInfoList(api request.GameTargetCompleteRequest, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error) {
+	limit := info.PageSize
+	offset := info.PageSize * (info.Page - 1)
+	if api.CreateDate == "" {
+		api.CreateDate = time.Now().Format("2006-01-02")
+	}
+	db := global.GVA_DB.Table("game_target_complete gtc")
+	db = db.Select("gtc.id,gtc.task_id,gt.task_name,gtc.new_target,gt.login_method,gt.user,gtc.pay_target,gtc.retained_target," +
+		"gtc.new_complete,gtc.pay_complete,gtc.retained_complete,gtc.create_date,gtc.amount,gtc.game_rate,gtc.is_complete")
+	db = db.Joins("left join game_task gt on gt.task_id = gtc.task_id")
+	db = db.Where("gtc.create_date = ?", api.CreateDate)
+	var apiList []response.GetGameTargetComplete
+	if api.TaskName != "" {
+		db = db.Where("gt.task_name LIKE ?", "%"+api.TaskName+"%")
+	}
+	if api.User != "" {
+		db = db.Where("gt.user LIKE ?", "%"+api.User+"%")
+	}
+	if api.TaskId != 0 {
+		db = db.Where("gtc.task_id = ?", api.TaskId)
+	}
+	err = db.Count(&total).Error
+
+	if err != nil {
+		return apiList, total, err
+	} else {
+		db = db.Limit(limit).Offset(offset)
+		if order != "" {
+			var OrderStr string
+			// 设置有效排序key 防止sql注入
+			// 感谢 Tom4t0 提交漏洞信息
+			orderMap := make(map[string]bool, 4)
+			orderMap["task_name"] = true
+			orderMap["user"] = true
+			if orderMap[order] {
+				if desc {
+					OrderStr = "gt." + order + " desc"
+				} else {
+					OrderStr = order
+				}
+			} else { // didn't matched any order key in `orderMap`
+				err = fmt.Errorf("非法的排序字段: %v", order)
+				return apiList, total, err
+			}
+
+			err = db.Order(OrderStr).Find(&apiList).Error
+		} else {
+			err = db.Order("gtc.id desc").Find(&apiList).Error
+		}
+	}
+	if len(apiList) != 0 {
+		for i, api := range apiList {
+			date := strings.Split(api.CreateDate, "T")
+			loginMethod, _ := strconv.Atoi(api.LoginMethod)
+			apiList[i].LoginMethod = LoginMethod[loginMethod]
+			apiList[i].CreateDate = date[0]
+		}
+	}
+	return apiList, total, err
+}
+
+//@function: GetGameTaskTargetById
+//@description: 根据id获取GameTargetComplete
+//@param: id uint
+//@return: apiReply response.GetPcListReply, err error
+func (c *GameTask) GetGameTaskTargetById(id int, date string) (api response.GetGameTargetComplete, err error) {
+	db := global.GVA_DB.Table("game_target_complete gtc")
+	db = db.Select("gtc.task_id,gt.task_name,gtc.new_target,gt.login_method,gt.user,gtc.pay_target,gtc.retained_target," +
+		"gtc.new_complete,gtc.pay_complete,gtc.retained_complete,gtc.create_date,gtc.amount,gtc.game_rate,gtc.is_complete")
+	db = db.Joins("left join game_task gt on gt.task_id = gtc.task_id")
+	db = db.Where("gtc.task_id = ?", id)
+	db = db.Where("gtc.create_date = ?", date)
+	err = db.Order("gtc.id desc").Find(&api).Error
+	return
+}
+
+// 更新GameTaskTarget
+func (s *GameTask) UpdateGameTaskTarget(requestData request.UpdateGameTaskTargetRequest) (err error) {
+	if errors.Is(global.GVA_DB.Where("task_id = ?", requestData.TaskId).Where("create_date = ?", requestData.CreateDate).First(&task.GameTargetComplete{}).Error, gorm.ErrRecordNotFound) {
+		return errors.New("不存在的任务")
+	}
+	gameTask := new(task.GameTargetComplete)
+	global.GVA_DB.Where("task_id = ?", requestData.TaskId).Where("create_date = ?", requestData.CreateDate).First(&gameTask)
+	//if gameTask.NewTarget > requestData.NewTarget && gameTask.RetainedTarget > requestData.RetainedTarget {
+	//	return errors.New("任务目标不能小于当前目标")
+	//}
+	updateData := map[string]interface{}{
+		"new_target":      requestData.NewTarget,
+		"retained_target": requestData.RetainedTarget,
+	}
+	err = global.GVA_DB.Transaction(func(tx *gorm.DB) error {
+		err = tx.Model(&task.GameTargetComplete{}).Where("task_id = ?", requestData.TaskId).Where("create_date = ?", requestData.CreateDate).Updates(updateData).Error
+		if err != nil {
+			global.GVA_LOG.Error("更新任务数据失败: ", zap.Error(err))
+			return err
+		}
+		return err
+	})
+	return
+}
+
+func (s *GameTask) TargetStatistics(date string) (apiList []control.TargetStatisticsReply, err error) {
+	db := global.GVA_DB.Table("game_target_complete gtc")
+	db = db.Select("gtc.task_id,gt.task_name,gtc.new_target,gt.login_method,gt.user,gtc.pay_target,gtc.retained_target," +
+		"gtc.new_complete,gtc.pay_complete,gtc.retained_complete,gtc.create_date,gt.tx_channel,gt.tx_game_id,gt.mz_channel," +
+		"gt.game_id_xmy,gt.mz_game_id,gt.game_port_id,gt.game_id,gt.game_name")
+	db = db.Joins("left join game_task gt on gt.task_id = gtc.task_id")
+	db = db.Where("gt.is_del = ?", -1)
+	db = db.Where("gt.status = ?", 1)
+	db = db.Where("gtc.create_date = ?", date)
+	var taskTarget []control.GetTargetStatisticsReply
+	err = db.Order("gtc.id desc").Find(&taskTarget).Error
+	if len(taskTarget) != 0 {
+		for _, target := range taskTarget {
+			var targetStatistics control.TargetStatisticsReply
+			targetStatistics.TaskId = target.TaskId
+			targetStatistics.TaskName = target.TaskName
+			targetStatistics.Date = date
+			targetStatistics.TargetActive = target.RetainedTarget
+			targetStatistics.TargetPay = target.PayTarget
+			targetStatistics.TargetNew = target.NewTarget
+			targetStatistics.CompleteNew = target.NewComplete
+			targetStatistics.CompleteActive = target.RetainedComplete
+			targetStatistics.CompletePay = target.PayComplete
+			targetStatistics.XmyId = target.GameIdXmy
+			targetStatistics.QqId = target.TxGameId
+			targetStatistics.QqChannel = target.TxChannel
+			targetStatistics.MeiZuGameId = target.MzGameId
+			targetStatistics.MeiZuChannel = target.MzChannel
+			targetStatistics.LoginMode = LoginMethod[target.LoginMethod]
+			targetStatistics.GamePort = GamePort[target.GamePortId]
+			targetStatistics.GameDirector = target.User
+			targetStatistics.GameId = target.GameId
+			targetStatistics.GameName = target.GameName
+			apiList = append(apiList, targetStatistics)
+		}
+	}
+	return
+}

+ 29 - 4
service/task/sync_data.go

@@ -95,6 +95,19 @@ func (s *SyncData) SyncRoomData(date string, gameIdInt int) (ts request.TaskStat
 	return
 }
 
+// 获取任务完成数据
+func (s *SyncData) CompleteTaskData(date string) (mps map[int]task.GameTargetComplete, err error) {
+	db := global.GVA_DB.Table("game_target_complete")
+	db = db.Where("create_date = ?", date)
+	var apiList []task.GameTargetComplete
+	mps = map[int]task.GameTargetComplete{}
+	err = db.Order("id desc").Find(&apiList).Error
+	for _, api := range apiList {
+		mps[api.TaskId] = api
+	}
+	return
+}
+
 // 同步每天的任务基础数据
 func (s *SyncData) EveryDaySyncTaskData() {
 	db := global.GVA_DB.Model(&task.GameTask{})
@@ -112,7 +125,7 @@ func (s *SyncData) EveryDaySyncTaskData() {
 		gameTargetComplete := s.GameTask.CreateGameTargetCompleteModel(gameTask, date)
 		gameTargetCompletes = append(gameTargetCompletes, gameTargetComplete)
 	}
-	err = global.GVA_DB.Model(&task.GameTargetComplete{}).Create(gameTargetCompletes).Error
+	err = global.GVA_DB.Model(&task.GameTargetComplete{}).Omit("update_time", "game_rate", "is_complete").Create(gameTargetCompletes).Error
 	if err != nil {
 		global.GVA_LOG.Error("create GameTargetComplete fail", zap.Error(err))
 		return
@@ -137,6 +150,11 @@ func (s *SyncData) SyncTaskData() {
 		global.GVA_LOG.Error("SyncTaskData get xmy data fail", zap.Error(err))
 		return
 	}
+	completeTaskData, err := s.CompleteTaskData(date)
+	if err != nil {
+		global.GVA_LOG.Error("CompleteTaskData get data fail", zap.Error(err))
+		return
+	}
 	wslData, err := s.SyncWslGameData(date)
 	if err != nil {
 		global.GVA_LOG.Error("SyncWslGameData get wsl data fail", zap.Error(err))
@@ -151,7 +169,8 @@ func (s *SyncData) SyncTaskData() {
 			gameTarget.NewComplete, _ = strconv.Atoi(xmyGameInfo.UserNum)
 			gameTarget.PayComplete, _ = strconv.Atoi(xmyGameInfo.Cnt)
 			gameTarget.RetainedComplete, _ = strconv.Atoi(xmyGameInfo.ActiveUserNum)
-			gameTarget.Amount, _ = strconv.Atoi(xmyGameInfo.Amount)
+			f, _ := strconv.ParseFloat(xmyGameInfo.Amount, 64)
+			gameTarget.Amount = int(f)
 			num, _ := s.SyncXmyFreeData(date, gameIdXmy)
 			if num != 0 {
 				gameTarget.PayTarget = num
@@ -160,7 +179,10 @@ func (s *SyncData) SyncTaskData() {
 			gameTarget.NewComplete = roomData.NewCompleteLocal
 			gameTarget.PayComplete = roomData.PayCompleteLocal
 			gameTarget.RetainedComplete = roomData.NewCompleteLocal + roomData.RetainedCompleteLocal
-			gameTarget.Amount = 6
+			gameTarget.Amount = 6 * roomData.PayCompleteLocal
+			if gameTarget.RetainedComplete < roomData.RetainedComplete {
+				gameTarget.RetainedComplete = roomData.RetainedComplete
+			}
 		}
 		gameTarget.GameRate = roomData.GameRate
 		if gameTask.GamePortId == 5 && gameTask.LoginMethod == 2 {
@@ -169,8 +191,11 @@ func (s *SyncData) SyncTaskData() {
 				gameTarget.PayTarget = wslData[mzGameId]
 			}
 		}
+		gameTarget.IsComplete = -1
+		if gameTarget.RetainedComplete >= completeTaskData[gameTask.TaskId].RetainedTarget && gameTarget.PayComplete >= completeTaskData[gameTask.TaskId].PayTarget && gameTarget.NewComplete >= completeTaskData[gameTask.TaskId].NewTarget {
+			gameTarget.IsComplete = 1
+		}
 		global.GVA_DB.Model(&task.GameTargetComplete{}).Where("task_id = ?", gameTask.TaskId).Where("create_date = ?", date).Omit("create_date", "update_time", "task_id").Updates(gameTarget)
 	}
-
 	return
 }

+ 1 - 0
utils/verify.go

@@ -28,4 +28,5 @@ var (
 	AccountTypeVerify       = Rules{"TypeName": {NotEmpty()}}
 	GameTaskVerify          = Rules{"TaskId": {NotEmpty()}, "TaskName": {NotEmpty()}, "User": {NotEmpty()}, "NewRetained": {NotEmpty()}, "GamePortId": {NotEmpty()}}
 	TaskIdVerify            = Rules{"TaskId": {NotEmpty()}}
+	UpdateTargetVerify      = Rules{"TaskId": {NotEmpty()}, "CreateDate": {NotEmpty()}}
 )