| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package jobs
- import (
- "fwh-toolbox-server/domain"
- "fwh-toolbox-server/repositories"
- "time"
- "go.mongodb.org/mongo-driver/bson/primitive"
- "go.uber.org/zap"
- )
- func StatisticsShutdown(date string, data []domain.ShutdownRecord, analysisFunc func(sn string, date string) (*primitive.ObjectID, error)) error {
- _, err := time.Parse(time.DateOnly, date)
- if err != nil {
- zap.L().Error("StatisticsShutdown日期参数错误", zap.String("date", date))
- return err
- }
- item, err := statisticsShutdown(date, data, analysisFunc)
- if err != nil {
- repositories.InsertStatisticsShutdown(domain.ShutdownStatisticsItem{
- Date: date,
- Status: domain.ShutdownStatisticsError,
- })
- return err
- }
- repositories.InsertStatisticsShutdown(*item)
- return nil
- }
- // 分析统计告警关机站点
- // analysisFunc为触发站点分析任务的回调函数
- func statisticsShutdown(date string, data []domain.ShutdownRecord, analysisFunc func(sn string, date string) (*primitive.ObjectID, error)) (*domain.ShutdownStatisticsItem, error) {
- siteMap := make(map[string]domain.ShutdownStatisticsInfo)
- var siteCount domain.ShutdownStatisticsArea[uint]
- var country string
- for _, d := range data {
- sn := d.GatewayId
- activeTime := d.ActiveTime
- deviceTime := d.DeviceTime
- shutdownType := d.ShutdownType
- country = d.Country
- // 解析为 time.Time
- timeActive, err := time.Parse(time.DateTime, activeTime)
- if err != nil {
- zap.L().Error("ActiveTime解析错误", zap.String("ActiveTime", activeTime))
- return nil, err
- }
- timeAlarm, err := time.Parse(time.DateTime, deviceTime)
- if err != nil {
- zap.L().Error("DeviceTime解析错误", zap.String("DeviceTime", deviceTime))
- return nil, err
- }
- // 如果告警发生在激活之前,则不统计
- if timeAlarm.Before(timeActive) {
- continue
- }
- info := siteMap[sn]
- if info.SiteAnalysisId == nil {
- siteCount.ALL++
- switch country {
- case "美国":
- siteCount.US++
- case "澳大利亚":
- siteCount.AU++
- }
- // 触发一次站点分析
- var siteAnalysisId *primitive.ObjectID = nil
- analysisId, err := analysisFunc(sn, date)
- if err != nil {
- zap.L().Error("自动触发站点分析失败", zap.String("err", err.Error()))
- } else {
- siteAnalysisId = analysisId
- }
- info.SiteAnalysisId = siteAnalysisId
- }
- info.ShutdownTimeList = append(info.ShutdownTimeList, domain.ShutdownTimePointInfo{
- Time: deviceTime,
- Type: shutdownType,
- })
- siteMap[sn] = info
- }
- item := domain.ShutdownStatisticsItem{
- Date: date,
- Status: domain.ShutdownStatisticsComplete,
- Count: siteCount,
- Country: country,
- SiteMap: siteMap,
- }
- return &item, nil
- }
|