wangbin 3 anni fa
parent
commit
48543b1051

+ 16 - 0
model/task/game_add_fee.go

@@ -0,0 +1,16 @@
+package task
+
+import "time"
+
+type GameAddFee struct {
+	Id         uint      `json:"id"`
+	TaskName   string    `json:"task_name"`
+	CreateTime time.Time `json:"create_time"` // 创建时间
+	CreateDate time.Time `json:"create_date"`
+	Num        int       `json:"num"`
+	Target     int       `json:"target"`
+}
+
+func (GameAddFee) TableName() string {
+	return "game_add_fee"
+}

+ 26 - 0
model/typeManage/responsiblePerson.go

@@ -1,5 +1,9 @@
 package typeManage
 
+import (
+	"log-server/global"
+)
+
 type ResponsiblePerson struct {
 	Id                int64     `json:"id"`
 	Img               string    `json:"img"`
@@ -13,3 +17,25 @@ type ResponsiblePerson struct {
 	CreateTime        LocalTime `gorm:"column:create_time;" json:"createTime"`
 	UpdateTime        LocalTime `gorm:"column:update_time;" json:"updateTime"`
 }
+
+type ResponsiblePersonMobile struct {
+	Id                int64  `json:"id"`
+	Name              string `json:"name"`
+	MobilePhoneNumber string `json:"mobile_phone_number"`
+}
+
+func (m *ResponsiblePerson) GetUserInfo() (mps map[string]string, err error) {
+	var person []*ResponsiblePerson
+	err = global.GVA_DB.Table("responsible_person").Where("state = ?", 1).Find(&person).Error
+	if err != nil {
+		return
+	}
+	if len(person) == 0 {
+		return
+	}
+	var mp = map[string]string{}
+	for _, pc := range person {
+		mp[pc.Name] = pc.MobilePhoneNumber
+	}
+	return mp, err
+}

+ 23 - 1
service/task/common.go

@@ -1,6 +1,11 @@
 package task
 
-import "log-server/utils"
+import (
+	"log-server/global"
+	"log-server/model/task"
+	"log-server/utils"
+	"time"
+)
 
 type Common struct {
 }
@@ -12,7 +17,24 @@ type SendMsg struct {
 	} `json:"markdown"`
 }
 
+type SendTextMsg struct {
+	MsgType string `json:"msgtype"`
+	Text    struct {
+		MentionedMobileList []string `json:"mentioned_mobile_list"`
+	} `json:"text"`
+}
+
 func (s *Common) SendMsgData(url string, params interface{}) {
 	_, _ = utils.HttpPost(url, params)
 	return
 }
+
+func (s *Common) SaveGameAddFee(num, target int, taskName string) {
+	fee := new(task.GameAddFee)
+	fee.TaskName = taskName
+	fee.Num = num
+	fee.Target = target
+	fee.CreateDate = time.Now()
+	global.GVA_DB.Omit("create_time").Create(&fee)
+	return
+}

+ 16 - 1
service/task/game_task.go

@@ -763,7 +763,21 @@ func (s *GameTask) UpdateGameTaskTarget(requestData request.UpdateGameTaskTarget
 			global.GVA_LOG.Warn("进入修改add update")
 			lastPayAddUpdateTimeKey := fmt.Sprintf(LastPayAddUpdateTimeKey, date, gameTask.TaskId)
 			_ = s.cache.SetCacheStr(context.Background(), lastPayAddUpdateTimeKey, time.Now().Unix())
-			msg := "# 测试监控报警 " + time.Now().Format("2006-01-02 15:04:05")
+			// 本次加付费目标数据
+			lastPayAddNumKey := fmt.Sprintf(LastPayAddNumKey, date, gameTask.TaskId)
+			_ = s.cache.SetCacheStr(context.Background(), lastPayAddNumKey, requestData.PayTarget-gameTask.PayTarget)
+			payErrAddNumKey := fmt.Sprintf(PayErrAddNumKey, date, gameTask.TaskId)
+			s.common.SaveGameAddFee(requestData.PayTarget-gameTask.PayTarget, requestData.PayTarget, taskData.TaskName)
+			// 如果当前付费目标完成,加入一下逻辑
+			if gameTask.PayTarget <= gameTask.PayComplete {
+				lastPayCompletedUpdateTimeKey := fmt.Sprintf(LastPayCompletedUpdateTimeKey, date, gameTask.TaskId)
+				_ = s.cache.SetCacheStr(context.Background(), lastPayCompletedUpdateTimeKey, time.Now().Unix())
+				_ = s.cache.SetCacheStr(context.Background(), payErrAddNumKey, requestData.PayTarget-gameTask.PayTarget)
+			} else {
+				n, _ := s.cache.GetCacheNum(context.Background(), payErrAddNumKey)
+				_ = s.cache.SetCacheStr(context.Background(), payErrAddNumKey, requestData.PayTarget-gameTask.PayTarget+n)
+			}
+			msg := "# 监控报警 " + time.Now().Format("2006-01-02 15:04:05")
 			msg += "\n"
 			msg += "**" + taskData.User + "**"
 			msg += "\n"
@@ -1068,6 +1082,7 @@ func (exa *GameTask) TaskStatisticsList2Excel(infoList []response.GetGameTargetC
 			isComplete,
 			statisticsLog.HandPayComplete,
 			statisticsLog.HandAmountTotal,
+			statisticsLog.Amount,
 		})
 	}
 	err := excel.SaveAs(filePath)

+ 141 - 47
service/task/sync_data.go

@@ -13,6 +13,7 @@ import (
 	"log-server/model/task"
 	"log-server/model/task/control"
 	request2 "log-server/model/task/request"
+	"log-server/model/typeManage"
 	"log-server/service/cache"
 	"log-server/utils"
 	"strconv"
@@ -22,6 +23,8 @@ import (
 type SyncData struct {
 	GameTask GameTask
 	cache    cache.Cache
+	common   Common
+	Person   typeManage.ResponsiblePerson
 }
 
 func (s *SyncData) SyncXmyGameData(date string) (mps map[int]control.XmyPayRequestReplyData, err error) {
@@ -190,6 +193,20 @@ func (s *SyncData) SyncTaskData() {
 				if gameTarget.PayTarget > completeTaskData[gameTask.TaskId].PayTarget {
 					lastPayAddUpdateTimeKey := fmt.Sprintf(LastPayAddUpdateTimeKey, date, gameTask.TaskId)
 					_ = s.cache.SetCacheStr(context.Background(), lastPayAddUpdateTimeKey, time.Now().Unix())
+					// 本次加付费目标数据
+					lastPayAddNumKey := fmt.Sprintf(LastPayAddNumKey, date, gameTask.TaskId)
+					_ = s.cache.SetCacheStr(context.Background(), lastPayAddNumKey, gameTarget.PayTarget-completeTaskData[gameTask.TaskId].PayTarget)
+					payErrAddNumKey := fmt.Sprintf(PayErrAddNumKey, date, gameTask.TaskId)
+					s.common.SaveGameAddFee(gameTarget.PayTarget-completeTaskData[gameTask.TaskId].PayTarget, gameTarget.PayTarget, gameTask.TaskName)
+					// 如果当前付费目标完成,加入一下逻辑
+					if completeTaskData[gameTask.TaskId].PayTarget <= completeTaskData[gameTask.TaskId].PayComplete {
+						lastPayCompletedUpdateTimeKey := fmt.Sprintf(LastPayCompletedUpdateTimeKey, date, gameTask.TaskId)
+						_ = s.cache.SetCacheStr(context.Background(), lastPayCompletedUpdateTimeKey, time.Now().Unix())
+						_ = s.cache.SetCacheStr(context.Background(), payErrAddNumKey, gameTarget.PayTarget-completeTaskData[gameTask.TaskId].PayTarget)
+					} else {
+						n, _ := s.cache.GetCacheNum(context.Background(), payErrAddNumKey)
+						_ = s.cache.SetCacheStr(context.Background(), payErrAddNumKey, gameTarget.PayTarget-completeTaskData[gameTask.TaskId].PayTarget+n)
+					}
 				}
 			}
 
@@ -201,7 +218,6 @@ func (s *SyncData) SyncTaskData() {
 			if gameTarget.RetainedComplete < roomData.RetainedComplete {
 				gameTarget.RetainedComplete = roomData.RetainedComplete
 			}
-
 		}
 		gameTarget.GameRate = roomData.GameRate
 		if gameTask.GamePortId == 5 && gameTask.LoginMethod == 2 {
@@ -211,6 +227,20 @@ func (s *SyncData) SyncTaskData() {
 				if gameTarget.PayTarget > completeTaskData[gameTask.TaskId].PayTarget {
 					lastPayAddUpdateTimeKey := fmt.Sprintf(LastPayAddUpdateTimeKey, date, gameTask.TaskId)
 					_ = s.cache.SetCacheStr(context.Background(), lastPayAddUpdateTimeKey, time.Now().Unix())
+					// 本次加付费目标数据
+					lastPayAddNumKey := fmt.Sprintf(LastPayAddNumKey, date, gameTask.TaskId)
+					_ = s.cache.SetCacheStr(context.Background(), lastPayAddNumKey, gameTarget.PayTarget-completeTaskData[gameTask.TaskId].PayTarget)
+					payErrAddNumKey := fmt.Sprintf(PayErrAddNumKey, date, gameTask.TaskId)
+					s.common.SaveGameAddFee(gameTarget.PayTarget-completeTaskData[gameTask.TaskId].PayTarget, gameTarget.PayTarget, gameTask.TaskName)
+					// 如果当前付费目标完成,加入一下逻辑
+					if completeTaskData[gameTask.TaskId].PayTarget <= completeTaskData[gameTask.TaskId].PayComplete {
+						lastPayCompletedUpdateTimeKey := fmt.Sprintf(LastPayCompletedUpdateTimeKey, date, gameTask.TaskId)
+						_ = s.cache.SetCacheStr(context.Background(), lastPayCompletedUpdateTimeKey, time.Now().Unix())
+						_ = s.cache.SetCacheStr(context.Background(), payErrAddNumKey, gameTarget.PayTarget-completeTaskData[gameTask.TaskId].PayTarget)
+					} else {
+						n, _ := s.cache.GetCacheNum(context.Background(), payErrAddNumKey)
+						_ = s.cache.SetCacheStr(context.Background(), payErrAddNumKey, gameTarget.PayTarget-completeTaskData[gameTask.TaskId].PayTarget+n)
+					}
 				}
 			}
 		}
@@ -269,16 +299,18 @@ func (s *SyncData) DayTargetDataStatistics() {
 	global.GVA_DB.Omit("update_time").Create(gameTargetDates)
 }
 
-var LastMsgSendTimeKey = "%s:lastMsgSendTime"
-var LastNewCompletedKey = "%s:msgSendInfo:%d:lastNewCompleted"
-var LastPayCompletedKey = "%s:msgSendInfo:%d:lastPayCompleted"
-var LastRetainedCompletedKey = "%s:msgSendInfo:%d:lastRetainedCompleted"
-var LastNewCompletedUpdateTimeKey = "%s:msgSendInfo:%d:lastNewCompletedUpdateTime"
-var LastPayCompletedUpdateTimeKey = "%s:msgSendInfo:%d:lastPayCompletedUpdateTime"
-var LastRetainedCompletedUpdateTimeKey = "%s:msgSendInfo:%d:lastRetainedCompletedUpdateTime"
-var LastPayAddUpdateTimeKey = "%s:msgSendInfo:%d:lastPayAddUpdateTime"
-var TaskCompletedStatusKey = "%s:taskCompletedStatus"
-var LastFreeMsgSendTimeKey = "%s:lastFreeMsgSendTime"
+var LastMsgSendTimeKey = "%s:lastMsgSendTime"                                                // 上次活跃发送消息时间
+var LastNewCompletedKey = "%s:msgSendInfo:%d:lastNewCompleted"                               // 最后新增完成数量
+var LastPayCompletedKey = "%s:msgSendInfo:%d:lastPayCompleted"                               // 最后支付完成数量
+var LastRetainedCompletedKey = "%s:msgSendInfo:%d:lastRetainedCompleted"                     // 最后留存完成数量
+var LastNewCompletedUpdateTimeKey = "%s:msgSendInfo:%d:lastNewCompletedUpdateTime"           // 最后新增完成更新时间
+var LastPayCompletedUpdateTimeKey = "%s:msgSendInfo:%d:lastPayCompletedUpdateTime"           // 最后支付完成更新时间
+var LastRetainedCompletedUpdateTimeKey = "%s:msgSendInfo:%d:lastRetainedCompletedUpdateTime" // 最后留存完成更新时间
+var LastPayAddUpdateTimeKey = "%s:msgSendInfo:%d:lastPayAddUpdateTime"                       // 最后加付费时间
+var LastPayAddNumKey = "%s:msgSendInfo:%d:lastPayAddNum"                                     // 最后加付费数量
+var PayErrAddNumKey = "%s:msgSendInfo:%d:PayErrAddNum"                                       // 支付异常累加数量
+var TaskCompletedStatusKey = "%s:taskCompletedStatus"                                        // 任务完成状态-1,1
+var LastFreeMsgSendTimeKey = "%s:lastFreeMsgSendTime"                                        // 上次付费发送消息时间
 
 type CompletedInfo struct {
 	AlsoTarget       int //剩余数量
@@ -393,7 +425,7 @@ func (s *SyncData) TaskMsgSendRetainedData(ctx context.Context, completesInfo []
 	}
 
 	var taskStatistics = "%s:taskStatistics"
-	var retained = "# 测试活跃播报 "
+	var retained = "# 活跃播报 "
 	if len(mps) == 0 {
 		global.GVA_LOG.Warn(retained)
 	}
@@ -401,6 +433,7 @@ func (s *SyncData) TaskMsgSendRetainedData(ctx context.Context, completesInfo []
 	var errMsg = "**以下游戏目标效率为零:**"
 	var errMsgZ = ""
 	var sendMsg = map[string]string{}
+	var errSendMsg = map[string]string{}
 	var m int // 时间内
 	m = (int(ctime) - lastMsgSendTime) / 60
 	for taskId, data := range mps {
@@ -417,6 +450,7 @@ func (s *SyncData) TaskMsgSendRetainedData(ctx context.Context, completesInfo []
 		}
 		var taskStatistics request.TaskStatistics
 		_ = json.Unmarshal([]byte(gameTask), &taskStatistics)
+		var eMsg = "" //单条异常数据
 		var isNew = false
 		var nm int      //新增时间内
 		var rm int      //存时间内
@@ -470,35 +504,39 @@ func (s *SyncData) TaskMsgSendRetainedData(ctx context.Context, completesInfo []
 
 		// 5分钟数据没动报异常数据
 		if newErr && nm > 4 {
-			errMsgZ += "\n"
-			errMsgZ += taskStatistics.GameName
-			errMsgZ += ",新增"
+			eMsg += "\n"
+			eMsg += taskStatistics.GameName
+			eMsg += ",新增"
 			if nm >= 60 {
-				errMsgZ += "("
-				errMsgZ += strconv.Itoa(nm / 60)
-				errMsgZ += "小时内)"
+				eMsg += "("
+				eMsg += strconv.Itoa(nm / 60)
+				eMsg += "小时内)"
 			} else {
-				errMsgZ += "("
-				errMsgZ += strconv.Itoa(nm)
-				errMsgZ += "分钟内)"
+				eMsg += "("
+				eMsg += strconv.Itoa(nm)
+				eMsg += "分钟内)"
 			}
 		}
 		if retainedErr && rm > 4 {
 			if !newErr {
-				errMsgZ += "\n"
-				errMsgZ += taskStatistics.GameName
+				eMsg += "\n"
+				eMsg += taskStatistics.GameName
 			}
-			errMsgZ += ",活跃"
+			eMsg += ",活跃"
 			if rm >= 60 {
-				errMsgZ += "("
-				errMsgZ += strconv.Itoa(rm / 60)
-				errMsgZ += "小时内)"
+				eMsg += "("
+				eMsg += strconv.Itoa(rm / 60)
+				eMsg += "小时内)"
 			} else {
-				errMsgZ += "("
-				errMsgZ += strconv.Itoa(rm)
-				errMsgZ += "分钟内)"
+				eMsg += "("
+				eMsg += strconv.Itoa(rm)
+				eMsg += "分钟内)"
 			}
 		}
+		if eMsg != "" {
+			errMsgZ += eMsg
+			errSendMsg[name] += eMsg
+		}
 		sendMsg[name] += ","
 		if m >= 60 {
 			sendMsg[name] += strconv.Itoa(m / 60)
@@ -510,28 +548,68 @@ func (s *SyncData) TaskMsgSendRetainedData(ctx context.Context, completesInfo []
 		//sendMsg[name] += rate
 		sendMsg[name] += fmt.Sprintf("<font color=\"warning\">%s</font>", rate)
 	}
+	hour := time.Now().Hour()
+	msg := ""
+	mpsPerson, _ := s.Person.GetUserInfo()
+	//b1 ,_ := json.Marshal(mpsPerson)
+	//global.GVA_LOG.Warn(string(b1))
+	var mobile []string
+	if hour >= 16 {
+		if len(sendMsg) == 0 {
+			return
+		}
+		if len(mps) != 0 && len(errSendMsg) != 0 {
+			for name, _ := range errSendMsg {
+				mobile = append(mobile, mpsPerson[name])
+			}
+		}
+		for name, msg := range sendMsg {
+			retained += "\n"
+			retained += "**" + name + "**"
+			retained += msg
+		}
+		msg = retained
+		if errMsgZ != "" {
+			msg += "\n"
+			//msg += errMsg + errMsgZ
+			msg += fmt.Sprintf("<font color=\"warning\">%s</font>", errMsg+errMsgZ)
+		}
+	} else {
+		if errMsgZ != "" {
 
-	if len(sendMsg) == 0 {
-		return
-	}
-	for name, msg := range sendMsg {
-		retained += "\n"
-		retained += "**" + name + "**"
-		retained += msg
-	}
-	msg := retained
-	if errMsgZ != "" {
-		msg += "\n"
-		//msg += errMsg + errMsgZ
-		msg += fmt.Sprintf("<font color=\"warning\">%s</font>", errMsg+errMsgZ)
+			//msg += errMsg + errMsgZ
+
+		}
+		if len(mps) != 0 && len(errSendMsg) != 0 {
+			msg += "# 活跃播报 "
+			msg += errMsg
+			for name, m := range errSendMsg {
+				mobile = append(mobile, mpsPerson[name])
+				msg += "\n"
+				msg += "**" + name + "**"
+				msg += fmt.Sprintf("<font color=\"warning\">%s</font>", m)
+			}
+		}
 	}
-	global.GVA_LOG.Warn(msg)
+	//global.GVA_LOG.Warn(msg)
 	_ = s.cache.SetCacheStr(ctx, lastMsgSendTimeKey, time.Now().Unix())
+	if msg == "" {
+		return
+	}
 	url := "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=7d095d5b-8240-45fd-a68c-baff3628d83b"
 	var sendData SendMsg
 	sendData.MsgType = "markdown"
 	sendData.Markdown.Content = msg
 	s.SendMsgData(url, sendData)
+
+	if len(mobile) != 0 {
+		var sendTextData SendTextMsg
+		sendTextData.MsgType = "text"
+		sendTextData.Text.MentionedMobileList = mobile
+		//b ,_ := json.Marshal(sendTextData)
+		//global.GVA_LOG.Warn(string(b))
+		s.SendMsgData(url, sendTextData)
+	}
 }
 
 func (s *SyncData) TaskMsgSendFreeData(ctx context.Context, completesInfo []task.GameTargetComplete, ctime int64, date, lastFreeMsgSendTimeKey string, isOne bool) {
@@ -576,13 +654,15 @@ func (s *SyncData) TaskMsgSendFreeData(ctx context.Context, completesInfo []task
 		return
 	}
 	var taskStatistics = "%s:taskStatistics"
-	var retained = "测试付费播报 "
+	var retained = "付费播报 "
 	retained += fmt.Sprintf("<font color=\"warning\">%s</font>", time.Now().Format("2006-01-02 15:04:05"))
 	var errMsg = "**以下游戏付费效率为零:**"
 	var errMsgZ = ""
 	var sendMsg = map[string]string{}
 	var m int //时间内
 	m = (int(ctime) - lastFreeMsgSendTime) / 60
+	mpsPerson, _ := s.Person.GetUserInfo()
+	var mobile []string
 	for taskId, data := range RateMp {
 		if data.AlsoTarget <= 0 {
 			continue
@@ -616,20 +696,28 @@ func (s *SyncData) TaskMsgSendFreeData(ctx context.Context, completesInfo []task
 		// 5分钟数据没动报异常数据
 		if data.TimeRate/60 >= 4 {
 			if data.Rate == 0 {
+				lastPayAddNumKey := fmt.Sprintf(LastPayAddNumKey, date, data.TaskId)
+				payErrAddNumKey := fmt.Sprintf(PayErrAddNumKey, date, data.TaskId)
+				numErr, _ := s.cache.GetCacheNum(context.Background(), payErrAddNumKey)
+				lastAddFeeNumErr, _ := s.cache.GetCacheNum(context.Background(), lastPayAddNumKey)
 				errMsgZ += "\n"
 				errMsgZ += taskStatistics.GameName
 				errMsgZ += "("
 				if data.TimeRate/60 >= 60 {
 					errMsgZ += strconv.Itoa(data.TimeRate / 60 / 60)
-					errMsgZ += "小时内)"
+					errMsgZ += "小时内(+" + strconv.Itoa(numErr) + "))"
 				} else {
 					errMsgZ += strconv.Itoa(data.TimeRate / 60)
-					errMsgZ += "分钟内)"
+					errMsgZ += "分钟内(+" + strconv.Itoa(numErr) + "))"
 				}
 				errMsgZ += ","
 				errMsgZ += "最后加付费时间 "
 				t := time.Unix(int64(data.AddPayUpdateTime), 0)
 				errMsgZ += t.Format("15:04:05")
+				errMsgZ += "(+" + strconv.Itoa(lastAddFeeNumErr) + ")"
+				if _, ok := mpsPerson[name]; ok {
+					mobile = append(mobile, mpsPerson[name])
+				}
 			}
 		}
 		sendMsg[name] += ","
@@ -664,6 +752,12 @@ func (s *SyncData) TaskMsgSendFreeData(ctx context.Context, completesInfo []task
 	sendData.MsgType = "markdown"
 	sendData.Markdown.Content = msg
 	s.SendMsgData(url, sendData)
+	if len(mobile) != 0 {
+		var sendTextData SendTextMsg
+		sendTextData.MsgType = "text"
+		sendTextData.Text.MentionedMobileList = mobile
+		s.SendMsgData(url, sendTextData)
+	}
 	return
 }