123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package events
  2. import (
  3. "fmt"
  4. "spaceofcheng/services/models"
  5. "spaceofcheng/services/models/model"
  6. "spaceofcheng/services/utils"
  7. "sync"
  8. "github.com/zjxpcyc/tinyevent"
  9. )
  10. var mtx sync.Mutex
  11. // EvtActions 内置 Action 列表
  12. var EvtActions = map[string]tinyevent.Action{
  13. // 测试
  14. ActTest: tsAction,
  15. // 赠送券
  16. ActGiveCoupon: giveCoupon,
  17. // 赠送卡
  18. ActGiveCard: giveCard,
  19. }
  20. // ListenAllEvent 监听所有事件
  21. func ListenAllEvent(orgID, caseID string) {
  22. mtx.Lock()
  23. defer mtx.Unlock()
  24. // 2018年10月30日 yansen 不区分案场
  25. evtEngID := utils.EngineIDBy(orgID, "")
  26. evtEngine := utils.ResetEventEngineBus(evtEngID)
  27. // 所有需要执行的事件
  28. allEvts, err := getAllEvents(orgID, "")
  29. if err != nil {
  30. utils.LogError(err)
  31. }
  32. // 刷新中控中心
  33. for evt, acts := range allEvts {
  34. for _, actKey := range acts {
  35. act, ok := EvtActions[actKey]
  36. if ok {
  37. evtEngine.ListenEvent(evt, act)
  38. }
  39. }
  40. }
  41. }
  42. // getAllEvents 获取数据库配置
  43. func getAllEvents(orgID, caseID string) (map[string][]string, error) {
  44. db := models.DBEngine
  45. var evts []model.SysActivity
  46. var acts []model.SysActivityAction
  47. if err := db.Where("org_id=?", orgID).
  48. // And("case_id=?", caseID).
  49. And("status=?", models.STATUS_NORMAL).
  50. Find(&evts); err != nil {
  51. utils.LogError("查询营销活动配置表失败: " + err.Error())
  52. return nil, err
  53. }
  54. res := make(map[string][]string)
  55. for _, evtSetting := range evts {
  56. tpEvts, ok := res[evtSetting.ActivityType]
  57. if !ok {
  58. tpEvts = make([]string, 0)
  59. }
  60. acts = make([]model.SysActivityAction, 0)
  61. if err := db.Where("activity_id=?", evtSetting.ActivityId).Find(&acts); err != nil {
  62. utils.LogError("查询营销活动配置明细失败: " + err.Error())
  63. return nil, err
  64. }
  65. for _, act := range acts {
  66. utils.LogInfo(act)
  67. // 加入 tpEvts 需要去重
  68. if utils.StrSliceIndexOf(tpEvts, act.ActiveType) == -1 {
  69. tpEvts = append(tpEvts, act.ActiveType)
  70. }
  71. }
  72. res[evtSetting.ActivityType] = tpEvts
  73. }
  74. return res, nil
  75. }
  76. var tsAction = func(e tinyevent.Event) error {
  77. str := e.Payload.(string)
  78. fmt.Println(str)
  79. return nil
  80. }
  81. func EventInit() {
  82. // cases, err := models.GetAllCases()
  83. // if err != nil {
  84. // utils.LogError("获取有效案场列表失败: " + err.Error())
  85. // return
  86. // }
  87. // for _, cs := range cases {
  88. // ListenAllEvent(cs.OrgId, cs.CaseId)
  89. // }
  90. // 不区分案场
  91. orgs, err := models.GetAllOrgs()
  92. if err != nil {
  93. utils.LogError("获取机构列表失败: " + err.Error())
  94. return
  95. }
  96. for _, org := range orgs {
  97. ListenAllEvent(org.OrgId, "")
  98. }
  99. }