up_stat_history.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. package upcrmservice
  2. import (
  3. "context"
  4. "time"
  5. "go-common/app/admin/main/up/dao/upcrm"
  6. "go-common/app/admin/main/up/model/upcrmmodel"
  7. "go-common/library/log"
  8. )
  9. //YesterdayRes struct
  10. type YesterdayRes struct {
  11. ActivityUps int64 `json:"activity_ups"`
  12. IncrUps int64 `json:"incr_ups"`
  13. TotalUps int64 `json:"total_ups"`
  14. Date int64 `json:"date"` // 截止日期
  15. }
  16. //TrendRes struct
  17. type TrendRes struct {
  18. Date int64 `json:"date"` // 截止日期
  19. Ups int64 `json:"ups"`
  20. }
  21. //TrendDetail struct
  22. type TrendDetail struct {
  23. ActivityUps int64 `json:"activity_ups"`
  24. IncrUps int64 `json:"incr_ups"`
  25. TotalUps int64 `json:"total_ups"`
  26. Date int64 `json:"date"`
  27. }
  28. //QueryYesterday query yesterday data
  29. func (s *Service) QueryYesterday(ctx context.Context, date time.Time) (item *YesterdayRes, err error) {
  30. var lastday, e = s.crmdb.GetUpStatLastDate(date)
  31. if e != nil {
  32. err = e
  33. log.Error("err get up stat last day, err=%+v", err)
  34. return
  35. }
  36. histories, err := s.crmdb.QueryYesterday(lastday)
  37. if err != nil {
  38. return nil, err
  39. }
  40. item = &YesterdayRes{}
  41. item.Date = lastday.Unix()
  42. for _, v := range histories {
  43. if v.Type == upcrmmodel.ActivityType {
  44. item.ActivityUps += v.Value1
  45. }
  46. if v.Type == upcrmmodel.IncrType {
  47. item.IncrUps += v.Value1
  48. }
  49. if v.Type == upcrmmodel.TotalType {
  50. item.TotalUps += v.Value1
  51. }
  52. }
  53. return
  54. }
  55. //QueryTrend query trend
  56. func (s *Service) QueryTrend(ctx context.Context, statType int, currentDate time.Time, days int) (result []*TrendRes, err error) {
  57. histories, err := s.crmdb.QueryTrend(statType, currentDate, days)
  58. if err != nil {
  59. return nil, err
  60. }
  61. var items = make(map[string]*TrendRes)
  62. var length = len(histories)
  63. var endDate = currentDate
  64. if length > 0 {
  65. endDate = histories[0].GenerateDate.Time()
  66. }
  67. for _, v := range histories {
  68. key := v.GenerateDate.Time().Format(upcrm.ISO8601DATE)
  69. if old, ok := items[key]; ok {
  70. new := &TrendRes{
  71. Date: old.Date,
  72. Ups: old.Ups + v.Value1,
  73. }
  74. items[key] = new
  75. } else {
  76. items[key] = &TrendRes{
  77. Date: v.GenerateDate.Time().Unix(),
  78. Ups: v.Value1,
  79. }
  80. }
  81. }
  82. // 这里的范围是[endDate - 6, endDate],包含endDate
  83. for date := endDate.AddDate(0, 0, 1-days); !date.After(endDate); date = date.AddDate(0, 0, 1) {
  84. var dateStr = date.Format(upcrmmodel.TimeFmtDate)
  85. var d *TrendRes
  86. var ok bool
  87. if d, ok = items[dateStr]; !ok {
  88. d = &TrendRes{
  89. Date: date.Unix(),
  90. Ups: 0,
  91. }
  92. }
  93. result = append(result, d)
  94. }
  95. return
  96. }
  97. //QueryDetail query detail info
  98. func (s *Service) QueryDetail(ctx context.Context, currentDate time.Time, days int) (result []*TrendDetail, err error) {
  99. var endDate, e = s.crmdb.GetUpStatLastDate(currentDate)
  100. if e != nil {
  101. err = e
  102. log.Error("err get up stat last day, err=%+v", err)
  103. return
  104. }
  105. var startDate = endDate.AddDate(0, 0, 1-days)
  106. histories, err := s.crmdb.QueryDetail(startDate, endDate)
  107. if err != nil {
  108. return nil, err
  109. }
  110. var items = make(map[string]*TrendDetail)
  111. for _, v := range histories {
  112. key := v.GenerateDate.Time().Format(upcrm.ISO8601DATE)
  113. if old, ok := items[key]; ok {
  114. if v.Type == upcrmmodel.ActivityType {
  115. old.ActivityUps += v.Value1
  116. }
  117. if v.Type == upcrmmodel.IncrType {
  118. old.IncrUps += v.Value1
  119. }
  120. if v.Type == upcrmmodel.TotalType {
  121. old.TotalUps += v.Value1
  122. }
  123. items[key] = old
  124. } else {
  125. new := &TrendDetail{
  126. Date: v.GenerateDate.Time().Unix(),
  127. }
  128. if v.Type == upcrmmodel.ActivityType {
  129. new.ActivityUps = v.Value1
  130. }
  131. if v.Type == upcrmmodel.IncrType {
  132. new.IncrUps = v.Value1
  133. }
  134. if v.Type == upcrmmodel.TotalType {
  135. new.TotalUps = v.Value1
  136. }
  137. items[key] = new
  138. }
  139. }
  140. // 这里的范围是[endDate - 6, endDate],包含endDate
  141. for date := endDate.AddDate(0, 0, 1-days); !date.After(endDate); date = date.AddDate(0, 0, 1) {
  142. var dateStr = date.Format(upcrmmodel.TimeFmtDate)
  143. var d *TrendDetail
  144. var ok bool
  145. if d, ok = items[dateStr]; !ok {
  146. d = &TrendDetail{
  147. Date: date.Unix(),
  148. }
  149. }
  150. result = append(result, d)
  151. }
  152. return
  153. }