goods.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package events
  2. import (
  3. "bufio"
  4. "fmt"
  5. "box-gm/utils"
  6. "io"
  7. "os"
  8. "strings"
  9. "time"
  10. "github.com/astaxie/beego"
  11. "github.com/tealeg/xlsx"
  12. )
  13. func Goods_get_day_time_count(date string, serverId string) map[int]int {
  14. var goodsCount = make(map[int]int) //[id,count]
  15. f, err := os.Open(fmt.Sprintf("%s/pay-%s.log", utils.GetKeyConf("events", "path"), date))
  16. if err != nil {
  17. return goodsCount
  18. }
  19. defer f.Close()
  20. buff := bufio.NewReader(f)
  21. for {
  22. line, err := buff.ReadString('\n')
  23. if err != nil || io.EOF == err {
  24. break
  25. }
  26. line = strings.TrimSpace(line)
  27. arr := strings.Split(line, ";")
  28. if serverId == "0" || arr[1] == serverId {
  29. params := strings.Split(arr[3], ",")
  30. goodsId := 0
  31. if len(params) > 2 {
  32. goodsId = utils.StringToInt(params[2])
  33. }
  34. if goodsId > 0 {
  35. goodsCount[goodsId] += 1
  36. }
  37. }
  38. }
  39. return goodsCount
  40. }
  41. func Goods_get_range_day_time_count(days int, serverId string) ([]*tgSeries, []string) {
  42. var series []*tgSeries
  43. var arrCate []string
  44. currTime := int(time.Now().Unix())
  45. dayCount := 0
  46. for {
  47. tiEvent := currTime - 86400*dayCount
  48. date := time.Unix(int64(tiEvent), 0).Format("2006-01-02")
  49. // m, _ := time.ParseDuration("1m")
  50. item := &tgSeries{}
  51. item.Name = date
  52. glCount := Goods_get_day_time_count(date, serverId)
  53. for k, _ := range glCount {
  54. item.Data = append(item.Data, glCount[k])
  55. key := fmt.Sprintf("%d", k)
  56. if !utils.InSlice(arrCate, key) {
  57. arrCate = append(arrCate, key)
  58. }
  59. }
  60. item.MapCount = glCount
  61. // log.Printf("item[%v]", item)
  62. series = append(series, item)
  63. dayCount++
  64. if dayCount > days {
  65. break
  66. }
  67. }
  68. return series, arrCate
  69. }
  70. // 保存文件
  71. func Save_goods_records(series []*tgSeries, user string) string {
  72. var file *xlsx.File
  73. var sheet *xlsx.Sheet
  74. var row *xlsx.Row
  75. var err error
  76. file = xlsx.NewFile()
  77. sheet, err = file.AddSheet("商品统计")
  78. if err != nil {
  79. beego.Warn(err)
  80. return ""
  81. }
  82. row = sheet.AddRow()
  83. row.AddCell().Value = "日期"
  84. row.AddCell().Value = "商品id"
  85. row.AddCell().Value = "数量"
  86. for i := 0; i < len(series); i++ {
  87. item := series[i]
  88. for k, v := range item.MapCount {
  89. row = sheet.AddRow()
  90. row.AddCell().SetString(item.Name)
  91. row.AddCell().SetString(fmt.Sprintf("%d", k))
  92. row.AddCell().SetInt(v)
  93. }
  94. }
  95. name := fmt.Sprintf("./static/统计-商品-%s.xlsx", user)
  96. os.Remove(name)
  97. err = file.Save(name)
  98. if err != nil {
  99. beego.Warn(err)
  100. return ""
  101. }
  102. return name
  103. }