warnning.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package warning
  2. import (
  3. "fmt"
  4. "time"
  5. "bet24.com/public"
  6. "bet24.com/servers/adminserver/config"
  7. )
  8. var w *warning
  9. type (
  10. warning struct {
  11. moneyWarning // 金币预警
  12. lotteryWarning // 话费券预警
  13. regWarning // 注册预警
  14. transferWarning // 赠送预警
  15. }
  16. moneyWarning struct {
  17. stock int // 金币存量
  18. searchTime time.Time // 金币查询时间
  19. }
  20. lotteryWarning struct {
  21. stock int // 话费券存量
  22. searchTime time.Time // 话费券查询时间
  23. }
  24. regWarning struct {
  25. searchTime time.Time // 注册查询时间
  26. regTime time.Time // 注册时间
  27. }
  28. transferWarning struct {
  29. searchTime time.Time // 赠送查询时间
  30. transferTime time.Time // 赠送时间
  31. }
  32. warningItem struct {
  33. moneyStock int // 金币存量
  34. lotteryStock int // 话费券存量
  35. regCount int // 注册用户数
  36. transferTimes int // 赠送次数
  37. }
  38. )
  39. func Run() {
  40. w = new(warning)
  41. w.moneyWarning.searchTime = time.Now()
  42. w.lotteryWarning.searchTime = time.Now()
  43. w.regWarning.searchTime = time.Now()
  44. w.regWarning.regTime = time.Now()
  45. w.transferWarning.searchTime = time.Now()
  46. w.transferWarning.transferTime = time.Now()
  47. go w.doCheck()
  48. }
  49. func (this *warning) doCheck() {
  50. ticker := time.NewTicker(10 * time.Second)
  51. go func(t *time.Ticker) {
  52. for {
  53. select {
  54. case <-t.C:
  55. this.check()
  56. }
  57. }
  58. }(ticker)
  59. }
  60. // 发送短信
  61. func (this *warning) sendSMS(msg string) {
  62. for _, tel := range config.AdminConfig.Phones {
  63. if !public.CheckMobile(tel) {
  64. continue
  65. }
  66. go public.HttpSMSSend(tel, msg, config.AdminConfig.SMSAppId, config.AdminConfig.SMSApiKey, config.AdminConfig.SMSPostUrl)
  67. }
  68. return
  69. }
  70. func (this *warning) check() {
  71. info := warningCheck(this.moneyWarning.searchTime, this.lotteryWarning.searchTime,
  72. this.regWarning.regTime, this.transferWarning.transferTime)
  73. if info == nil {
  74. return
  75. }
  76. // log.Debug("check from DBInfo ==>%+v moneyWarning.stock=%d lotteryWarning.stock=%d regSearchTime=%v regTime=%v transferSearchTime=%v transferTime=%v",
  77. // info, this.moneyWarning.stock, this.lotteryWarning.stock, this.regWarning.searchTime, this.regWarning.regTime, this.transferWarning.searchTime, this.transferWarning.transferTime)
  78. // 触发金币预警
  79. if info.moneyStock-this.moneyWarning.stock >= config.AdminConfig.MoneyValue && this.moneyWarning.stock > 0 {
  80. // 触发了警报系统!【变量】可能存在数据异常,当前值为【变量】(正常值上限【变量】,下限【变量】)
  81. msg := fmt.Sprintf(config.AdminConfig.SMSSendMsg, "YXB", info.moneyStock-this.moneyWarning.stock, config.AdminConfig.MoneyValue)
  82. // 发送短信
  83. this.sendSMS(msg)
  84. }
  85. if this.moneyWarning.searchTime.Before(time.Now()) {
  86. this.moneyWarning.stock = info.moneyStock
  87. this.moneyWarning.searchTime = time.Now().Add(time.Duration(config.AdminConfig.MoneyMinutes) * time.Minute)
  88. }
  89. // 触发话费券预警
  90. if info.lotteryStock-this.lotteryWarning.stock >= config.AdminConfig.LotteryValue && this.lotteryWarning.stock > 0 {
  91. // 触发了警报系统!【变量】可能存在数据异常,当前值为【变量】(正常值上限【变量】,下限【变量】)
  92. msg := fmt.Sprintf(config.AdminConfig.SMSSendMsg, "HFQ", info.lotteryStock-this.lotteryWarning.stock, config.AdminConfig.LotteryValue)
  93. // 发送短信
  94. this.sendSMS(msg)
  95. }
  96. if this.lotteryWarning.searchTime.Before(time.Now()) {
  97. this.lotteryWarning.stock = info.lotteryStock
  98. this.lotteryWarning.searchTime = time.Now().Add(time.Duration(config.AdminConfig.LotteryMinutes) * time.Minute)
  99. }
  100. // 触发注册预警
  101. if info.regCount >= config.AdminConfig.RegValue {
  102. // 触发了警报系统!【变量】可能存在数据异常,当前值为【变量】(正常值上限【变量】,下限【变量】)
  103. msg := fmt.Sprintf(config.AdminConfig.SMSSendMsg, "NewRegister", info.regCount, config.AdminConfig.RegValue)
  104. // 发送短信
  105. this.sendSMS(msg)
  106. }
  107. if this.regWarning.searchTime.Before(time.Now()) {
  108. this.regWarning.searchTime = time.Now().Add(time.Duration(config.AdminConfig.RegMinutes) * time.Minute)
  109. this.regWarning.regTime = time.Now().Add(time.Duration(config.AdminConfig.RegMinutes*-1) * time.Minute)
  110. } else {
  111. this.regWarning.regTime = time.Now().Add(time.Duration(config.AdminConfig.RegMinutes) * time.Minute)
  112. }
  113. // 触发赠送预警
  114. if info.transferTimes >= config.AdminConfig.TransferValue {
  115. // 触发了警报系统!【变量】可能存在数据异常,当前值为【变量】(正常值上限【变量】,下限【变量】)
  116. msg := fmt.Sprintf(config.AdminConfig.SMSSendMsg, "ZS", info.transferTimes, config.AdminConfig.TransferValue)
  117. // 发送短信
  118. this.sendSMS(msg)
  119. }
  120. if this.transferWarning.searchTime.Before(time.Now()) {
  121. this.transferWarning.searchTime = time.Now().Add(time.Duration(config.AdminConfig.TransferMinutes) * time.Minute)
  122. this.transferWarning.transferTime = time.Now().Add(time.Duration(config.AdminConfig.TransferMinutes*-1) * time.Minute)
  123. } else {
  124. this.transferWarning.transferTime = time.Now().Add(time.Duration(config.AdminConfig.TransferMinutes) * time.Minute)
  125. }
  126. return
  127. }