瀏覽代碼

数据优化

wangbin 3 年之前
父節點
當前提交
9869a930de

+ 34 - 0
api/v1/task/game_task.go

@@ -450,3 +450,37 @@ func (s *GameTaskApi) GetFeeAccountList(c *gin.Context) {
 		response.OkWithDetailed(api, "获取成功", c)
 	}
 }
+
+// @Tags gameTask
+// @Summary 导出任务目标Excel
+// @Security ApiKeyAuth
+// @accept application/json
+// @Produce  application/octet-stream
+// @Param data body request.GameTargetCompleteRequest true "导出Excel文件信息"
+// @Success 200
+// @Router /gameTask/taskTargetExport [post]
+func (e *GameTaskApi) TaskTargetExport(c *gin.Context) {
+	var excelInfo request.ExcelInfo
+	_ = c.ShouldBindJSON(&excelInfo)
+	paramsInfo := excelInfo.InfoList
+	paramsInfo.PageSize = 300
+	paramsInfo.Page = 1
+	if err := utils.Verify(paramsInfo.PageInfo, utils.PageInfoVerify); err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	list, _, err := taskService.GetGameTaskTargetInfoList(paramsInfo.GameTargetCompleteRequest, paramsInfo.PageInfo, paramsInfo.OrderKey, paramsInfo.Desc, false)
+	if err != nil {
+		global.GVA_LOG.Error("获取失败!", zap.Error(err))
+		response.FailWithMessage("获取失败 "+err.Error(), c)
+	}
+	filePath := global.GVA_CONFIG.Excel.Dir + excelInfo.FileName
+	err = taskService.TaskStatisticsList2Excel(list, filePath)
+	if err != nil {
+		global.GVA_LOG.Error("转换Excel失败!", zap.Error(err))
+		response.FailWithMessage("转换Excel失败", c)
+		return
+	}
+	c.Writer.Header().Add("success", "true")
+	c.File(filePath)
+}

+ 29 - 29
initialize/timer.go

@@ -137,33 +137,33 @@ func Timer() {
 		fmt.Println("add SyncJfDevicesMessage timer error:", err)
 	}
 
-	//// 活跃定时推送消息
-	//_, err = global.GVA_Timer.AddTaskByFunc("TaskMsgSend", "20 29,59 8-21 * * *", syncData.TaskMsgSend)
-	//if err != nil {
-	//	fmt.Println("add TaskMsgSend timer error:", err)
-	//}
-	//
-	//// 活跃定时推送消息
-	////_, err = global.GVA_Timer.AddTaskByFunc("TaskMsgSend", "20 0/10 22-23 * * *", syncData.TaskMsgSend)
-	////if err != nil {
-	////	fmt.Println("add TaskMsgSend timer error:", err)
-	////}
-	//
-	//// 付费定时推送消息
-	//_, err = global.GVA_Timer.AddTaskByFunc("TaskMsgSend", "40 15,30,45,59 8-21 * * *", syncData.TaskFreeMsgSend)
-	//if err != nil {
-	//	fmt.Println("add TaskFreeMsgSend timer error:", err)
-	//}
-	//
-	////// 付费定时推送消息
-	////_, err = global.GVA_Timer.AddTaskByFunc("TaskMsgSend", "40 0/5 22-23 * * *", syncData.TaskFreeMsgSend)
-	////if err != nil {
-	////	fmt.Println("add TaskFreeMsgSend timer error:", err)
-	////}
-	//
-	//// 23起检测任务完成情况
-	//_, err = global.GVA_Timer.AddTaskByFunc("CheckTaskCompletedInfo", "10 0/4 23 * * *", syncData.CheckTaskCompletedInfo)
-	//if err != nil {
-	//	fmt.Println("add CheckTaskCompletedInfo timer error:", err)
-	//}
+	// 活跃定时推送消息
+	_, err = global.GVA_Timer.AddTaskByFunc("TaskMsgSend", "20 29,59 8-21 * * *", syncData.TaskMsgSend)
+	if err != nil {
+		fmt.Println("add TaskMsgSend timer error:", err)
+	}
+
+	// 活跃定时推送消息
+	_, err = global.GVA_Timer.AddTaskByFunc("TaskMsgSend", "20 0/10 22-23 * * *", syncData.TaskMsgSend)
+	if err != nil {
+		fmt.Println("add TaskMsgSend timer error:", err)
+	}
+
+	// 付费定时推送消息
+	_, err = global.GVA_Timer.AddTaskByFunc("TaskMsgSend", "40 15,30,45,59 8-21 * * *", syncData.TaskFreeMsgSend)
+	if err != nil {
+		fmt.Println("add TaskFreeMsgSend timer error:", err)
+	}
+
+	// 付费定时推送消息
+	_, err = global.GVA_Timer.AddTaskByFunc("TaskMsgSend", "40 0/5 22-23 * * *", syncData.TaskFreeMsgSend)
+	if err != nil {
+		fmt.Println("add TaskFreeMsgSend timer error:", err)
+	}
+
+	// 23起检测任务完成情况
+	_, err = global.GVA_Timer.AddTaskByFunc("CheckTaskCompletedInfo", "10 0/4 23 * * *", syncData.CheckTaskCompletedInfo)
+	if err != nil {
+		fmt.Println("add CheckTaskCompletedInfo timer error:", err)
+	}
 }

+ 31 - 17
model/task/request/game_task.go

@@ -1,6 +1,8 @@
 package request
 
-import "log-server/model/task"
+import (
+	"log-server/model/task"
+)
 
 type GameTaskRequest struct {
 	Id              uint   `json:"id"`
@@ -46,23 +48,35 @@ type GetGameTaskListTargetRequest struct {
 	Desc     bool   `json:"desc"`     // 排序方式:升序false(默认)|降序true
 }
 
+type ExcelInfo struct {
+	FileName string `json:"fileName"` // 文件名
+	InfoList struct {
+		GameTargetCompleteRequest
+		PageInfo
+		OrderKey string `json:"orderKey"` // 排序
+		Desc     bool   `json:"desc"`     // 排序方式:升序false(默认)|降序true
+	} `json:"infoList"`
+}
+
 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"`
-	IsComplete       int    `json:"is_complete"`
+	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"`
+	Date             []string `json:"date"`
+	GamePortId       int      `json:"game_port_id"`
 }
 
 type GetGameTaskTargetByIdRequest struct {

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

@@ -44,6 +44,7 @@ type GetGameTargetComplete struct {
 	HandRetainedComplete int    `json:"hand_retained_complete"`
 	HandPayComplete      int    `json:"hand_pay_complete"`
 	HandAmountTotal      int    `json:"hand_amount_total"`
+	GameIdXmy            string `json:"game_id_xmy"`
 }
 
 type GameTargetStatistics struct {

+ 1 - 0
router/task/game_task.go

@@ -24,6 +24,7 @@ func (e *GameTaskRouter) InitGameTaskRouter(Router *gin.RouterGroup) {
 		GameTaskRouter.POST("gameList", GameTaskApi.GameList)
 		GameTaskRouter.POST("getGameTxTaskList", GameTaskApi.GetGameTxTaskList)
 		GameTaskRouter.POST("getFeeAccountList", GameTaskApi.GetFeeAccountList)
+		GameTaskRouter.POST("taskTargetExport", GameTaskApi.TaskTargetExport)
 	}
 	GameTaskRouter1 := Router.Group("gameTask").Use(middleware.OperationRecord())
 	{

+ 18 - 0
service/task/common.go

@@ -0,0 +1,18 @@
+package task
+
+import "log-server/utils"
+
+type Common struct {
+}
+
+type SendMsg struct {
+	MsgType  string `json:"msgtype"`
+	Markdown struct {
+		Content string `json:"content"`
+	} `json:"markdown"`
+}
+
+func (s *Common) SendMsgData(url string, params interface{}) {
+	_, _ = utils.HttpPost(url, params)
+	return
+}

+ 81 - 12
service/task/game_task.go

@@ -5,6 +5,7 @@ import (
 	"encoding/json"
 	"errors"
 	"fmt"
+	"github.com/xuri/excelize/v2"
 	"go.uber.org/zap"
 	"gorm.io/gorm"
 	"log-server/global"
@@ -510,19 +511,23 @@ func (s *GameTask) DeleteGameTask(api request.GameTaskRequest) (err error) {
 //@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, isTx bool) (list interface{}, total int64, err error) {
+func (apiService *GameTask) GetGameTaskTargetInfoList(api request.GameTargetCompleteRequest, info request.PageInfo, order string, desc bool, isTx bool) (apiList []response.GetGameTargetComplete, total int64, err error) {
 	limit := info.PageSize
 	offset := info.PageSize * (info.Page - 1)
-	if api.CreateDate == "" {
-		api.CreateDate = time.Now().Format("2006-01-02")
+	startDate := time.Now().Format("2006-01-02")
+	endDate := time.Now().Format("2006-01-02")
+	if len(api.Date) == 2 {
+		startDate = api.Date[0]
+		endDate = api.Date[1]
 	}
 	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," +
+	db = db.Select("gtc.id,gtc.task_id,gt.task_name,gt.game_id_xmy,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,gtc.hand_new_complete," +
 		"gtc.hand_retained_complete,gtc.hand_pay_complete,gtc.hand_amount_total")
 	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
+	//db = db.Where("gtc.create_date = ?", api.CreateDate)
+	db = db.Where("create_date >= ? and create_date <= ?", startDate, endDate)
+
 	if api.TaskName != "" {
 		db = db.Where("gt.task_name LIKE ?", "%"+api.TaskName+"%")
 	}
@@ -532,6 +537,9 @@ func (apiService *GameTask) GetGameTaskTargetInfoList(api request.GameTargetComp
 	if isTx {
 		db = db.Where("gt.game_port_id = ?", 1)
 	}
+	if api.GamePortId != 0 {
+		db = db.Where("gt.game_port_id = ?", api.GamePortId)
+	}
 	if api.TaskId != 0 {
 		db = db.Where("gtc.task_id = ?", api.TaskId)
 	}
@@ -573,10 +581,8 @@ func (apiService *GameTask) GetGameTaskTargetInfoList(api request.GameTargetComp
 			loginMethod, _ := strconv.Atoi(api.LoginMethod)
 			apiList[i].LoginMethod = LoginMethod[loginMethod]
 			apiList[i].CreateDate = date[0]
-			apiList[i].RetainedComplete = api.RetainedComplete
-			apiList[i].PayComplete = api.PayComplete
-			apiList[i].NewComplete = api.NewComplete
-			apiList[i].Amount = api.Amount
+			apiList[i].NewComplete = api.NewComplete + api.HandNewComplete
+			apiList[i].RetainedComplete = api.RetainedComplete + api.HandRetainedComplete
 		}
 	}
 	return apiList, total, err
@@ -793,8 +799,8 @@ func (s *GameTask) TargetStatistics(date string) (apiList []control.TargetStatis
 			targetStatistics.TargetActive = target.RetainedTarget
 			targetStatistics.TargetPay = target.PayTarget
 			targetStatistics.TargetNew = target.NewTarget
-			targetStatistics.CompleteNew = target.NewComplete
-			targetStatistics.CompleteActive = target.RetainedComplete
+			targetStatistics.CompleteNew = target.NewComplete + target.HandNewComplete
+			targetStatistics.CompleteActive = target.RetainedComplete + target.HandRetainedComplete
 			targetStatistics.CompletePay = target.PayComplete
 			targetStatistics.XmyId = target.GameIdXmy
 			targetStatistics.QqId = target.TxGameId
@@ -1004,3 +1010,66 @@ func (s *GameTask) GetFeeAccountList(taskId int) (fa []FeeAccount, err error) {
 	}
 	return
 }
+
+func (exa *GameTask) TaskStatisticsList2Excel(infoList []response.GetGameTargetComplete, filePath string) error {
+	excel := excelize.NewFile()
+	excel.SetSheetRow("Sheet1", "A1", &[]string{
+		"日期",
+		"任务id",
+		"任务名称",
+		"登录方式",
+		"目标新增",
+		"目标付费",
+		"目标活跃",
+		"完成新增",
+		"完成付费",
+		"完成活跃",
+		"未完新增",
+		"未完付费",
+		"未完活跃",
+		"负责人",
+		"完成",
+		"手动付费",
+		"手动付费金额",
+		"付费流水"})
+	for i, statisticsLog := range infoList {
+		axis := fmt.Sprintf("A%d", i+2)
+		newNo := 0
+		retainedNo := 0
+		payNo := 0
+		isComplete := "是"
+		if statisticsLog.IsComplete == -1 {
+			isComplete = "否"
+		}
+		if statisticsLog.PayComplete < statisticsLog.PayTarget {
+			payNo = statisticsLog.PayTarget - statisticsLog.PayComplete
+		}
+		if statisticsLog.RetainedComplete+statisticsLog.HandRetainedComplete < statisticsLog.RetainedTarget {
+			retainedNo = statisticsLog.RetainedTarget - statisticsLog.RetainedComplete - statisticsLog.HandRetainedComplete
+		}
+		if statisticsLog.NewComplete+statisticsLog.HandNewComplete < statisticsLog.NewTarget {
+			newNo = statisticsLog.NewTarget - statisticsLog.NewComplete - statisticsLog.HandNewComplete
+		}
+		excel.SetSheetRow("Sheet1", axis, &[]interface{}{
+			statisticsLog.CreateDate[:10],
+			statisticsLog.TaskId,
+			statisticsLog.TaskName,
+			statisticsLog.LoginMethod,
+			statisticsLog.NewTarget,
+			statisticsLog.PayTarget,
+			statisticsLog.RetainedTarget,
+			statisticsLog.NewComplete + statisticsLog.NewComplete,
+			statisticsLog.PayComplete,
+			statisticsLog.RetainedComplete + statisticsLog.HandRetainedComplete,
+			newNo,
+			payNo,
+			retainedNo,
+			statisticsLog.User,
+			isComplete,
+			statisticsLog.HandPayComplete,
+			statisticsLog.HandAmountTotal,
+		})
+	}
+	err := excel.SaveAs(filePath)
+	return err
+}

+ 6 - 3
service/task/sync_data.go

@@ -175,6 +175,7 @@ func (s *SyncData) SyncTaskData() {
 	for _, gameTask := range apiList {
 		var gameTarget task.GameTargetComplete
 		roomData, _ := s.SyncRoomData(date, gameTask.TaskId)
+
 		if gameTask.GameIdXmy != "" {
 			gameIdXmy, _ := strconv.Atoi(gameTask.GameIdXmy)
 			xmyGameInfo := xmyGameData[gameIdXmy]
@@ -191,6 +192,7 @@ func (s *SyncData) SyncTaskData() {
 					_ = s.cache.SetCacheStr(context.Background(), lastPayAddUpdateTimeKey, time.Now().Unix())
 				}
 			}
+
 		} else {
 			gameTarget.NewComplete = roomData.NewCompleteLocal
 			gameTarget.PayComplete = roomData.PayCompleteLocal
@@ -199,6 +201,7 @@ func (s *SyncData) SyncTaskData() {
 			if gameTarget.RetainedComplete < roomData.RetainedComplete {
 				gameTarget.RetainedComplete = roomData.RetainedComplete
 			}
+
 		}
 		gameTarget.GameRate = roomData.GameRate
 		if gameTask.GamePortId == 5 && gameTask.LoginMethod == 2 {
@@ -212,7 +215,7 @@ func (s *SyncData) SyncTaskData() {
 			}
 		}
 		gameTarget.IsComplete = -1
-		if gameTarget.RetainedComplete >= completeTaskData[gameTask.TaskId].RetainedTarget && gameTarget.PayComplete >= completeTaskData[gameTask.TaskId].PayTarget && gameTarget.NewComplete >= completeTaskData[gameTask.TaskId].NewTarget {
+		if gameTarget.RetainedComplete+completeTaskData[gameTask.TaskId].HandRetainedComplete >= completeTaskData[gameTask.TaskId].RetainedTarget && gameTarget.PayComplete >= completeTaskData[gameTask.TaskId].PayTarget && gameTarget.NewComplete+completeTaskData[gameTask.TaskId].HandNewComplete >= 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)
@@ -241,10 +244,10 @@ func (s *SyncData) DayTargetDataStatistics() {
 		gameTargetDate.PayTarget = gameTarget.PayTarget
 		gameTargetDate.NewTarget = gameTarget.NewTarget
 		gameTargetDate.RetainedTarget = gameTarget.RetainedTarget
-		gameTargetDate.PayComplete = gameTarget.PayComplete + gameTarget.HandPayComplete
+		gameTargetDate.PayComplete = gameTarget.PayComplete
 		gameTargetDate.NewComplete = gameTarget.NewComplete + gameTarget.HandNewComplete
 		gameTargetDate.RetainedComplete = gameTarget.RetainedComplete + gameTarget.HandRetainedComplete
-		gameTargetDate.Amount = gameTarget.Amount + gameTarget.HandAmountTotal
+		gameTargetDate.Amount = gameTarget.Amount
 		gameTargetDate.GamePortId = gameTarget.GamePortId
 		gameTargetDate.User = gameTarget.User
 		gameTargetDate.TaskDate = gameTarget.CreateDate