12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- 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)
- }
|