package simwarning import ( "context" "strings" "time" "git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/library/mcache" "git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/logic/warningnotify" "github.com/gogf/gf/v2/frame/g" ) func notifyStoredWarnings(ctx context.Context, storedWarnings []storedWarning, warnTime time.Time) { if len(storedWarnings) == 0 { return } events := make([]warningnotify.Event, 0, len(storedWarnings)) for _, stored := range storedWarnings { events = append(events, warningNotifyEvent(ctx, stored, warnTime)) } if err := warningnotify.Dispatch(ctx, events); err != nil { g.Log().Errorf(ctx, "SimWarning notify dispatch failed, warnings:%d, err:%+v", len(storedWarnings), err) } } func warningNotifyEvent(ctx context.Context, stored storedWarning, warnTime time.Time) warningnotify.Event { hit := stored.Hit operationText := "" affectOperation := autoDataCutEnabled(hit) if affectOperation { _, operationText = autoDataCutEligibility(hit) } return warningnotify.Event{ Business: warningnotify.BusinessSimWarning, EventID: stored.Record.WarnLogID, TenantID: hit.Config.TenantId, DeptID: hit.Config.CreatedDept, DeptName: warningDeptName(ctx, hit.Config.CreatedDept), CreatedBy: hit.Config.CreatedBy, Category: warningCategoryText(hit), Kind: hit.Kind, ItemType: hit.Config.ItemType, ItemID: hit.Config.ItemId, ItemCode: warnItemCodeSnapshot(hit), MSISDN: hit.Card.Msisdn, WarnStage: hit.WarnStage, WarnLevel: hit.WarnLevel, WarnMethods: warnMethodsSnapshot(hit), WarnPhones: hit.Config.WarnPhones, WarnEmails: hit.Config.WarnEmails, AppNotifyEnabled: hit.Config.AppNotifyEnabled != 0, WxTemplateID: hit.Config.WxTemplateId, UnitText: warnUnitText(hit.Config.WarnUnit), Threshold: hit.ThresholdValue, Actual: hit.ActualValue, TotalFlowMB: hit.TotalFlowMb, RemainFlowMB: hit.RemainFlowMb, Remark: hit.Remark, WarnTime: warnTime, PeriodBegin: hit.PeriodBegin, PeriodEnd: hit.PeriodEnd, AffectOperation: affectOperation, OperationText: operationText, } } func warningDeptName(ctx context.Context, deptID int64) string { if deptID <= 0 { return "" } deptName, err := mcache.GetDeptName(ctx, deptID) if err != nil { g.Log().Warningf(ctx, "SimWarning load dept name failed, deptId:%d, err:%+v", deptID, err) return "" } return strings.TrimSpace(deptName) } func warningCategoryText(hit warningHit) string { switch deriveWarnType(hit.Config.ItemType, hit.Config.WarnUnit) { case warnTypeCardTraffic: return "单卡流量预警" case warnTypeFlowPoolPercent: return "流量池预警" case warnTypeExpireDay: return "到期预警(天)" case warnTypeExpireMonth: return "到期预警(月)" default: return "预警" } } func warnUnitText(unit int) string { switch unit { case warnUnitMb: return "MB" case warnUnitPercent: return "%" case warnUnitDay: return "天" case warnUnitMonth: return "月" default: return "" } }