task.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. package cron
  2. import (
  3. "gadmin/config"
  4. "gadmin/internal/antiCheating"
  5. "gadmin/internal/cron/jobs"
  6. "os"
  7. "time"
  8. "github.com/go-redis/redis"
  9. "github.com/jinzhu/now"
  10. "github.com/robfig/cron/v3"
  11. "github.com/sirupsen/logrus"
  12. )
  13. var cronTab *cron.Cron
  14. func init() {
  15. cronTab = cron.New()
  16. }
  17. func RegisterJob() {
  18. cronTab.AddFunc("@every 30s", SyncOrders) // 每30秒同步一次支付订单
  19. // cronTab.AddFunc("@every 70s", GameAlarm) // 每70秒监测一次服务进程
  20. cronTab.AddFunc("@every 300s", SyncChannel) // 每300秒同步一次渠道用户
  21. cronTab.AddFunc("@every 600s", SyncChapter) // 每10分钟同步一次章节进度
  22. cronTab.AddFunc("@every 600s", BackupEmail) // 每10分钟备份一次邮件
  23. //cronTab.AddFunc("@every 600s", BackupNotice) // 每10分钟备份一次广播
  24. cronTab.AddFunc("@every 600s", LevelOutput) // 每10分钟同步一次等级产出
  25. cronTab.AddFunc("5 6 * * *", RolesCount) // 6点 5分 统计角色等级
  26. cronTab.AddFunc("15 6 * * *", HaveRoles) // 6点 15分 统计拥有角色数据
  27. cronTab.AddFunc("25 6 * * *", ChangedStatistics) // 6点 25分 统计玩家消费,至少预留20分钟
  28. //cronTab.AddFunc("5 1 * * *", BackupRedisJob) // 1点 5分 备份redis历史key (正式服运行)
  29. //cronTab.AddFunc("* 4 * * *", DownloadBackupJob) // 4点 下载备份数据 (测试服运行)
  30. cronTab.AddFunc("@every 2h", SyncChatLog) //同步客服聊天记录
  31. cronTab.AddFunc("@every 1h", AntiCheating)
  32. // test
  33. // SyncChapter()
  34. // SyncChannel()
  35. }
  36. //////////////////////// 次日任务
  37. func BackupRedisJob() {
  38. jobs.BackupRedis.Run()
  39. }
  40. func DownloadBackupJob() {
  41. jobs.DownloadBackup.Run()
  42. }
  43. func RolesCount() {
  44. jobs.RolesCount.Run()
  45. }
  46. func HaveRoles() {
  47. jobs.HaveRoles.Run()
  48. }
  49. ///////////////////// 周期任务
  50. func SyncOrders() {
  51. jobs.SyncOrders.Run()
  52. }
  53. func SyncChatLog() {
  54. jobs.SyncCustomerServiceChatLog.Run()
  55. }
  56. func SyncChatLogDiscover() {
  57. jobs.SyncChatLogDiscover.Run()
  58. }
  59. func SyncChapter() {
  60. jobs.SyncChapter.Run()
  61. }
  62. func BackupEmail() {
  63. jobs.BackupEmail.Run()
  64. }
  65. func BackupNotice() {
  66. jobs.BackupNotice.Run()
  67. }
  68. func ChangedStatistics() {
  69. jobs.Changed.Run()
  70. }
  71. func StatisticsDPS() {
  72. //jobs.StatisticsDPS.Run()
  73. }
  74. //func EquipmentStill() {
  75. // jobs.EquipmentStill.Run()
  76. //}
  77. func RoleStill() {
  78. jobs.RoleStill.Run()
  79. }
  80. func SyncChannel() {
  81. jobs.SyncChannel.Run()
  82. }
  83. func OldGuide() {
  84. jobs.OldGuide.Run()
  85. }
  86. func FilterInitDps() {
  87. jobs.FilterInitDps.Run()
  88. }
  89. func JoinChannel() {
  90. jobs.JoinChannel.Run()
  91. }
  92. func JoinChannelByTable(table string) {
  93. jobs.JoinChannel.SetTable(table)
  94. }
  95. func ExchangePray() {
  96. jobs.ExchangePray.Run()
  97. }
  98. func Logins() {
  99. jobs.Logins.Run()
  100. }
  101. func ConvPvpKey() {
  102. jobs.ConvPvpKey.Run()
  103. }
  104. func Repay38() {
  105. //jobs.Repay38.Run()
  106. }
  107. func MaxTalents() {
  108. jobs.MaxTalents.Run()
  109. }
  110. func LevelOutput() {
  111. jobs.LevelOutput.Run()
  112. }
  113. // func GameAlarm() {
  114. // jobs.GameAlarm.Run()
  115. // }
  116. func Migrate(table string) {
  117. jobs.Migrate.Run(table)
  118. }
  119. func SuppleOrderAt() {
  120. jobs.SuppleOrderAt.Run()
  121. }
  122. func MigrateZoneBonus() {
  123. jobs.MigrateZoneBonus.Run()
  124. }
  125. func DownloadJson(jsonVersion string) {
  126. //jobs.NewSyncGoodsJson().Run(jsonVersion)
  127. }
  128. func AntiCheating() {
  129. yearMonth := time.Now().Format("200601")
  130. combat := antiCheating.NewCombat(antiCheating.WithYearMonth(yearMonth))
  131. combat.Run()
  132. }
  133. func SubMessage() {
  134. // 非正式环境运行
  135. if os.Getenv("GIN_MODE") != "release" && os.Getenv("ADMIN_IS_LOCAL") != "1" {
  136. return
  137. }
  138. config.SubMessage("queue.advOrigin", func(msg *redis.Message) {
  139. jobs.SyncChannel.Trigger()
  140. })
  141. }
  142. func Run() {
  143. go SubMessage()
  144. RegisterJob()
  145. cronTab.Start()
  146. }
  147. func RunLast() {
  148. BackupRedisJob()
  149. DownloadBackupJob()
  150. RolesCount()
  151. HaveRoles()
  152. }
  153. func RunSingle(typ string, days int) {
  154. logrus.Warn("RunSingle, typ:", typ, " , days:", days)
  155. yesterday := time.Now()
  156. for i := 0; i < days; i++ {
  157. logrus.Infoln(typ, i)
  158. switch typ {
  159. case "haveRoles":
  160. jobs.HaveRoles.RunWithDate(now.With(yesterday.AddDate(0, 0, -1-i)))
  161. default:
  162. panic("不被支持的参数")
  163. }
  164. time.Sleep(3 * time.Second)
  165. }
  166. }