limitgift.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package service
  2. import (
  3. "context"
  4. "gadmin/config"
  5. "gadmin/internal/admin/consts"
  6. "gadmin/internal/admin/forms"
  7. "gadmin/internal/gorm/query"
  8. "gadmin/package/gmdata"
  9. "gadmin/utility"
  10. "github.com/sirupsen/logrus"
  11. )
  12. var LimitGift = new(sLimitGift)
  13. type sLimitGift struct{}
  14. func (s *sLimitGift) List(ctx context.Context, params forms.LimitGiftListReq) (resp forms.LimitGiftListRespData, err error) {
  15. var (
  16. rdb = query.Use(config.DB).ReportDayLimitgift
  17. days = 0
  18. offset = (params.Page - 1) * params.PerPage
  19. startIndex = int(offset + 1)
  20. endIndex = int(params.PerPage + offset)
  21. startTID int32 = 0
  22. endTID int32 = 0
  23. tempLst []*forms.LimitGiftListItem
  24. )
  25. // 获取总触发次数
  26. type Stat struct {
  27. Total int64
  28. }
  29. var stat Stat
  30. mt := rdb.Select(rdb.ShowCount.Sum().As("total")).Where(rdb.Date.Between(params.Day, params.EndDay))
  31. switch params.ChannelId {
  32. case consts.ChannelIdNone:
  33. // 不选择渠道
  34. case consts.ChannelIdAllAdv, consts.ChannelIdAllWx, consts.ChannelIdAllTT:
  35. // 所有的广告渠道
  36. mt = mt.Where(rdb.ChannelID.In(Channel.GetIdsByType(params.ChannelId)...))
  37. default:
  38. // 指定渠道
  39. mt = mt.Where(rdb.ChannelID.Eq(params.ChannelId))
  40. }
  41. if params.ServerId > 0 {
  42. mt = mt.Where(rdb.ServerID.Eq(int64(params.ServerId)))
  43. }
  44. if err = mt.Scan(&stat); err != nil {
  45. return forms.LimitGiftListRespData{}, err
  46. }
  47. for k, v := range gmdata.LimitGiftList {
  48. if k >= startIndex && k <= endIndex {
  49. if startTID == 0 {
  50. startTID = v.Id
  51. }
  52. endTID = v.Id
  53. tempLst = append(tempLst, &forms.LimitGiftListItem{
  54. ID: v.Id,
  55. GoodsType: v.TypeName,
  56. GoodsValue: v.ValueStr,
  57. AllTriggerCount: stat.Total,
  58. ShowCount: 0,
  59. PayCount: 0,
  60. })
  61. }
  62. }
  63. days, err = utility.GetDaysBetween2Date("2006-01-02", params.Day, params.EndDay)
  64. if err != nil {
  65. return resp, err
  66. }
  67. days += 1
  68. ml := rdb.
  69. Where(rdb.Date.Between(params.Day, params.EndDay)).
  70. Order(rdb.Date, rdb.GoodsID).
  71. Where(rdb.GoodsID.Between(int64(startTID), int64(endTID)))
  72. if params.ChannelId != "" {
  73. ml = ml.Where(rdb.ChannelID.Eq(params.ChannelId))
  74. }
  75. results, err := ml.Find()
  76. if err != nil {
  77. return resp, err
  78. }
  79. findResult := func(goodsID int32) *forms.LimitGiftListItem {
  80. for _, v := range tempLst {
  81. if v.ID == goodsID {
  82. return v
  83. }
  84. }
  85. return nil
  86. }
  87. for _, result := range results {
  88. goods := gmdata.GetLimitGift(int32(result.GoodsID))
  89. if goods == nil {
  90. continue
  91. }
  92. item := findResult(goods.Id)
  93. if item == nil {
  94. logrus.Warnf("获取限时礼包失败:%+v", goods)
  95. continue
  96. } else {
  97. item.ShowCount += result.ShowCount
  98. item.PayCount += result.PayCount
  99. }
  100. }
  101. resp.Data = tempLst
  102. resp.Total = int64(len(gmdata.LimitGiftList))
  103. return
  104. }