resource.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package events
  2. import (
  3. "bufio"
  4. "fmt"
  5. "box-gm/utils"
  6. "io"
  7. "log"
  8. "os"
  9. "strings"
  10. "time"
  11. "github.com/astaxie/beego"
  12. "github.com/tealeg/xlsx"
  13. // "log"
  14. )
  15. type RecordResource struct {
  16. EventTime string
  17. Uid int
  18. Event string
  19. ItemId int
  20. DeltaCount int
  21. RemainCount int
  22. }
  23. // 关卡分布
  24. func Resource_get_records(uid, startTime, endTime, itemId int) []*RecordResource {
  25. // log.Printf("Resource_get_records uid[%d] startTime[%d] endTime[%d] itemId[%d]", uid, startTime, endTime, itemId)
  26. // 日期列表
  27. var dateList []string
  28. times := 0
  29. for {
  30. ti := startTime + times*86400
  31. date := time.Unix(int64(ti), 0).Format("2006-01-02")
  32. dateList = append(dateList, date)
  33. times++
  34. if ti >= endTime {
  35. break
  36. }
  37. }
  38. // log.Printf("Resource_get_records dateList[%v]", dateList)
  39. var records []*RecordResource
  40. loc, _ := time.LoadLocation("Local")
  41. for _, date := range dateList {
  42. records = read_date_by_type(uid, startTime, endTime, itemId, "resource", date, loc, records)
  43. records = read_date_by_type(uid, startTime, endTime, itemId, "item", date, loc, records)
  44. }
  45. // log.Printf("Resource_get_records records[%v]", records)
  46. return records
  47. }
  48. func read_date_by_type(uid, startTime, endTime, itemId int, dateType, date string, loc *time.Location, records []*RecordResource) []*RecordResource {
  49. if records == nil {
  50. records = make([]*RecordResource, 0)
  51. }
  52. eventFile := fmt.Sprintf("%s/%s-%s.log", utils.GetKeyConf("events", "path"), dateType, date)
  53. f, err := os.Open(eventFile)
  54. if err != nil {
  55. log.Printf("eventFile[%s] err[%v]", eventFile, err)
  56. }
  57. defer f.Close()
  58. if err == nil {
  59. buff := bufio.NewReader(f)
  60. for {
  61. line, err := buff.ReadString('\n')
  62. if err != nil || io.EOF == err {
  63. break
  64. }
  65. line = strings.TrimSpace(line)
  66. arr := strings.Split(line, ";")
  67. uidEvent := utils.StringToInt(arr[2])
  68. if uid == 0 || uid == uidEvent {
  69. theTime, errTime := time.ParseInLocation("2006-01-02 15:04:05", arr[0], loc)
  70. if errTime == nil {
  71. ti := int(theTime.Unix())
  72. arrCnt := strings.Split(arr[4], ",")
  73. if ti >= startTime && ti <= endTime {
  74. _itemId := utils.StringToInt(arrCnt[0])
  75. if itemId == 0 || itemId == _itemId {
  76. item := &RecordResource{}
  77. item.EventTime = arr[0]
  78. item.Uid = uidEvent
  79. item.Event = arr[3]
  80. item.ItemId = _itemId
  81. item.DeltaCount = utils.StringToInt(arrCnt[1])
  82. item.RemainCount = utils.StringToInt(arrCnt[2])
  83. records = append(records, item)
  84. }
  85. }
  86. }
  87. }
  88. }
  89. }
  90. return records
  91. }
  92. // 保存文件
  93. func Save_resource_records(records []*RecordResource, user string) string {
  94. var file *xlsx.File
  95. var sheet *xlsx.Sheet
  96. var row *xlsx.Row
  97. var err error
  98. file = xlsx.NewFile()
  99. sheet, err = file.AddSheet("数据")
  100. if err != nil {
  101. beego.Warn(err)
  102. return ""
  103. }
  104. row = sheet.AddRow()
  105. row.AddCell().Value = "时间"
  106. row.AddCell().Value = "玩家ID"
  107. row.AddCell().Value = "事件ID"
  108. row.AddCell().Value = "资源ID"
  109. row.AddCell().Value = "变化数量"
  110. row.AddCell().Value = "变化后剩余数量"
  111. for i := 0; i < len(records); i++ {
  112. item := records[i]
  113. row = sheet.AddRow()
  114. row.AddCell().SetString(item.EventTime)
  115. row.AddCell().SetInt(item.Uid)
  116. row.AddCell().SetString(item.Event)
  117. row.AddCell().SetInt(item.ItemId)
  118. row.AddCell().SetInt(item.DeltaCount)
  119. row.AddCell().SetInt(item.RemainCount)
  120. }
  121. name := fmt.Sprintf("./static/统计-resource-%s.xlsx", user)
  122. os.Remove(name)
  123. err = file.Save(name)
  124. if err != nil {
  125. beego.Warn(err)
  126. return ""
  127. }
  128. return name
  129. }