run.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package charge
  2. import (
  3. "context"
  4. "fmt"
  5. "time"
  6. model "go-common/app/job/main/growup/model/charge"
  7. task "go-common/app/job/main/growup/service"
  8. "go-common/library/log"
  9. "golang.org/x/sync/errgroup"
  10. )
  11. const (
  12. _layout = "2006-01-02"
  13. _layoutSec = "2006-01-02 15:04:05"
  14. )
  15. var (
  16. _dbInsert = 1
  17. _dbUpdate = 2
  18. _batchSize = 2000
  19. _limitSize = 2000
  20. startWeeklyDate time.Time
  21. startMonthlyDate time.Time
  22. )
  23. // RunAndSendMail run and send mail
  24. func (s *Service) RunAndSendMail(c context.Context, date time.Time) (err error) {
  25. var msg, msgVideo, msgColumn, msgBgm string
  26. mailReceivers := []string{"shaozhenyu@bilibili.com", "gaopeng@bilibili.com", "limengqing@bilibili.com"}
  27. var (
  28. eg errgroup.Group
  29. avBgmCharge = make(chan []*model.AvCharge, 1000)
  30. )
  31. // check task
  32. defer func() {
  33. task.GetTaskService().SetTaskStatus(c, task.TaskCreativeCharge, date.Format(_layout), err)
  34. if err != nil {
  35. msg = err.Error()
  36. }
  37. msgErr := s.email.SendMail(date, msg, "创作激励每日补贴%d年%d月%d日", mailReceivers...)
  38. if msgErr != nil {
  39. log.Error("s.email.SendMail error(%v)", msgErr)
  40. }
  41. }()
  42. err = task.GetTaskService().TaskReady(c, date.Format("2006-01-02"), task.TaskAvCharge, task.TaskCmCharge, task.TaskBgmSync)
  43. if err != nil {
  44. return
  45. }
  46. eg.Go(func() (err error) {
  47. startTime := time.Now().Unix()
  48. if err = s.runVideo(c, date, avBgmCharge); err != nil {
  49. log.Error("s.runVideo error(%v)", err)
  50. } else {
  51. msgVideo = fmt.Sprintf("%s 视频补贴计算完成,耗时%ds\n", date.Format("2006-01-02"), time.Now().Unix()-startTime)
  52. }
  53. return
  54. })
  55. eg.Go(func() (err error) {
  56. startTime := time.Now().Unix()
  57. if err = s.runColumn(c, date); err != nil {
  58. log.Error("s.runColumn error(%v)", err)
  59. } else {
  60. msgColumn = fmt.Sprintf("%s 专栏补贴计算完成,耗时%ds\n", date.Format("2006-01-02"), time.Now().Unix()-startTime)
  61. }
  62. return
  63. })
  64. eg.Go(func() (err error) {
  65. startTime := time.Now().Unix()
  66. if err = s.runBgm(c, date, avBgmCharge); err != nil {
  67. log.Error("s.runBgm error(%v)", err)
  68. } else {
  69. msgBgm = fmt.Sprintf("%s 素材补贴计算完成,耗时%ds\n", date.Format("2006-01-02"), time.Now().Unix()-startTime)
  70. }
  71. return
  72. })
  73. if err = eg.Wait(); err != nil {
  74. log.Error("run readGroup.Wait error(%v)", err)
  75. }
  76. msg = fmt.Sprintf("%s,%s,%s", msgVideo, msgColumn, msgBgm)
  77. return
  78. }
  79. func getStartWeeklyDate(date time.Time) time.Time {
  80. for date.Weekday() != time.Monday {
  81. date = date.AddDate(0, 0, -1)
  82. }
  83. return date
  84. }
  85. func getStartMonthlyDate(date time.Time) time.Time {
  86. return time.Date(date.Year(), date.Month(), 1, 0, 0, 0, 0, time.Local)
  87. }