package services import ( "context" "fwh-toolbox-server/cache" "fwh-toolbox-server/domain" "fwh-toolbox-server/repositories" "time" ) // 从数据库获取告警统计 func GetAlarmStatistics(date *string) (*domain.AlarmStatisticsDashboard, error) { currDate, err := getDashboardAlarmDate() if err != nil { return nil, err } if date == nil { date = currDate } infoMap, err := GetAlarmStatisticsInfoMap(date) if err != nil { return nil, err } codeStatistics := infoMap.CodeStatistics siteStatistics := len(infoMap.SiteMap) return &domain.AlarmStatisticsDashboard{ Date: *date, CodeStatistics: codeStatistics, SiteStatistics: uint(siteStatistics), }, nil } // 从数据库获取告警统计信息详细数据 func GetAlarmStatisticsInfoMap(date *string) (*domain.AlarmStatisticsItem, error) { currDate, err := getDashboardAlarmDate() if err != nil { return nil, err } if date == nil { date = currDate } return repositories.GetStatisticsAlarm(*date) } // 对Dashboard常规数据做缓存 const ( RedisKeyDashboardAlarmDate = "fwhtoolbox:dashboard:alarmDate" RedisKeyDashboardAlarmWeekly = "fwhtoolbox:dashboard:alarmWeekly" RedisKeyDashboardAlarmYearly = "fwhtoolbox:dashboard:alarmYearly" ) func getDashboardAlarmDate() (*string, error) { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() var date string err := cache.GetJSON(ctx, RedisKeyDashboardAlarmDate, &date) if err == nil { return &date, nil // 命中缓存 } // 未命中缓存 → 查询数据库 alarmData, err := repositories.GetLatestStatisticsAlarm() if err != nil { return nil, err } date = alarmData.Date // 缓存结果 24h cache.SetJSON(ctx, RedisKeyDashboardAlarmDate, date, time.Hour*24) return &date, nil }