register.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package events
  2. import (
  3. "fmt"
  4. "os"
  5. "bufio"
  6. "io"
  7. "strings"
  8. "math"
  9. "box-gm/utils"
  10. "time"
  11. // "log"
  12. "github.com/tealeg/xlsx"
  13. "github.com/astaxie/beego"
  14. )
  15. // 注册分布
  16. func Register_get_day_time_count(date string, serverId string) (map[int]int, int) {
  17. var timeCount = make(map[int]int)
  18. f, err := os.Open(fmt.Sprintf("%s/register-%s.log", utils.GetKeyConf("events", "path"), date))
  19. if err != nil {
  20. return timeCount, 0
  21. }
  22. defer f.Close()
  23. startTime := utils.GetTime(date+" 00:00:00")
  24. totalCount := 0
  25. buff := bufio.NewReader(f)
  26. for {
  27. line, err := buff.ReadString('\n')
  28. if err != nil || io.EOF == err {
  29. break
  30. }
  31. line = strings.TrimSpace(line)
  32. arr := strings.Split(line, ";")
  33. if serverId == "0" || arr[1] == serverId {
  34. eventTime := utils.GetTime(arr[0])
  35. sec := eventTime - startTime
  36. sec = int(math.Floor(float64(sec/300)))
  37. timeCount[sec] ++
  38. totalCount ++
  39. }
  40. }
  41. return timeCount, totalCount
  42. }
  43. func Register_get_range_day_time_count(days int, serverId string) ([]*tgSeries, []string) {
  44. var series []*tgSeries
  45. currTime := int(time.Now().Unix())
  46. dayCount := 0
  47. for {
  48. tiEvent := currTime - 86400*dayCount
  49. date := time.Unix(int64(tiEvent), 0).Format("2006-01-02")
  50. item := &tgSeries{}
  51. glCount, totalCount := Register_get_day_time_count(date, serverId)
  52. item.Name = date + fmt.Sprintf(" 总人数:%d", totalCount)
  53. for i:=0; i < 289; i++ {
  54. item.Data = append(item.Data, glCount[i])
  55. }
  56. item.MapCount = glCount
  57. // log.Printf("item[%v]", item)
  58. series = append(series, item)
  59. dayCount ++
  60. if dayCount > days {
  61. break
  62. }
  63. }
  64. var arrCate [] string
  65. loc, _ := time.LoadLocation("Local")
  66. theTime, _ := time.ParseInLocation("2006-01-02 15:04:05", time.Now().Format("2006-01-02") + " 00:00:00", loc)
  67. for i:=0; i < 289; i++ {
  68. ti := theTime.Add(time.Minute*5*time.Duration(i))
  69. arrCate = append(arrCate, fmt.Sprintf("%02d:%02d:%02d", ti.Hour(), ti.Minute(), ti.Second()))
  70. }
  71. return series, arrCate
  72. }
  73. // 保存文件
  74. func Save_register_records(series []*tgSeries, user string) string {
  75. var file *xlsx.File
  76. var sheet *xlsx.Sheet
  77. var row *xlsx.Row
  78. var err error
  79. file = xlsx.NewFile()
  80. sheet, err = file.AddSheet("注册分布")
  81. if err != nil {
  82. beego.Warn(err)
  83. return ""
  84. }
  85. row = sheet.AddRow()
  86. row.AddCell().Value = "日期"
  87. row.AddCell().Value = "时间"
  88. row.AddCell().Value = "人数"
  89. loc, _ := time.LoadLocation("Local")
  90. theTime, _ := time.ParseInLocation("2006-01-02 15:04:05", time.Now().Format("2006-01-02") + " 00:00:00", loc)
  91. for i := 0; i < len(series); i++ {
  92. item := series[i]
  93. for k, v := range item.MapCount {
  94. row = sheet.AddRow()
  95. row.AddCell().SetString(item.Name)
  96. ti := theTime.Add(time.Minute*5*time.Duration(k))
  97. row.AddCell().SetString(fmt.Sprintf("%02d:%02d:%02d", ti.Hour(), ti.Minute(), ti.Second()))
  98. row.AddCell().SetInt(v)
  99. }
  100. }
  101. name := fmt.Sprintf("./static/统计-注册-%s.xlsx", user)
  102. os.Remove(name)
  103. err = file.Save(name)
  104. if err != nil {
  105. beego.Warn(err)
  106. return ""
  107. }
  108. return name
  109. }