package handler import ( "GtDataStore/app/cmd/events/internal/logic/job" "GtDataStore/app/model" "context" "metawant.greentech.com.cn/gaoyagang/gt-common/rabbitMQ" "time" ) const ( EVENT_NOTIFY = "EVENT_NOTIFY" EVENT_SINGLE_ITEM = "SINGLE_ITEM_EVENT" // 单点位值事件 EVENT_MULTI_ITEM = "MULTI_ITEM_EVENT" // 多点位值事件 EVTNE_NOTIFY_KEY_FORMAT = "EVENT:NOFITY:%d:%s" // 事件通知通道 %d: 项目名称 %s: 事件名称 ) type ( // 事件信息, 单点位 eventInfo struct { ProjectId int64 // 项目ID DeviceCode string // 设备位号 Item string // 点位名称 EventId int64 // 事件ID EventName string // 事件名称 OldValue string // 点位旧值 NewValue string // 新值 Time time.Time // 新值时间 MsgTime time.Time // 消息时间 } // 事件信息, 多点位 multiEventInfo struct { ProjectId int64 // 项目ID DeviceCode string // 设备位号 Items []string // 点位名称 EventId int64 // 事件ID EventName string // 事件名称 OldValues map[string]string // 点位旧值 NewValues map[string]string // 新值 Times map[string]time.Time // 新值时间 MsgTime time.Time // 消息时间 } EventBindCache struct { Expire time.Time Data []model.DcEventBind } EventBindCacheMap map[string]EventBindCache ) var ( eventChan chan eventInfo multiEventChan chan multiEventInfo producter *rabbitMQ.Producter EventIntervalTable = map[string]time.Duration{ EVENT_SINGLE_ITEM: 2 * time.Second, EVENT_MULTI_ITEM: 2 * time.Second, } EventHandlerTable = map[string]func(ctx context.Context, task *job.Task, technologyName string) error{ EVENT_SINGLE_ITEM: EventSingle, EVENT_MULTI_ITEM: EventMulti, } eventBindCacheTable = EventBindCacheMap{ EVENT_SINGLE_ITEM: EventBindCache{}, EVENT_MULTI_ITEM: EventBindCache{}, } ) func (t EventBindCacheMap) GetCache(technologyName string) []model.DcEventBind { if cache, ok := t[technologyName]; ok { if time.Now().After(cache.Expire) { t[technologyName] = EventBindCache{} return nil } return cache.Data } else { return nil } } func (t EventBindCacheMap) SetCache(technologyName string, data []model.DcEventBind, expire time.Time) { t[technologyName] = EventBindCache{ Expire: expire, Data: data, } } func init() { eventChan = make(chan eventInfo, 50) multiEventChan = make(chan multiEventInfo, 50) }