rtpay.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package events
  2. import (
  3. "bufio"
  4. "fmt"
  5. "box-gm/utils"
  6. "io"
  7. "math"
  8. "os"
  9. "strings"
  10. "time"
  11. "github.com/astaxie/beego"
  12. "github.com/tealeg/xlsx"
  13. )
  14. func RtPay_get_day_time_count(date string, minutes int, serverId string) (map[int]int, int, int) {
  15. var timeCount = make(map[int]int)
  16. f, err := os.Open(fmt.Sprintf("%s/pay-%s.log", utils.GetKeyConf("events", "path"), date))
  17. curCharge := 0
  18. tolCharge := 0
  19. if err != nil {
  20. return timeCount, curCharge, tolCharge
  21. }
  22. defer f.Close()
  23. startTime := utils.GetTime(date + " 00:00:00")
  24. buff := bufio.NewReader(f)
  25. for {
  26. line, err := buff.ReadString('\n')
  27. if err != nil || io.EOF == err {
  28. break
  29. }
  30. line = strings.TrimSpace(line)
  31. arr := strings.Split(line, ";")
  32. if serverId == "0" || arr[1] == serverId {
  33. eventTime := utils.GetTime(arr[0])
  34. sec := eventTime - startTime
  35. sec = int(math.Floor(float64(sec) / float64(minutes*60)))
  36. // pid := utils.StringToInt(arr[2])
  37. params := strings.Split(arr[3], ",")
  38. //params :
  39. // name,orderId,shopId,isFirstCharge,price
  40. // test14,GM,201,true,499
  41. price := 0
  42. if len(params) > 4 {
  43. price = utils.StringToInt(params[4])
  44. if utils.GetDiffDays(eventTime, startTime) == 0 {
  45. curCharge += price
  46. }
  47. tolCharge += price
  48. }
  49. if price > 0 {
  50. timeCount[sec] = timeCount[sec] + price
  51. }
  52. }
  53. }
  54. return timeCount, curCharge, tolCharge
  55. }
  56. func RtPay_get_range_day_time_count(days, minutes int, serverId string) ([]*tgSeries, []string, int, int) {
  57. var series []*tgSeries
  58. currTime := int(time.Now().Unix())
  59. dayCount := 0
  60. curCharge := 0
  61. tolCharge := 0
  62. t := 24 * 60 / minutes
  63. for {
  64. tiEvent := currTime - 86400*dayCount
  65. date := time.Unix(int64(tiEvent), 0).Format("2006-01-02")
  66. // m, _ := time.ParseDuration("1m")
  67. item := &tgSeries{}
  68. item.Name = date
  69. glCount, cur, tol := RtPay_get_day_time_count(date, minutes, serverId)
  70. if utils.GetDiffDays(tiEvent, currTime) == 0 {
  71. curCharge = cur
  72. }
  73. tolCharge += tol
  74. for i := 0; i < t; i++ {
  75. item.Data = append(item.Data, glCount[i])
  76. }
  77. item.MapCount = glCount
  78. // log.Printf("item[%v]", item)
  79. series = append(series, item)
  80. dayCount++
  81. if dayCount > days {
  82. break
  83. }
  84. }
  85. var arrCate []string
  86. loc, _ := time.LoadLocation("Local")
  87. theTime, _ := time.ParseInLocation("2006-01-02 15:04:05", time.Now().Format("2006-01-02")+" 00:00:00", loc)
  88. for i := 0; i < t; i++ {
  89. ti := theTime.Add(time.Minute * time.Duration(minutes) * time.Duration(i))
  90. arrCate = append(arrCate, fmt.Sprintf("%02d:%02d:%02d", ti.Hour(), ti.Minute(), ti.Second()))
  91. }
  92. return series, arrCate, curCharge, tolCharge
  93. }
  94. // 保存文件
  95. func Save_rtpay_records(series []*tgSeries, minutes int, user string) string {
  96. var file *xlsx.File
  97. var sheet *xlsx.Sheet
  98. var row *xlsx.Row
  99. var err error
  100. file = xlsx.NewFile()
  101. date := time.Now().Format("2006-01-02")
  102. sheet, err = file.AddSheet("实时支付金额统计")
  103. if err != nil {
  104. beego.Warn(err)
  105. return ""
  106. }
  107. row = sheet.AddRow()
  108. row.AddCell().Value = "日期"
  109. row.AddCell().Value = "时间"
  110. row.AddCell().Value = "金额(美分)"
  111. loc, _ := time.LoadLocation("Local")
  112. theTime, _ := time.ParseInLocation("2006-01-02 15:04:05", date+" 00:00:00", loc)
  113. for i := 0; i < len(series); i++ {
  114. item := series[i]
  115. for k, v := range item.MapCount {
  116. row = sheet.AddRow()
  117. row.AddCell().SetString(item.Name)
  118. ti := theTime.Add(time.Minute * time.Duration(minutes) * time.Duration(k))
  119. row.AddCell().SetString(fmt.Sprintf("%02d:%02d:%02d", ti.Hour(), ti.Minute(), ti.Second()))
  120. row.AddCell().SetInt(v)
  121. }
  122. }
  123. name := fmt.Sprintf("./static/统计-实时支付金额-%s.xlsx", user)
  124. os.Remove(name)
  125. err = file.Save(name)
  126. if err != nil {
  127. beego.Warn(err)
  128. return ""
  129. }
  130. return name
  131. }