videomgr.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package video
  2. import (
  3. "fmt"
  4. "sort"
  5. "time"
  6. "bet24.com/log"
  7. )
  8. var mgr *videoManager
  9. type videoManager struct {
  10. playStat_list map[string]*playStatInfo
  11. source_list map[string][]*sourceInfo
  12. index_list map[string]*indexInfo
  13. userStat_list map[string]*userStatInfo
  14. }
  15. func Run() {
  16. mgr = new(videoManager)
  17. mgr.playStat_list = make(map[string]*playStatInfo)
  18. mgr.source_list = make(map[string][]*sourceInfo)
  19. mgr.index_list = make(map[string]*indexInfo)
  20. mgr.userStat_list = make(map[string]*userStatInfo)
  21. }
  22. func (this *videoManager) playStat(beginTime, endTime string, partnerId int) (int, int, int, []*playStatInfo) {
  23. var (
  24. list []*playStatInfo
  25. totalReqTimes int
  26. totalPlayTimes int
  27. totalFailTimes int
  28. )
  29. end, _ := time.Parse(dateFormat, endTime)
  30. for begin, _ := time.Parse(dateFormat, beginTime); !begin.After(end); begin = begin.AddDate(0, 0, 1) {
  31. dateStr := begin.Format(dateFormat)
  32. key := fmt.Sprintf("%s_%d", dateStr, partnerId)
  33. v, ok := this.playStat_list[key]
  34. if ok {
  35. totalReqTimes += v.ReqTimes
  36. totalPlayTimes += v.PlayTimes
  37. totalFailTimes += v.FailTimes
  38. list = append(list, v)
  39. continue
  40. }
  41. for _, v := range playStat(dateStr, dateStr, partnerId) {
  42. log.Debug("videomgr.playStat ==> %+v", v)
  43. totalReqTimes += v.ReqTimes
  44. totalPlayTimes += v.PlayTimes
  45. totalFailTimes += v.FailTimes
  46. if begin.Format(dateFormat) == time.Now().Format(dateFormat) {
  47. list = append(list, v)
  48. continue
  49. }
  50. key = fmt.Sprintf("%s_%d", v.DateFlag, partnerId)
  51. this.playStat_list[key] = v
  52. list = append(list, v)
  53. }
  54. }
  55. sort.SliceStable(list, func(i, j int) bool {
  56. return list[i].DateFlag > list[j].DateFlag
  57. })
  58. return totalReqTimes, totalPlayTimes, totalFailTimes, list
  59. }
  60. func (this *videoManager) sourceStat(beginTime, endTime string, partnerId int) []*sourceInfo {
  61. var list []*sourceInfo
  62. end, _ := time.Parse(dateFormat, endTime)
  63. for begin, _ := time.Parse(dateFormat, beginTime); !begin.After(end); begin = begin.AddDate(0, 0, 1) {
  64. dateStr := begin.Format(dateFormat)
  65. key := fmt.Sprintf("%s_%d", dateStr, partnerId)
  66. v, ok := this.source_list[key]
  67. if ok {
  68. list = append(list, v...)
  69. continue
  70. }
  71. for _, v := range source(dateStr, dateStr, partnerId) {
  72. log.Debug("videomgr.sourceStat ==> %+v", v)
  73. if begin.Format(dateFormat) == time.Now().Format(dateFormat) {
  74. list = append(list, v)
  75. continue
  76. }
  77. key = fmt.Sprintf("%s_%d", v.DateFlag, partnerId)
  78. this.source_list[key] = append(this.source_list[key], v)
  79. list = append(list, v)
  80. }
  81. }
  82. sort.SliceStable(list, func(i, j int) bool {
  83. return list[i].DateFlag > list[j].DateFlag
  84. })
  85. return list
  86. }
  87. func (this *videoManager) indexStat(beginTime, endTime string) []*indexInfo {
  88. var list []*indexInfo
  89. end, _ := time.Parse(dateFormat, endTime)
  90. for begin, _ := time.Parse(dateFormat, beginTime); !begin.After(end); begin = begin.AddDate(0, 0, 1) {
  91. dateStr := begin.Format(dateFormat)
  92. v, ok := this.index_list[dateStr]
  93. if ok {
  94. list = append(list, v)
  95. continue
  96. }
  97. for _, v := range index(dateStr, dateStr) {
  98. log.Debug("videomgr.indexStat ==> %+v", v)
  99. if begin.Format(dateFormat) == time.Now().Format(dateFormat) {
  100. list = append(list, v)
  101. continue
  102. }
  103. this.index_list[v.DateFlag] = v
  104. list = append(list, v)
  105. }
  106. }
  107. sort.SliceStable(list, func(i, j int) bool {
  108. return list[i].DateFlag < list[j].DateFlag
  109. })
  110. return list
  111. }
  112. func (this *videoManager) userStat(beginTime, endTime string) []*userStatInfo {
  113. var list []*userStatInfo
  114. end, _ := time.Parse(dateFormat, endTime)
  115. for begin, _ := time.Parse(dateFormat, beginTime); !begin.After(end); begin = begin.AddDate(0, 0, 1) {
  116. dateStr := begin.Format(dateFormat)
  117. v, ok := this.userStat_list[dateStr]
  118. if ok {
  119. list = append(list, v)
  120. continue
  121. }
  122. for _, v := range userStat(dateStr, dateStr) {
  123. log.Debug("videomgr.userStat ==> %+v", v)
  124. if begin.Format(dateFormat) == time.Now().Format(dateFormat) {
  125. list = append(list, v)
  126. continue
  127. }
  128. this.userStat_list[v.DateFlag] = v
  129. list = append(list, v)
  130. }
  131. }
  132. sort.SliceStable(list, func(i, j int) bool {
  133. return list[i].DateFlag > list[j].DateFlag
  134. })
  135. return list
  136. }