upcrmservice.go 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package upcrmservice
  2. import (
  3. "context"
  4. "fmt"
  5. "time"
  6. "go-common/app/admin/main/up/conf"
  7. "go-common/app/admin/main/up/dao/email"
  8. "go-common/app/admin/main/up/dao/manager"
  9. "go-common/app/admin/main/up/dao/upcrm"
  10. "go-common/app/admin/main/up/model/upcrmmodel"
  11. "go-common/app/admin/main/up/service/cache"
  12. "go-common/app/admin/main/up/service/data"
  13. "go-common/app/admin/main/up/util"
  14. "go-common/app/admin/main/up/util/timerqueue"
  15. "go-common/library/log"
  16. bm "go-common/library/net/http/blademaster"
  17. )
  18. //Service upcrm service
  19. type Service struct {
  20. crmdb *upcrm.Dao
  21. mng *manager.Dao
  22. httpClient *bm.Client
  23. mailService *email.Dao
  24. uprankCache map[int][]*upcrmmodel.UpRankInfo
  25. lastCacheDate time.Time
  26. dataService *data.Service
  27. }
  28. //New create service
  29. func New(c *conf.Config) (svc *Service) {
  30. svc = &Service{
  31. crmdb: upcrm.New(c),
  32. mng: manager.New(c),
  33. mailService: email.New(c),
  34. dataService: data.New(c),
  35. }
  36. svc.initSvc()
  37. return svc
  38. }
  39. func (s *Service) initSvc() {
  40. addScheduleWithConf(conf.Conf.TimeConf.RefreshUpRankTime, s.RefreshCache, "03:00:00", "refresh up rank data")
  41. go s.RefreshCache(time.Now())
  42. cache.LoadCache()
  43. var cacheInterval = 60 * time.Minute
  44. util.GlobalTimer.ScheduleRepeat(timerqueue.NewTimerWrapper(cache.RefreshUpTypeAsync), time.Now().Add(cacheInterval), cacheInterval)
  45. util.GlobalTimer.ScheduleRepeat(timerqueue.NewTimerWrapper(cache.ClearTagCache), time.Now().Add(cacheInterval), cacheInterval)
  46. }
  47. func addScheduleWithConf(scheduleTime string, timerFunc timerqueue.TimerFunc, defaultTime string, desc string) {
  48. if scheduleTime == "" {
  49. scheduleTime = defaultTime
  50. }
  51. var next, err = util.GetNextPeriodTime(scheduleTime, time.Hour*24, time.Now())
  52. if err != nil {
  53. panic(fmt.Sprintf("config for time fail, err=%+v", err))
  54. }
  55. log.Info("[%s] next period time is %+v", desc, next)
  56. util.GlobalTimer.ScheduleRepeat(timerqueue.NewTimerWrapper(timerFunc), next, time.Hour*24)
  57. }
  58. //SetHTTPClient set client
  59. func (s *Service) SetHTTPClient(client *bm.Client) {
  60. s.httpClient = client
  61. s.crmdb.SetHTTPClient(client)
  62. }
  63. //DataService data service
  64. func (s *Service) DataService() *data.Service {
  65. return s.dataService
  66. }
  67. //RefreshCache refresh cache
  68. func (s *Service) RefreshCache(tm time.Time) {
  69. latestDate, err := s.crmdb.GetUpRankLatestDate()
  70. if err != nil {
  71. log.Error("get latest rank time from db fail, err=%+v", err)
  72. return
  73. }
  74. if latestDate == s.lastCacheDate {
  75. log.Info("no need to refresh cache, latest cache date=%v", latestDate)
  76. return
  77. }
  78. s.refreshUpRankDate(latestDate)
  79. }
  80. //TestGetViewBase test get view
  81. func (s *Service) TestGetViewBase(c context.Context, arg *upcrmmodel.TestGetViewBaseArgs) (res interface{}, err error) {
  82. var dataMap = make(map[string]interface{})
  83. dataMap["info"], err = s.dataService.GetViewData(c, arg.Mid)
  84. res = dataMap
  85. return
  86. }