av_income_stat.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package income
  2. import (
  3. "bytes"
  4. "context"
  5. "strconv"
  6. incomeD "go-common/app/job/main/growup/dao/income"
  7. model "go-common/app/job/main/growup/model/income"
  8. )
  9. // AvIncomeStatSvr av income stat service
  10. type AvIncomeStatSvr struct {
  11. batchSize int
  12. dao *incomeD.Dao
  13. }
  14. // NewAvIncomeStatSvr new av income service
  15. func NewAvIncomeStatSvr(dao *incomeD.Dao, batchSize int) (svr *AvIncomeStatSvr) {
  16. return &AvIncomeStatSvr{
  17. batchSize: batchSize,
  18. dao: dao,
  19. }
  20. }
  21. // AvIncomeStat get av income stat
  22. func (p *AvIncomeStatSvr) AvIncomeStat(c context.Context, limit int64) (m map[int64]*model.AvIncomeStat, err error) {
  23. m = make(map[int64]*model.AvIncomeStat)
  24. var id int64
  25. for {
  26. var am map[int64]*model.AvIncomeStat
  27. am, id, err = p.dao.AvIncomeStat(c, id, limit)
  28. if err != nil {
  29. return
  30. }
  31. if len(am) == 0 {
  32. break
  33. }
  34. for avID, stat := range am {
  35. m[avID] = stat
  36. }
  37. }
  38. return
  39. }
  40. // BatchInsertAvIncomeStat batch insert av income statistics
  41. func (p *AvIncomeStatSvr) BatchInsertAvIncomeStat(c context.Context, as map[int64]*model.AvIncomeStat) (err error) {
  42. var (
  43. buff = make([]*model.AvIncomeStat, p.batchSize)
  44. buffEnd = 0
  45. )
  46. for _, a := range as {
  47. if a.DataState == 0 {
  48. continue
  49. }
  50. buff[buffEnd] = a
  51. buffEnd++
  52. if buffEnd >= p.batchSize {
  53. values := avIncomeStatValues(buff[:buffEnd])
  54. buffEnd = 0
  55. _, err = p.dao.InsertAvIncomeStat(c, values)
  56. if err != nil {
  57. return
  58. }
  59. }
  60. }
  61. if buffEnd > 0 {
  62. values := avIncomeStatValues(buff[:buffEnd])
  63. buffEnd = 0
  64. _, err = p.dao.InsertAvIncomeStat(c, values)
  65. }
  66. return
  67. }
  68. func avIncomeStatValues(as []*model.AvIncomeStat) (values string) {
  69. var buf bytes.Buffer
  70. for _, a := range as {
  71. buf.WriteString("(")
  72. buf.WriteString(strconv.FormatInt(a.AvID, 10))
  73. buf.WriteByte(',')
  74. buf.WriteString(strconv.FormatInt(a.MID, 10))
  75. buf.WriteByte(',')
  76. buf.WriteString(strconv.FormatInt(a.TagID, 10))
  77. buf.WriteByte(',')
  78. buf.WriteString(strconv.Itoa(a.IsOriginal))
  79. buf.WriteByte(',')
  80. buf.WriteString("'" + a.UploadTime.Time().Format(_layoutSec) + "'")
  81. buf.WriteByte(',')
  82. buf.WriteString(strconv.FormatInt(a.TotalIncome, 10))
  83. buf.WriteString(")")
  84. buf.WriteByte(',')
  85. }
  86. if buf.Len() > 0 {
  87. buf.Truncate(buf.Len() - 1)
  88. }
  89. values = buf.String()
  90. buf.Reset()
  91. return
  92. }