|
|
@@ -24,7 +24,8 @@ import (
|
|
|
|
|
|
type ServiceStatisticsLog struct {
|
|
|
loging2.LogicalLog
|
|
|
- Person typeManage.ResponsiblePerson
|
|
|
+ Person typeManage.ResponsiblePerson
|
|
|
+ GameTargetComplete task.GameTargetComplete
|
|
|
}
|
|
|
|
|
|
var StatisticsCompletedKey = "%s:StatisticsCompleted"
|
|
|
@@ -1361,3 +1362,156 @@ func (s *ServiceStatisticsLog) ComputerSevenStatistics(ctx context.Context, api
|
|
|
}
|
|
|
return statisticsLogsComputer, total, err
|
|
|
}
|
|
|
+
|
|
|
+// 定时统计设备信息
|
|
|
+func (s *ServiceStatisticsLog) DeviceStatistics() {
|
|
|
+ var devices []log.DeviceLog
|
|
|
+ date := time.Now().Format("2006-01-02")
|
|
|
+ db := global.GVA_DB.Model(&log.DeviceLog{})
|
|
|
+ db.Where("create_date = ?", date)
|
|
|
+ db.Where("is_err = ?", 1)
|
|
|
+ db.Group("game_id")
|
|
|
+ db.Select("game_id")
|
|
|
+ db.Find(&devices)
|
|
|
+ if len(devices) == 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ completeData, _ := s.GameTargetComplete.CompleteTaskData(date)
|
|
|
+ ctx := context.Background()
|
|
|
+ for _, game := range devices {
|
|
|
+ deviceLog := new(log.DeviceStatistics)
|
|
|
+ deviceLog.GameId = game.GameId
|
|
|
+ gameDeviceAccountErrKey := fmt.Sprintf(loging2.GameDeviceAccountErrKey, date, game.GameId)
|
|
|
+ gameDeviceErrKey := fmt.Sprintf(loging2.GameDeviceErrKey, date, game.GameId)
|
|
|
+ deviceLog.AccountErrNum, _ = s.GetCacheNum(ctx, gameDeviceAccountErrKey)
|
|
|
+ deviceLog.DeviceErrNum, _ = s.GetCacheNum(ctx, gameDeviceErrKey)
|
|
|
+ n, _ := s.LogicalLog.NodeLogGetNum(ctx, date, game.GameId, "4300000", loging2.OkStatus, 0)
|
|
|
+ r, _ := s.LogicalLog.NodeLogGetNum(ctx, date, game.GameId, "4300000", loging2.OkStatus, 1)
|
|
|
+ deviceLog.SimulatorStartNum = n + r
|
|
|
+ deviceLog.NewComplete = completeData[game.GameId].NewComplete
|
|
|
+ deviceLog.RetainedComplete = completeData[game.GameId].RetainedComplete
|
|
|
+ if deviceLog.DeviceErrNum != 0 {
|
|
|
+ deviceLog.DeviceErrRate = utils.Decimal(float64(deviceLog.DeviceErrNum) / float64(deviceLog.RetainedComplete) * 100)
|
|
|
+ }
|
|
|
+ if deviceLog.AccountErrNum != 0 {
|
|
|
+ deviceLog.AccountErrRate = utils.Decimal(float64(deviceLog.AccountErrNum) / float64(deviceLog.NewComplete) * 100)
|
|
|
+ }
|
|
|
+ deviceLog.CreateDate = date
|
|
|
+ if !errors.Is(global.GVA_DB.Where("create_date = ?", date).Where("game_id = ?", game.GameId).First(&log.DeviceStatistics{}).Error, gorm.ErrRecordNotFound) {
|
|
|
+ global.GVA_DB.Where("create_date = ?", date).Where("game_id = ?", game.GameId).Omit("create_date,game_id").Updates(deviceLog)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ global.GVA_DB.Save(deviceLog)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (s *ServiceStatisticsLog) GetDeviceStatistics(ctx context.Context, api log.DeviceStatistics, info request.PageInfo, order string, desc bool) (statistics []*log.DeviceStatistics, total int64, err error) {
|
|
|
+ if api.CreateDate == "" {
|
|
|
+ api.CreateDate = time.Now().Format("2006-01-02")
|
|
|
+ }
|
|
|
+ db := global.GVA_DB.Model(&log.DeviceStatistics{})
|
|
|
+ db = db.Where("create_date = ?", api.CreateDate)
|
|
|
+ if api.GameId != 0 {
|
|
|
+ db = db.Where("game_id = ?", api.GameId)
|
|
|
+ }
|
|
|
+ err = db.Count(&total).Error
|
|
|
+ if err != nil {
|
|
|
+ return nil, 0, err
|
|
|
+ }
|
|
|
+ limit := info.PageSize
|
|
|
+ offset := info.PageSize * (info.Page - 1)
|
|
|
+ db = db.Limit(limit).Offset(offset)
|
|
|
+ if order != "" {
|
|
|
+ var OrderStr string
|
|
|
+ orderMap := make(map[string]bool, 3)
|
|
|
+ orderMap["device_err_num"] = true
|
|
|
+ orderMap["game_id"] = true
|
|
|
+ orderMap["account_err_num"] = true
|
|
|
+ if orderMap[order] {
|
|
|
+ if desc {
|
|
|
+ OrderStr = order + " desc"
|
|
|
+ } else {
|
|
|
+ OrderStr = order
|
|
|
+ }
|
|
|
+ } else { // didn't matched any order key in `orderMap`
|
|
|
+ global.GVA_LOG.Error("获取失败!", zap.Error(err))
|
|
|
+ return statistics, total, err
|
|
|
+ }
|
|
|
+ err = db.Order(OrderStr).Find(&statistics).Error
|
|
|
+ } else {
|
|
|
+ err = db.Order("id").Find(&statistics).Error
|
|
|
+ }
|
|
|
+ for _, statistic := range statistics {
|
|
|
+ statistic.CreateDate = api.CreateDate
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func (s *ServiceStatisticsLog) GetDeviceInfo(ctx context.Context, api log.DeviceLog, info request.PageInfo, order string, desc bool) (deviceLogs []*log.DeviceLog, total int64, err error) {
|
|
|
+ if api.CreateDate == "" {
|
|
|
+ api.CreateDate = time.Now().Format("2006-01-02")
|
|
|
+ }
|
|
|
+ db := global.GVA_DB.Model(&log.DeviceLog{})
|
|
|
+ if api.GameId != 0 {
|
|
|
+ db = db.Where("game_id = ?", api.GameId)
|
|
|
+ } else {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ db = db.Where("create_date = ?", api.CreateDate)
|
|
|
+ if api.IsErr != 0 {
|
|
|
+ db = db.Where("is_err = ?", api.IsErr)
|
|
|
+ }
|
|
|
+ err = db.Count(&total).Error
|
|
|
+ if err != nil {
|
|
|
+ return nil, 0, err
|
|
|
+ }
|
|
|
+ limit := info.PageSize
|
|
|
+ offset := info.PageSize * (info.Page - 1)
|
|
|
+ db = db.Limit(limit).Offset(offset)
|
|
|
+ if order != "" {
|
|
|
+ var OrderStr string
|
|
|
+ // 设置有效排序key 防止sql注入
|
|
|
+ // 感谢 Tom4t0 提交漏洞信息
|
|
|
+ orderMap := make(map[string]bool, 3)
|
|
|
+ orderMap["game_id"] = true
|
|
|
+ if orderMap[order] {
|
|
|
+ if desc {
|
|
|
+ OrderStr = order + " desc"
|
|
|
+ } else {
|
|
|
+ OrderStr = order
|
|
|
+ }
|
|
|
+ } else { // didn't matched any order key in `orderMap`
|
|
|
+ global.GVA_LOG.Error("获取失败!", zap.Error(err))
|
|
|
+ return deviceLogs, total, err
|
|
|
+ }
|
|
|
+ err = db.Order(OrderStr).Find(&deviceLogs).Error
|
|
|
+ } else {
|
|
|
+ err = db.Order("id").Find(&deviceLogs).Error
|
|
|
+ }
|
|
|
+ for _, statistic := range deviceLogs {
|
|
|
+ statistic.CreateDate = api.CreateDate
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func (s *ServiceStatisticsLog) GetDeviceContrastInfo(ctx context.Context, api log.DeviceLog) (deviceLogs []log.DeviceLog, err error) {
|
|
|
+ db := global.GVA_DB.Model(&log.DeviceLog{})
|
|
|
+ var device log.DeviceLog
|
|
|
+ err = db.Where("id = ?", api.Id).First(&device).Error
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ if device.ErrStatus == 3 {
|
|
|
+ err = global.GVA_DB.Where("game_id = ?", device.GameId).Where("account = ?", device.Account).Where("id < ?", device.Id).Order("id desc").First(&deviceLogs).Error
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ err = global.GVA_DB.Where("create_date = ?", device.CreateDate).Where("game_id = ?", device.GameId).Where("device_hex = ?", device.DeviceHex).Where("id < ?", device.Id).Order("id desc").Limit(10).Find(&deviceLogs).Error
|
|
|
+ }
|
|
|
+ deviceLogs = append(deviceLogs, device)
|
|
|
+ for _, statistic := range deviceLogs {
|
|
|
+ statistic.CreateDate = api.CreateDate
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|