package events import ( "fmt" "spaceofcheng/services/models" "spaceofcheng/services/models/model" "spaceofcheng/services/utils" "sync" "github.com/zjxpcyc/tinyevent" ) var mtx sync.Mutex // EvtActions 内置 Action 列表 var EvtActions = map[string]tinyevent.Action{ // 测试 ActTest: tsAction, // 赠送券 ActGiveCoupon: giveCoupon, // 赠送卡 ActGiveCard: giveCard, } // ListenAllEvent 监听所有事件 func ListenAllEvent(orgID, caseID string) { mtx.Lock() defer mtx.Unlock() // 2018年10月30日 yansen 不区分案场 evtEngID := utils.EngineIDBy(orgID, "") evtEngine := utils.ResetEventEngineBus(evtEngID) // 所有需要执行的事件 allEvts, err := getAllEvents(orgID, "") if err != nil { utils.LogError(err) } // 刷新中控中心 for evt, acts := range allEvts { for _, actKey := range acts { act, ok := EvtActions[actKey] if ok { evtEngine.ListenEvent(evt, act) } } } } // getAllEvents 获取数据库配置 func getAllEvents(orgID, caseID string) (map[string][]string, error) { db := models.DBEngine var evts []model.SysActivity var acts []model.SysActivityAction if err := db.Where("org_id=?", orgID). // And("case_id=?", caseID). And("status=?", models.STATUS_NORMAL). Find(&evts); err != nil { utils.LogError("查询营销活动配置表失败: " + err.Error()) return nil, err } res := make(map[string][]string) for _, evtSetting := range evts { tpEvts, ok := res[evtSetting.ActivityType] if !ok { tpEvts = make([]string, 0) } acts = make([]model.SysActivityAction, 0) if err := db.Where("activity_id=?", evtSetting.ActivityId).Find(&acts); err != nil { utils.LogError("查询营销活动配置明细失败: " + err.Error()) return nil, err } for _, act := range acts { utils.LogInfo(act) // 加入 tpEvts 需要去重 if utils.StrSliceIndexOf(tpEvts, act.ActiveType) == -1 { tpEvts = append(tpEvts, act.ActiveType) } } res[evtSetting.ActivityType] = tpEvts } return res, nil } var tsAction = func(e tinyevent.Event) error { str := e.Payload.(string) fmt.Println(str) return nil } func EventInit() { // cases, err := models.GetAllCases() // if err != nil { // utils.LogError("获取有效案场列表失败: " + err.Error()) // return // } // for _, cs := range cases { // ListenAllEvent(cs.OrgId, cs.CaseId) // } // 不区分案场 orgs, err := models.GetAllOrgs() if err != nil { utils.LogError("获取机构列表失败: " + err.Error()) return } for _, org := range orgs { ListenAllEvent(org.OrgId, "") } }