| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- 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)
- for _, d := range data {
- sn := d.GatewayId
- activeTime := d.ActiveTime
- deviceTime := d.DeviceTime
- // 解析为 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 {
- // 触发一次站点分析
- 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, deviceTime)
- siteMap[sn] = info
- }
- item := domain.ShutdownStatisticsItem{
- Date: date,
- Status: domain.ShutdownStatisticsComplete,
- SiteMap: siteMap,
- }
- return &item, nil
- }
|