47 lines
1.7 KiB
Go
47 lines
1.7 KiB
Go
package business
|
||
|
||
import (
|
||
"context"
|
||
"strconv"
|
||
|
||
"kra/internal/biz/business"
|
||
"kra/internal/service/dto"
|
||
)
|
||
|
||
func (s *AnalyticsService) Export(ctx context.Context, req *dto.AnalyticsQuery) ([]byte, error) {
|
||
f, err := analyticsRequest(req)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
page, err := s.uc.ListAll(ctx, business.ChannelAnalytics, f)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
if !page.Available {
|
||
return nil, business.ErrChannelReportsUnavailable
|
||
}
|
||
headers := []string{"所属平台", "渠道名称", "归属商务", "渠道类型", "新增注册", "活跃玩家", "充值额", "付费玩家", "新增付费", "付费率"}
|
||
rows := make([][]ledgerCell, 0, len(page.Rows)+1)
|
||
appendRow := func(row *business.AnalyticsRow, summary bool) {
|
||
platform, name, owner, kind := business.PlatformName(row.SourceDB), row.Name, row.BusinessName(), "—"
|
||
if row.PromoteType != nil {
|
||
if *row.PromoteType == 1 {
|
||
kind = "公会"
|
||
} else if *row.PromoteType == 0 {
|
||
kind = "个人"
|
||
}
|
||
}
|
||
if summary {
|
||
platform, name, owner, kind = "全部", "合计(有效端 "+strconv.FormatInt(page.EffectiveCount, 10)+")", "—", "—"
|
||
}
|
||
rows = append(rows, []ledgerCell{textCell(platform), textCell(name), textCell(owner), textCell(kind), numericCell(strconv.FormatInt(row.Counts.Register, 10)), numericCell(strconv.FormatInt(row.Counts.Active, 10)), numericCell(row.Pay), numericCell(strconv.FormatInt(row.Counts.Pay, 10)), numericCell(strconv.FormatInt(row.Counts.NewPay, 10)), textCell(row.PayRate + "%")})
|
||
}
|
||
for _, row := range page.Rows {
|
||
appendRow(row, false)
|
||
}
|
||
if page.Summary != nil {
|
||
appendRow(page.Summary, true)
|
||
}
|
||
return ledgerWorkbook("渠道数据统计", headers, rows)
|
||
}
|