123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- package service
- import (
- "context"
- "gadmin/config"
- "gadmin/internal/admin/consts"
- "gadmin/internal/admin/forms"
- "gadmin/internal/gorm/query"
- "gadmin/package/gmdata"
- "gadmin/utility"
- "github.com/sirupsen/logrus"
- )
- var LimitGift = new(sLimitGift)
- type sLimitGift struct{}
- func (s *sLimitGift) List(ctx context.Context, params forms.LimitGiftListReq) (resp forms.LimitGiftListRespData, err error) {
- var (
- rdb = query.Use(config.DB).ReportDayLimitgift
- days = 0
- offset = (params.Page - 1) * params.PerPage
- startIndex = int(offset + 1)
- endIndex = int(params.PerPage + offset)
- startTID int32 = 0
- endTID int32 = 0
- tempLst []*forms.LimitGiftListItem
- )
- // 获取总触发次数
- type Stat struct {
- Total int64
- }
- var stat Stat
- mt := rdb.Select(rdb.ShowCount.Sum().As("total")).Where(rdb.Date.Between(params.Day, params.EndDay))
- switch params.ChannelId {
- case consts.ChannelIdNone:
- // 不选择渠道
- case consts.ChannelIdAllAdv, consts.ChannelIdAllWx, consts.ChannelIdAllTT:
- // 所有的广告渠道
- mt = mt.Where(rdb.ChannelID.In(Channel.GetIdsByType(params.ChannelId)...))
- default:
- // 指定渠道
- mt = mt.Where(rdb.ChannelID.Eq(params.ChannelId))
- }
- if params.ServerId > 0 {
- mt = mt.Where(rdb.ServerID.Eq(int64(params.ServerId)))
- }
- if err = mt.Scan(&stat); err != nil {
- return forms.LimitGiftListRespData{}, err
- }
- for k, v := range gmdata.LimitGiftList {
- if k >= startIndex && k <= endIndex {
- if startTID == 0 {
- startTID = v.Id
- }
- endTID = v.Id
- tempLst = append(tempLst, &forms.LimitGiftListItem{
- ID: v.Id,
- GoodsType: v.TypeName,
- GoodsValue: v.ValueStr,
- AllTriggerCount: stat.Total,
- ShowCount: 0,
- PayCount: 0,
- })
- }
- }
- days, err = utility.GetDaysBetween2Date("2006-01-02", params.Day, params.EndDay)
- if err != nil {
- return resp, err
- }
- days += 1
- ml := rdb.
- Where(rdb.Date.Between(params.Day, params.EndDay)).
- Order(rdb.Date, rdb.GoodsID).
- Where(rdb.GoodsID.Between(int64(startTID), int64(endTID)))
- if params.ChannelId != "" {
- ml = ml.Where(rdb.ChannelID.Eq(params.ChannelId))
- }
- results, err := ml.Find()
- if err != nil {
- return resp, err
- }
- findResult := func(goodsID int32) *forms.LimitGiftListItem {
- for _, v := range tempLst {
- if v.ID == goodsID {
- return v
- }
- }
- return nil
- }
- for _, result := range results {
- goods := gmdata.GetLimitGift(int32(result.GoodsID))
- if goods == nil {
- continue
- }
- item := findResult(goods.Id)
- if item == nil {
- logrus.Warnf("获取限时礼包失败:%+v", goods)
- continue
- } else {
- item.ShowCount += result.ShowCount
- item.PayCount += result.PayCount
- }
- }
- resp.Data = tempLst
- resp.Total = int64(len(gmdata.LimitGiftList))
- return
- }
|