Compare commits
6 Commits
master
...
14db0dd2fe
| Author | SHA1 | Date | |
|---|---|---|---|
| 14db0dd2fe | |||
| 5b8a4c103d | |||
| 4f3ad39eeb | |||
| c8162b1bfe | |||
| 2c6a8490b8 | |||
| 41089cca2d |
@@ -1,4 +1,4 @@
|
|||||||
FROM golang:1.25.3
|
FROM golang:1.26.0
|
||||||
RUN go env -w GO111MODULE=on
|
RUN go env -w GO111MODULE=on
|
||||||
RUN go env -w GOPROXY=https://goproxy.cn,direct
|
RUN go env -w GOPROXY=https://goproxy.cn,direct
|
||||||
ENV WORKDIR /usr/local/bin/app
|
ENV WORKDIR /usr/local/bin/app
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ const (
|
|||||||
StorewideReportDetailTable = "storewide_report_detail" // 全站数据detail表
|
StorewideReportDetailTable = "storewide_report_detail" // 全站数据detail表
|
||||||
CreativeReportSumTable = "creative_report_sum" // 广告创意数据sum表
|
CreativeReportSumTable = "creative_report_sum" // 广告创意数据sum表
|
||||||
CreativeReportDetailTable = "creative_report_detail" // 广告创意数据detail表
|
CreativeReportDetailTable = "creative_report_detail" // 广告创意数据detail表
|
||||||
UnitReportSumTable = "unit_report_sum" // 广告创意数据detail表
|
UnitReportSumTable = "unit_report_sum" // 广告单元数据detail表
|
||||||
UnitReportDetailTable = "unit_report_detail" // 广告创意数据detail表
|
UnitReportDetailTable = "unit_report_detail" // 广告单元数据detail表
|
||||||
|
CampaignReportSumTable = "campaign_report_sum" // 广告计划数据detail表
|
||||||
|
CampaignReportDetailTable = "campaign_report_detail" // 广告计划数据detail表
|
||||||
)
|
)
|
||||||
|
|||||||
35
controller/copydata/campaign_report_controller.go
Normal file
35
controller/copydata/campaign_report_controller.go
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
package copydata
|
||||||
|
|
||||||
|
import (
|
||||||
|
dto "cid/model/dto/copydata"
|
||||||
|
service "cid/service/copydata"
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"gitea.com/red-future/common/beans"
|
||||||
|
)
|
||||||
|
|
||||||
|
type campaignReport struct{}
|
||||||
|
|
||||||
|
var CampaignReport = new(campaignReport)
|
||||||
|
|
||||||
|
// CreateCampaignReportSum 创建广告计划效果指标表
|
||||||
|
func (c *campaignReport) CreateCampaignReportSum(ctx context.Context, req *dto.CreateCampaignReportSumReq) (res *dto.CreateCampaignReportSumRes, err error) {
|
||||||
|
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
|
||||||
|
return service.CampaignReportSum.Create(ctx, req.CampaignReportSumItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
// BatchCreateCampaignReportSum 批量创建广告计划效果指标表
|
||||||
|
func (c *campaignReport) BatchCreateCampaignReportSum(ctx context.Context, req *dto.BatchCreateCampaignReportSumReq) (res *dto.BatchCreateCampaignReportSumRes, err error) {
|
||||||
|
return service.CampaignReportSum.BatchCreate(ctx, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateCampaignReportDetail 创建广告效果指标表
|
||||||
|
func (c *campaignReport) CreateCampaignReportDetail(ctx context.Context, req *dto.CreateCampaignReportDetailReq) (res *dto.CreateCampaignReportDetailRes, err error) {
|
||||||
|
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
|
||||||
|
return service.CampaignReportSum.CreateDetail(ctx, req.CampaignReportDetailItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
// BatchCreateCampaignReportDetail 批量创建广告效果指标表
|
||||||
|
func (c *campaignReport) BatchCreateCampaignReportDetail(ctx context.Context, req *dto.BatchCreateCampaignReportDetailReq) (res *dto.BatchCreateCampaignReportDetailRes, err error) {
|
||||||
|
return service.CampaignReportSum.BatchCreateDetail(ctx, req)
|
||||||
|
}
|
||||||
81
dao/copydata/campaign_report_detail_dao.go
Normal file
81
dao/copydata/campaign_report_detail_dao.go
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
package copydata
|
||||||
|
|
||||||
|
import (
|
||||||
|
consts "cid/consts/public"
|
||||||
|
dto "cid/model/dto/copydata"
|
||||||
|
entity "cid/model/entity/copydata"
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"gitea.com/red-future/common/db/gfdb"
|
||||||
|
"github.com/gogf/gf/v2/util/gconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
var CampaignReportDetail = new(CampaignReportDetailDao)
|
||||||
|
|
||||||
|
type CampaignReportDetailDao struct{}
|
||||||
|
|
||||||
|
func (d *CampaignReportDetailDao) Insert(ctx context.Context, req *dto.CampaignReportDetailItem) (id int64, err error) {
|
||||||
|
var entityData *entity.CampaignReportDetail
|
||||||
|
if err = gconv.Struct(req, &entityData); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
r, err := gfdb.DB(ctx).Model(ctx, consts.CampaignReportDetailTable).Data(&entityData).Insert()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return r.LastInsertId()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *CampaignReportDetailDao) BatchInsert(ctx context.Context, reqs []*dto.CampaignReportDetailItem) (successCount int64, failCount int64, failedIndexes []int64, err error) {
|
||||||
|
if len(reqs) == 0 {
|
||||||
|
return 0, 0, nil, errors.New("批量插入数据不能为空")
|
||||||
|
}
|
||||||
|
|
||||||
|
batchSize := 100
|
||||||
|
successCount = 0
|
||||||
|
failCount = 0
|
||||||
|
failedIndexes = make([]int64, 0)
|
||||||
|
|
||||||
|
for i := 0; i < len(reqs); i += batchSize {
|
||||||
|
end := i + batchSize
|
||||||
|
if end > len(reqs) {
|
||||||
|
end = len(reqs)
|
||||||
|
}
|
||||||
|
|
||||||
|
batch := reqs[i:end]
|
||||||
|
entityList := make([]*entity.CampaignReportDetail, len(batch))
|
||||||
|
|
||||||
|
for j, req := range batch {
|
||||||
|
var entityData entity.CampaignReportDetail
|
||||||
|
if err = gconv.Struct(req, &entityData); err != nil {
|
||||||
|
failCount++
|
||||||
|
failedIndexes = append(failedIndexes, int64(i+j))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
entityList[j] = &entityData
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(entityList) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = gfdb.DB(ctx).Model(ctx, consts.CampaignReportDetailTable).Data(entityList).Insert()
|
||||||
|
if err != nil {
|
||||||
|
for k := range batch {
|
||||||
|
_, singleErr := d.Insert(ctx, batch[k])
|
||||||
|
if singleErr != nil {
|
||||||
|
failCount++
|
||||||
|
failedIndexes = append(failedIndexes, int64(i+k))
|
||||||
|
} else {
|
||||||
|
successCount++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
successCount += int64(len(entityList))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return successCount, failCount, failedIndexes, nil
|
||||||
|
}
|
||||||
86
dao/copydata/campaign_report_sum_dao.go
Normal file
86
dao/copydata/campaign_report_sum_dao.go
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
package copydata
|
||||||
|
|
||||||
|
import (
|
||||||
|
consts "cid/consts/public"
|
||||||
|
dto "cid/model/dto/copydata"
|
||||||
|
entity "cid/model/entity/copydata"
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"gitea.com/red-future/common/db/gfdb"
|
||||||
|
"github.com/gogf/gf/v2/util/gconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
var CampaignReportSum = new(CampaignReportSumDao)
|
||||||
|
|
||||||
|
type CampaignReportSumDao struct{}
|
||||||
|
|
||||||
|
// Insert 插入广告计划效果指标表
|
||||||
|
func (d *CampaignReportSumDao) Insert(ctx context.Context, req *dto.CampaignReportSumItem) (id int64, err error) {
|
||||||
|
var entityData *entity.CampaignReportSum
|
||||||
|
if err = gconv.Struct(req, &entityData); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
r, err := gfdb.DB(ctx).Model(ctx, consts.CampaignReportSumTable).Data(&entityData).Insert()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return r.LastInsertId()
|
||||||
|
}
|
||||||
|
|
||||||
|
// BatchInsert 批量插入广告计划效果指标表
|
||||||
|
func (d *CampaignReportSumDao) BatchInsert(ctx context.Context, reqs []*dto.CampaignReportSumItem) (successCount int64, failCount int64, failedIndexes []int64, err error) {
|
||||||
|
if len(reqs) == 0 {
|
||||||
|
return 0, 0, nil, errors.New("批量插入数据不能为空")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分批处理,每批 100 条
|
||||||
|
batchSize := 100
|
||||||
|
successCount = 0
|
||||||
|
failCount = 0
|
||||||
|
failedIndexes = make([]int64, 0)
|
||||||
|
|
||||||
|
for i := 0; i < len(reqs); i += batchSize {
|
||||||
|
end := i + batchSize
|
||||||
|
if end > len(reqs) {
|
||||||
|
end = len(reqs)
|
||||||
|
}
|
||||||
|
|
||||||
|
batch := reqs[i:end]
|
||||||
|
entityList := make([]*entity.CampaignReportSum, len(batch))
|
||||||
|
|
||||||
|
for j, req := range batch {
|
||||||
|
var entityData entity.CampaignReportSum
|
||||||
|
if err = gconv.Struct(req, &entityData); err != nil {
|
||||||
|
failCount++
|
||||||
|
failedIndexes = append(failedIndexes, int64(i+j))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
entityList[j] = &entityData
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(entityList) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 执行批量插入
|
||||||
|
_, err = gfdb.DB(ctx).Model(ctx, consts.CampaignReportSumTable).Data(entityList).Insert()
|
||||||
|
if err != nil {
|
||||||
|
// 批量插入失败,尝试逐条插入
|
||||||
|
for k := range batch {
|
||||||
|
_, singleErr := d.Insert(ctx, batch[k])
|
||||||
|
if singleErr != nil {
|
||||||
|
failCount++
|
||||||
|
failedIndexes = append(failedIndexes, int64(i+k))
|
||||||
|
} else {
|
||||||
|
successCount++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
successCount += int64(len(entityList))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return successCount, failCount, failedIndexes, nil
|
||||||
|
}
|
||||||
3
go.mod
3
go.mod
@@ -1,6 +1,6 @@
|
|||||||
module cid
|
module cid
|
||||||
|
|
||||||
go 1.25.5
|
go 1.26.0
|
||||||
|
|
||||||
require (
|
require (
|
||||||
gitea.com/red-future/common v0.0.4
|
gitea.com/red-future/common v0.0.4
|
||||||
@@ -8,6 +8,7 @@ require (
|
|||||||
github.com/gogf/gf/contrib/nosql/redis/v2 v2.9.5
|
github.com/gogf/gf/contrib/nosql/redis/v2 v2.9.5
|
||||||
github.com/gogf/gf/v2 v2.10.0
|
github.com/gogf/gf/v2 v2.10.0
|
||||||
github.com/olekukonko/errors v1.1.0
|
github.com/olekukonko/errors v1.1.0
|
||||||
|
github.com/sirupsen/logrus v1.9.3
|
||||||
golang.org/x/net v0.47.0
|
golang.org/x/net v0.47.0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
472
go.sum
Normal file
472
go.sum
Normal file
@@ -0,0 +1,472 @@
|
|||||||
|
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
|
gitea.com/red-future/common v0.0.4 h1:2QgKc+B2iNfPRncKpmIqIzVwaMGJ3y3dt5v+35YD8SU=
|
||||||
|
gitea.com/red-future/common v0.0.4/go.mod h1:UI9N5UUjilbMPF7+/lypZSnqDVHigt14300oSRrAyZg=
|
||||||
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
|
github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
|
||||||
|
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
||||||
|
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||||
|
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
|
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
|
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||||
|
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||||
|
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
|
||||||
|
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
|
||||||
|
github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA=
|
||||||
|
github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4=
|
||||||
|
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||||
|
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||||
|
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||||
|
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
||||||
|
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||||
|
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
||||||
|
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
|
||||||
|
github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
|
||||||
|
github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
|
||||||
|
github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
|
||||||
|
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
|
||||||
|
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
|
||||||
|
github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM=
|
||||||
|
github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
|
||||||
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
|
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
|
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||||
|
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
|
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
|
||||||
|
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
|
||||||
|
github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME=
|
||||||
|
github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
|
||||||
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
|
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||||
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
||||||
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/dgraph-io/badger/v4 v4.2.0 h1:kJrlajbXXL9DFTNuhhu9yCx7JJa4qpYWxtE8BzuWsEs=
|
||||||
|
github.com/dgraph-io/badger/v4 v4.2.0/go.mod h1:qfCqhPoWDFJRx1gp5QwwyGo8xk1lbHUxvK9nK0OGAak=
|
||||||
|
github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8=
|
||||||
|
github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA=
|
||||||
|
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA=
|
||||||
|
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
|
||||||
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
|
||||||
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
|
||||||
|
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||||
|
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
|
||||||
|
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
|
||||||
|
github.com/emirpasic/gods/v2 v2.0.0-alpha h1:dwFlh8pBg1VMOXWGipNMRt8v96dKAIvBehtCt6OtunU=
|
||||||
|
github.com/emirpasic/gods/v2 v2.0.0-alpha/go.mod h1:W0y4M2dtBB9U5z3YlghmpuUhiaZT2h6yoeE+C1sCp6A=
|
||||||
|
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
|
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
|
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||||
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
|
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||||
|
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
|
||||||
|
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
|
||||||
|
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
|
||||||
|
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
|
||||||
|
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
|
||||||
|
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
|
||||||
|
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
|
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
|
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||||
|
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||||
|
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||||
|
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
|
||||||
|
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||||
|
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||||
|
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||||
|
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||||
|
github.com/gogf/gf/contrib/drivers/pgsql/v2 v2.10.0 h1:39+jbTenm7KBj4hO2C8ANAxVHpX/7OuRDs1VcGC9ylA=
|
||||||
|
github.com/gogf/gf/contrib/drivers/pgsql/v2 v2.10.0/go.mod h1:B0s0fVzn0W220E8UTpSGzrrGKsop5KcB90twBeLCiz0=
|
||||||
|
github.com/gogf/gf/contrib/nosql/redis/v2 v2.9.5 h1:Ku7p3CvGchxC7zPSgArf/tZs2w9Yb8tS/gH5ADN+p9g=
|
||||||
|
github.com/gogf/gf/contrib/nosql/redis/v2 v2.9.5/go.mod h1:cjy18NsSLZQf5zaLAzuo7B2gr8GGjCTWDTEPY7T+6FI=
|
||||||
|
github.com/gogf/gf/contrib/registry/consul/v2 v2.9.5 h1:eUqwJ/qNH8lJ6yssiqskazgp1ACQuNU6zXlLOZVuXTQ=
|
||||||
|
github.com/gogf/gf/contrib/registry/consul/v2 v2.9.5/go.mod h1:sjQyMry9+0POYZCA6lHXBxO77WoNKkruJpRB4xKqk5k=
|
||||||
|
github.com/gogf/gf/contrib/trace/otlphttp/v2 v2.9.5 h1:tHUEZYB5GTqEYYVDYnlGobf1xISARKDE4KHVlgjwTec=
|
||||||
|
github.com/gogf/gf/contrib/trace/otlphttp/v2 v2.9.5/go.mod h1:cfzTn2HS9RDX8f5pUVkbGxUWcSosouqfNQ1G6cY0V88=
|
||||||
|
github.com/gogf/gf/v2 v2.10.0 h1:rzDROlyqGMe/eM6dCalSR8dZOuMIdLhmxKSH1DGhbFs=
|
||||||
|
github.com/gogf/gf/v2 v2.10.0/go.mod h1:Svl1N+E8G/QshU2DUbh/3J/AJauqCgUnxHurXWR4Qx0=
|
||||||
|
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
|
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||||
|
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||||
|
github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY=
|
||||||
|
github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
|
||||||
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
|
github.com/golang/glog v1.2.5 h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I=
|
||||||
|
github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
|
||||||
|
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
||||||
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
|
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
|
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
|
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
||||||
|
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||||
|
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
||||||
|
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||||
|
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
||||||
|
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
||||||
|
github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs=
|
||||||
|
github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
|
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||||
|
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
|
||||||
|
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
|
||||||
|
github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw=
|
||||||
|
github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
|
||||||
|
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||||
|
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
|
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
|
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||||
|
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||||
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
|
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
|
||||||
|
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
|
github.com/grokify/html-strip-tags-go v0.1.0 h1:03UrQLjAny8xci+R+qjCce/MYnpNXCtgzltlQbOBae4=
|
||||||
|
github.com/grokify/html-strip-tags-go v0.1.0/go.mod h1:ZdzgfHEzAfz9X6Xe5eBLVblWIxXfYSQ40S/VKrAOGpc=
|
||||||
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU=
|
||||||
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs=
|
||||||
|
github.com/hashicorp/consul/api v1.26.1 h1:5oSXOO5fboPZeW5SN+TdGFP/BILDgBm19OrPZ/pICIM=
|
||||||
|
github.com/hashicorp/consul/api v1.26.1/go.mod h1:B4sQTeaSO16NtynqrAdwOlahJ7IUDZM9cj2420xYL8A=
|
||||||
|
github.com/hashicorp/consul/sdk v0.15.0 h1:2qK9nDrr4tiJKRoxPGhm6B7xJjLVIQqkjiab2M4aKjU=
|
||||||
|
github.com/hashicorp/consul/sdk v0.15.0/go.mod h1:r/OmRRPbHOe0yxNahLw7G9x5WG17E1BIECMtCjcPSNo=
|
||||||
|
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
|
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
|
||||||
|
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
|
github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
|
||||||
|
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
|
||||||
|
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
|
||||||
|
github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c=
|
||||||
|
github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
|
||||||
|
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||||
|
github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
|
||||||
|
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||||
|
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
|
||||||
|
github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI=
|
||||||
|
github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
|
||||||
|
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
|
||||||
|
github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
|
||||||
|
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
||||||
|
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
|
||||||
|
github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc=
|
||||||
|
github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
|
||||||
|
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
|
||||||
|
github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
|
||||||
|
github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A=
|
||||||
|
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
|
||||||
|
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
||||||
|
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
||||||
|
github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=
|
||||||
|
github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
||||||
|
github.com/hashicorp/go-version v1.2.1 h1:zEfKbn2+PDgroKdiOzqiE8rsmLqU2uwi5PB5pBJ3TkI=
|
||||||
|
github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
||||||
|
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||||
|
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
|
||||||
|
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
|
||||||
|
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
|
||||||
|
github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc=
|
||||||
|
github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM=
|
||||||
|
github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0=
|
||||||
|
github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY=
|
||||||
|
github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
|
||||||
|
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||||
|
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
|
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||||
|
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||||
|
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||||
|
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
|
||||||
|
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
|
||||||
|
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
|
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
||||||
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
|
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||||
|
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||||
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
|
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
|
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
|
||||||
|
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||||
|
github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE=
|
||||||
|
github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
|
||||||
|
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
||||||
|
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||||
|
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||||
|
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||||
|
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
|
||||||
|
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
|
||||||
|
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
|
||||||
|
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
||||||
|
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||||
|
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
|
||||||
|
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
|
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||||
|
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||||
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
|
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
|
||||||
|
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||||
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
|
github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
|
||||||
|
github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
|
||||||
|
github.com/miekg/dns v1.1.63 h1:8M5aAw6OMZfFXTT7K5V0Eu5YiiL8l7nUAkyN6C9YwaY=
|
||||||
|
github.com/miekg/dns v1.1.63/go.mod h1:6NGHfjhpmr5lt3XPLuyfDJi5AXbNIPM9PY6H6sF1Nfs=
|
||||||
|
github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=
|
||||||
|
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||||
|
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
|
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||||
|
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||||
|
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
|
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||||
|
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||||
|
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
|
github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM=
|
||||||
|
github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y=
|
||||||
|
github.com/olekukonko/ll v0.0.9 h1:Y+1YqDfVkqMWuEQMclsF9HUR5+a82+dxJuL1HHSRpxI=
|
||||||
|
github.com/olekukonko/ll v0.0.9/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g=
|
||||||
|
github.com/olekukonko/tablewriter v1.1.0 h1:N0LHrshF4T39KvI96fn6GT8HEjXRXYNDrDjKFDB7RIY=
|
||||||
|
github.com/olekukonko/tablewriter v1.1.0/go.mod h1:5c+EBPeSqvXnLLgkm9isDdzR3wjfBkHR9Nhfp3NWrzo=
|
||||||
|
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||||
|
github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
|
||||||
|
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||||
|
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
|
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
||||||
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
||||||
|
github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
|
||||||
|
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||||
|
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
||||||
|
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
|
||||||
|
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||||
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
|
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
|
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
|
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
|
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
|
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
|
||||||
|
github.com/redis/go-redis/v9 v9.12.1 h1:k5iquqv27aBtnTm2tIkROUDp8JBXhXZIVu1InSgvovg=
|
||||||
|
github.com/redis/go-redis/v9 v9.12.1/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw=
|
||||||
|
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||||
|
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
|
||||||
|
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||||
|
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
|
||||||
|
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
|
||||||
|
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||||
|
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
|
||||||
|
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
|
||||||
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
|
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
||||||
|
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||||
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
|
||||||
|
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||||
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
|
||||||
|
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||||
|
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||||
|
github.com/tiger1103/gfast-token v1.0.10 h1:fNiBE/Dq5iTHvTGlCx3DmXa2o4hr0NtumFpffZ39k6s=
|
||||||
|
github.com/tiger1103/gfast-token v1.0.10/go.mod h1:a/21mxmj7zFeNvjhZSC0XpEAFHfb1aT2k6DXnufFU1s=
|
||||||
|
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
|
||||||
|
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
|
||||||
|
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
|
||||||
|
github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
|
||||||
|
github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=
|
||||||
|
github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8=
|
||||||
|
github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
|
||||||
|
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM=
|
||||||
|
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI=
|
||||||
|
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
|
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
|
go.mongodb.org/mongo-driver/v2 v2.4.0 h1:Oq6BmUAAFTzMeh6AonuDlgZMuAuEiUxoAD1koK5MuFo=
|
||||||
|
go.mongodb.org/mongo-driver/v2 v2.4.0/go.mod h1:jHeEDJHJq7tm6ZF45Issun9dbogjfnPySb1vXA7EeAI=
|
||||||
|
go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
|
||||||
|
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
|
||||||
|
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
|
||||||
|
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
|
||||||
|
go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
|
||||||
|
go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 h1:aTL7F04bJHUlztTsNGJ2l+6he8c+y/b//eR0jjjemT4=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0/go.mod h1:kldtb7jDTeol0l3ewcmd8SDvx3EmIE7lyvqbasU3QC4=
|
||||||
|
go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
|
||||||
|
go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
|
||||||
|
go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
|
||||||
|
go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
|
||||||
|
go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
|
||||||
|
go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
|
||||||
|
go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
|
||||||
|
go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
|
||||||
|
go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4=
|
||||||
|
go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE=
|
||||||
|
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||||
|
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||||
|
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
|
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
|
||||||
|
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
|
golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU=
|
||||||
|
golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
|
||||||
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
|
golang.org/x/exp v0.0.0-20250128144449-3edf0e91c1ae h1:COZdc9Ut6wLq7MO9GIYxfZl4n4ScmgqQLoHocKXrxco=
|
||||||
|
golang.org/x/exp v0.0.0-20250128144449-3edf0e91c1ae/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU=
|
||||||
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
|
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||||
|
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
|
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
|
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
|
||||||
|
golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
|
||||||
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
|
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
|
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
|
golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
|
||||||
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
|
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
|
||||||
|
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
|
||||||
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
|
||||||
|
golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
|
||||||
|
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
|
||||||
|
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
|
||||||
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
|
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||||
|
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
|
||||||
|
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
|
||||||
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||||
|
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
|
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||||
|
golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||||
|
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
|
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
|
||||||
|
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
|
||||||
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
|
||||||
|
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
|
||||||
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
|
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
|
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||||
|
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||||
|
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1:BIRfGDEjiHRrk0QKZe3Xv2ieMhtgRGeLcZQ0mIVn4EY=
|
||||||
|
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE=
|
||||||
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
|
||||||
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
|
||||||
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
|
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||||
|
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||||
|
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
|
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
||||||
|
google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
|
||||||
|
google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
|
||||||
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
|
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
|
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||||
|
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||||
|
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||||
|
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
|
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
|
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
|
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||||
|
google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
|
||||||
|
google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
|
||||||
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||||
|
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
1
main.go
1
main.go
@@ -28,6 +28,7 @@ func main() {
|
|||||||
copydata.StorewideReport,
|
copydata.StorewideReport,
|
||||||
copydata.CreativeReport,
|
copydata.CreativeReport,
|
||||||
copydata.UnitReport,
|
copydata.UnitReport,
|
||||||
|
copydata.CampaignReport,
|
||||||
})
|
})
|
||||||
select {}
|
select {}
|
||||||
}
|
}
|
||||||
|
|||||||
230
model/dto/copydata/campaign_report_detail_dto.go
Normal file
230
model/dto/copydata/campaign_report_detail_dto.go
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
package copydata
|
||||||
|
|
||||||
|
import (
|
||||||
|
"gitea.com/red-future/common/beans"
|
||||||
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CreateCampaignReportDetailReq struct {
|
||||||
|
g.Meta `path:"/createCampaignReportDetail" method:"post" tags:"广告效果明细报表" summary:"创建广告效果指标明细表" dc:"创建新的广告效果指标明细表"`
|
||||||
|
*CampaignReportDetailItem
|
||||||
|
}
|
||||||
|
|
||||||
|
type CreateCampaignReportDetailRes struct {
|
||||||
|
Id int64 `json:"id" dc:"广告效果明细 ID"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type BatchCreateCampaignReportDetailReq struct {
|
||||||
|
g.Meta `path:"/batchCreateCampaignReportDetail" method:"post" tags:"广告效果明细报表" summary:"批量创建广告效果指标明细表" dc:"批量创建广告效果指标明细表"`
|
||||||
|
Items []*CampaignReportDetailItem `json:"items" v:"required" dc:"广告效果明细列表"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type BatchCreateCampaignReportDetailRes struct {
|
||||||
|
SuccessCount int64 `json:"successCount" dc:"成功数量"`
|
||||||
|
FailCount int64 `json:"failCount" dc:"失败数量"`
|
||||||
|
FailedItems []int64 `json:"failedItems" dc:"失败项索引"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CampaignReportDetailItem struct {
|
||||||
|
T0OrderPaymentAmt *float64 `json:"t0OrderPaymentAmt" dc:"当日总成交订单金额"`
|
||||||
|
CreativeMaterialType string `json:"creativeMaterialType" dc:"视频素材类型"`
|
||||||
|
LiveName string `json:"liveName" dc:"直播间名称"`
|
||||||
|
AuthorId string `json:"authorId" dc:"直播用户快手 Id"`
|
||||||
|
PicUrl string `json:"picUrl" dc:"图片 URL"`
|
||||||
|
PicName string `json:"picName" dc:"图片名称"`
|
||||||
|
PicId string `json:"picId" dc:"图片 Id"`
|
||||||
|
CoverUrl string `json:"coverUrl" dc:"封面 URL"`
|
||||||
|
CoverId *int64 `json:"coverId" dc:"封面 Id"`
|
||||||
|
ItemOrderConversionRatio *float64 `json:"itemOrderConversionRatio" dc:"转化率"`
|
||||||
|
ItemCardClickRatio *float64 `json:"itemCardClickRatio" dc:"点击率"`
|
||||||
|
ItemCardClkCnt *int64 `json:"itemCardClkCnt" dc:"商品卡点击数"`
|
||||||
|
LivePlayCntCost *float64 `json:"livePlayCntCost" dc:"直播间观看成本"`
|
||||||
|
AdMerchantFollowCost *float64 `json:"adMerchantFollowCost" dc:"涨粉成本"`
|
||||||
|
AdMerchantFollow *int64 `json:"adMerchantFollow" dc:"涨粉数"`
|
||||||
|
NetT0OrderCnt *int64 `json:"netT0OrderCnt" dc:"当日累计净成交订单数"`
|
||||||
|
NetT0Roi *float64 `json:"netT0Roi" dc:"净成交 ROI"`
|
||||||
|
NetT0Gmv *float64 `json:"netT0Gmv" dc:"净成交 GMV"`
|
||||||
|
PhotoName string `json:"photoName" dc:"视频名称"`
|
||||||
|
PhotoIdStr string `json:"photoIdStr" dc:"视频 id"`
|
||||||
|
PhotoId string `json:"photoId" dc:"视频 id"`
|
||||||
|
ModPriceSegment string `json:"modPriceSegment" dc:"设备价格区间"`
|
||||||
|
AgeSegment string `json:"ageSegment" dc:"年龄段"`
|
||||||
|
Province string `json:"province" dc:"省份名称"`
|
||||||
|
Gender string `json:"gender" dc:"性别"`
|
||||||
|
AdPhotoPlayedFiveRatio *float64 `json:"adPhotoPlayedFiveRatio" dc:"作品 5 秒播放率"`
|
||||||
|
AdPhotoPlayedThreeRatio *float64 `json:"adPhotoPlayedThreeRatio" dc:"作品 3 秒播放率"`
|
||||||
|
OrderSubmitRoi *float64 `json:"orderSubmitRoi" dc:"订单提交 ROI"`
|
||||||
|
OrderSubmitAmt *int64 `json:"orderSubmitAmt" dc:"外部订单金额"`
|
||||||
|
EventOrderSubmitCost *float64 `json:"eventOrderSubmitCost" dc:"订单提交成本"`
|
||||||
|
EventOrderSubmit *int64 `json:"eventOrderSubmit" dc:"订单提交数"`
|
||||||
|
EventOrderPaidRoi *float64 `json:"eventOrderPaidRoi" dc:"订单支付率"`
|
||||||
|
EventAppInvoked *int64 `json:"eventAppInvoked" dc:"唤起应用数"`
|
||||||
|
EventAddShoppingCart *int64 `json:"eventAddShoppingCart" dc:"添加购物车次数"`
|
||||||
|
ConversionNumCost *float64 `json:"conversionNumCost" dc:"转化成本(回传时间)"`
|
||||||
|
AdEffectivePlayNum *int64 `json:"adEffectivePlayNum" dc:"有效播放数"`
|
||||||
|
AdItemClick *int64 `json:"adItemClick" dc:"行为数"`
|
||||||
|
MerchantProductId string `json:"merchantProductId" dc:"商品 ID"`
|
||||||
|
CostTotal *float64 `json:"costTotal" dc:"花费"`
|
||||||
|
AdShow *int64 `json:"adShow" dc:"曝光数"`
|
||||||
|
AdShow1kCost *float64 `json:"adShow1kCost" dc:"平均千次广告曝光花费"`
|
||||||
|
Impression *int64 `json:"impression" dc:"封面曝光数"`
|
||||||
|
PhotoClick *int64 `json:"photoClick" dc:"封面点击数"`
|
||||||
|
PhotoClickRatio *float64 `json:"photoClickRatio" dc:"封面点击率"`
|
||||||
|
Click *int64 `json:"click" dc:"素材曝光数"`
|
||||||
|
ActionbarClick *int64 `json:"actionbarClick" dc:"行为数"`
|
||||||
|
ActionbarClickCost *float64 `json:"actionbarClickCost" dc:"行为成本"`
|
||||||
|
EspClickRatio *float64 `json:"espClickRatio" dc:"行为率"`
|
||||||
|
ActionRatio *float64 `json:"actionRatio" dc:"素材点击率"`
|
||||||
|
AdItemClickCount *int64 `json:"adItemClickCount" dc:"预约组件点击数"`
|
||||||
|
EspLivePlayedSeconds *int64 `json:"espLivePlayedSeconds" dc:"直播平均观看时长"`
|
||||||
|
PlayedThreeSeconds *int64 `json:"playedThreeSeconds" dc:"作品 3 秒播放数"`
|
||||||
|
Play3sRatio *float64 `json:"play3sRatio" dc:"作品 3 秒播放率"`
|
||||||
|
PlayedFiveSeconds *int64 `json:"playedFiveSeconds" dc:"作品 5 秒播放数"`
|
||||||
|
Play5sRatio *float64 `json:"play5sRatio" dc:"作品 5 秒播放率"`
|
||||||
|
PlayedEnd *int64 `json:"playedEnd" dc:"作品完播数"`
|
||||||
|
PlayEndRatio *float64 `json:"playEndRatio" dc:"作品完播率"`
|
||||||
|
Share *int64 `json:"share" dc:"作品分享数"`
|
||||||
|
Comment *int64 `json:"comment" dc:"作品评论数"`
|
||||||
|
Likes *int64 `json:"likes" dc:"作品点赞数"`
|
||||||
|
Report *int64 `json:"report" dc:"作品举报数"`
|
||||||
|
Block *int64 `json:"block" dc:"作品拉黑数"`
|
||||||
|
ItemNegative *int64 `json:"itemNegative" dc:"详情页减少此类作品数"`
|
||||||
|
LiveShare *int64 `json:"liveShare" dc:"直播送礼数"`
|
||||||
|
LiveComment *int64 `json:"liveComment" dc:"直播评论数"`
|
||||||
|
LiveReward *int64 `json:"liveReward" dc:"直播送礼数"`
|
||||||
|
EffectivePlayCount *int64 `json:"effectivePlayCount" dc:"有效播放数"`
|
||||||
|
EffectivePlayRatio *float64 `json:"effectivePlayRatio" dc:"有效播放率"`
|
||||||
|
ConversionNum *int64 `json:"conversionNum" dc:"转化数"`
|
||||||
|
ConversionCostEsp *float64 `json:"conversionCostEsp" dc:"转化成本"`
|
||||||
|
Roi *float64 `json:"roi" dc:"直接 ROI"`
|
||||||
|
Gmv *float64 `json:"gmv" dc:"直接 GMV"`
|
||||||
|
T0Gmv *float64 `json:"t0Gmv" dc:"当日累计 GMV"`
|
||||||
|
T1Gmv *float64 `json:"t1Gmv" dc:"次日累计 GMV"`
|
||||||
|
T7Gmv *float64 `json:"t7Gmv" dc:"7 日累计 GMV"`
|
||||||
|
T15Gmv *float64 `json:"t15Gmv" dc:"15 日累计 GMV"`
|
||||||
|
T30Gmv *float64 `json:"t30Gmv" dc:"30 日累计 GMV"`
|
||||||
|
T0Roi *float64 `json:"t0Roi" dc:"当日累计 ROI"`
|
||||||
|
T1Roi *float64 `json:"t1Roi" dc:"次日累计 ROI"`
|
||||||
|
T7Roi *float64 `json:"t7Roi" dc:"7 日累计 ROI"`
|
||||||
|
T15Roi *float64 `json:"t15Roi" dc:"15 日累计 ROI"`
|
||||||
|
T30Roi *float64 `json:"t30Roi" dc:"30 日累计 ROI"`
|
||||||
|
PaiedOrder *int64 `json:"paiedOrder" dc:"直接订单数"`
|
||||||
|
OrderRatio *float64 `json:"orderRatio" dc:"直接下单率"`
|
||||||
|
T0OrderCnt *int64 `json:"t0OrderCnt" dc:"当日累计订单数"`
|
||||||
|
T0OrderCntCost *float64 `json:"t0OrderCntCost" dc:"当日累计订单成本"`
|
||||||
|
T0OrderCntRatio *float64 `json:"t0OrderCntRatio" dc:"累计订单下单率"`
|
||||||
|
T1OrderCnt *int64 `json:"t1OrderCnt" dc:"次日累计订单数"`
|
||||||
|
T7OrderCnt *int64 `json:"t7OrderCnt" dc:"7 日累计订单数"`
|
||||||
|
T15OrderCnt *int64 `json:"t15OrderCnt" dc:"15 日累计订单数"`
|
||||||
|
T30OrderCnt *int64 `json:"t30OrderCnt" dc:"30 日累计订单数"`
|
||||||
|
MerchantRecoFans *int64 `json:"merchantRecoFans" dc:"涨粉数"`
|
||||||
|
T1Retention *float64 `json:"t1Retention" dc:"次日涨粉留存数"`
|
||||||
|
T7Retention *float64 `json:"t7Retention" dc:"7 日涨粉留存数"`
|
||||||
|
T15Retention *float64 `json:"t15Retention" dc:"15 日涨粉留存数"`
|
||||||
|
T30Retention *float64 `json:"t30Retention" dc:"30 日涨粉留存数"`
|
||||||
|
T1RetentionRatio *float64 `json:"t1RetentionRatio" dc:"次日涨粉留存率"`
|
||||||
|
T7RetentionRatio *float64 `json:"t7RetentionRatio" dc:"7 日涨粉留存率"`
|
||||||
|
T15RetentionRatio *float64 `json:"t15RetentionRatio" dc:"15 日涨粉留存率"`
|
||||||
|
T30RetentionRatio *float64 `json:"t30RetentionRatio" dc:"30 日涨粉留存率"`
|
||||||
|
ReservationSuccess *int64 `json:"reservationSuccess" dc:"直播预约成功数"`
|
||||||
|
ReservationCost *float64 `json:"reservationCost" dc:"直播预约成功成本"`
|
||||||
|
StandardLivePlayedStarted *int64 `json:"standardLivePlayedStarted" dc:"直播观看数"`
|
||||||
|
AdLivePlayCnt *int64 `json:"adLivePlayCnt" dc:"直播间人气数"`
|
||||||
|
AdLivePlayCntCost *float64 `json:"adLivePlayCntCost" dc:"直播间人气成本"`
|
||||||
|
LiveAudienceCost *float64 `json:"liveAudienceCost" dc:"直播观看成本"`
|
||||||
|
LiveEventGoodsView *int64 `json:"liveEventGoodsView" dc:"直播间商品点击数"`
|
||||||
|
GoodsClickRatio *float64 `json:"goodsClickRatio" dc:"直播间商品点击率"`
|
||||||
|
DirectAttrPlatNewBuyerCnt *int64 `json:"directAttrPlatNewBuyerCnt" dc:"直接平台新客"`
|
||||||
|
T30AttrPlatTotalBuyerCnt *int64 `json:"t30AttrPlatTotalBuyerCnt" dc:"30 日累计平台新客"`
|
||||||
|
DirectAttrSellerNewBuyerCnt *int64 `json:"directAttrSellerNewBuyerCnt" dc:"直接店铺新客"`
|
||||||
|
T30AttrSellerTotalBuyerCnt *int64 `json:"t30AttrSellerTotalBuyerCnt" dc:"30 日累计店铺新客"`
|
||||||
|
T3Gmv *float64 `json:"t3Gmv" dc:"3 日累计 GMV"`
|
||||||
|
T3OrderCnt *int64 `json:"t3OrderCnt" dc:"3 日累计订单数"`
|
||||||
|
T3Roi *float64 `json:"t3Roi" dc:"3 日累计 ROI"`
|
||||||
|
T7IndirectOrderAmt *float64 `json:"t7IndirectOrderAmt" dc:"7 日间接订单金额"`
|
||||||
|
T7IndirectOrderCnt *int64 `json:"t7IndirectOrderCnt" dc:"7 日间接订单数"`
|
||||||
|
FansT0GmvPerFans *float64 `json:"fansT0GmvPerFans" dc:"新增粉丝人均销售额"`
|
||||||
|
FansT3GmvPerFans *float64 `json:"fansT3GmvPerFans" dc:"3 日新增粉丝人均销售额"`
|
||||||
|
FansT7GmvPerFans *float64 `json:"fansT7GmvPerFans" dc:"7 日新增粉丝人均销售额"`
|
||||||
|
FansT15GmvPerFans *float64 `json:"fansT15GmvPerFans" dc:"15 日新增粉丝人均销售额"`
|
||||||
|
FansT30GmvPerFans *float64 `json:"fansT30GmvPerFans" dc:"30 日新增粉丝人均销售额"`
|
||||||
|
RecoFansCost *float64 `json:"recoFansCost" dc:"涨粉成本"`
|
||||||
|
QcpxWhiteboxDirectOrderPaymentAmt *float64 `json:"qcpxWhiteboxDirectOrderPaymentAmt" dc:"智能优惠券订单 GMV"`
|
||||||
|
QcpxWhiteboxDirectOrderCnt *int64 `json:"qcpxWhiteboxDirectOrderCnt" dc:"智能优惠券订单数"`
|
||||||
|
FansT0Gmv *float64 `json:"fansT0Gmv" dc:"涨粉当日 GMV"`
|
||||||
|
FansT1Gmv *float64 `json:"fansT1Gmv" dc:"涨粉次日 GMV"`
|
||||||
|
FansT7Gmv *float64 `json:"fansT7Gmv" dc:"涨粉 7 日 GMV"`
|
||||||
|
FansT15Gmv *float64 `json:"fansT15Gmv" dc:"涨粉 15 日 GMV"`
|
||||||
|
FansT30Gmv *float64 `json:"fansT30Gmv" dc:"涨粉 30 日 GMV"`
|
||||||
|
FansT0Roi *float64 `json:"fansT0Roi" dc:"涨粉当日 ROI"`
|
||||||
|
FansT1Roi *float64 `json:"fansT1Roi" dc:"涨粉次日 ROI"`
|
||||||
|
FansT7Roi *float64 `json:"fansT7Roi" dc:"涨粉 7 日 ROI"`
|
||||||
|
FansT15Roi *float64 `json:"fansT15Roi" dc:"涨粉 15 日 ROI"`
|
||||||
|
FansT30Roi *float64 `json:"fansT30Roi" dc:"涨粉 30 日 ROI"`
|
||||||
|
T0ShopNewBuyerOrderPaymentAmt *float64 `json:"t0ShopNewBuyerOrderPaymentAmt" dc:"当日新客 GMV"`
|
||||||
|
T1ShopNewBuyerOrderPaymentAmt *float64 `json:"t1ShopNewBuyerOrderPaymentAmt" dc:"投后 1 日新客 GMV"`
|
||||||
|
T3ShopNewBuyerOrderPaymentAmt *float64 `json:"t3ShopNewBuyerOrderPaymentAmt" dc:"投后 3 日新客 GMV"`
|
||||||
|
T7ShopNewBuyerOrderPaymentAmt *float64 `json:"t7ShopNewBuyerOrderPaymentAmt" dc:"投后 7 日新客 GMV"`
|
||||||
|
T15ShopNewBuyerOrderPaymentAmt *float64 `json:"t15ShopNewBuyerOrderPaymentAmt" dc:"投后 15 日新客 GMV"`
|
||||||
|
T30ShopNewBuyerOrderPaymentAmt *float64 `json:"t30ShopNewBuyerOrderPaymentAmt" dc:"投后 30 日新客 GMV"`
|
||||||
|
T0ShopNewBuyerOrderCnt *int64 `json:"t0ShopNewBuyerOrderCnt" dc:"当日新客成交订单量"`
|
||||||
|
T1ShopNewBuyerOrderCnt *int64 `json:"t1ShopNewBuyerOrderCnt" dc:"投后 1 日新客成交订单量"`
|
||||||
|
T3ShopNewBuyerOrderCnt *int64 `json:"t3ShopNewBuyerOrderCnt" dc:"投后 3 日新客成交订单量"`
|
||||||
|
T7ShopNewBuyerOrderCnt *int64 `json:"t7ShopNewBuyerOrderCnt" dc:"投后 7 日新客成交订单量"`
|
||||||
|
T15ShopNewBuyerOrderCnt *int64 `json:"t15ShopNewBuyerOrderCnt" dc:"投后 15 日新客成交订单量"`
|
||||||
|
T30ShopNewBuyerOrderCnt *int64 `json:"t30ShopNewBuyerOrderCnt" dc:"投后 30 日新客成交订单量"`
|
||||||
|
T1NewBuyerRepurchaseRatio *float64 `json:"t1NewBuyerRepurchaseRatio" dc:"投后 1 日新客复购率"`
|
||||||
|
T3NewBuyerRepurchaseRatio *float64 `json:"t3NewBuyerRepurchaseRatio" dc:"投后 3 日新客复购率"`
|
||||||
|
T7NewBuyerRepurchaseRatio *float64 `json:"t7NewBuyerRepurchaseRatio" dc:"投后 7 日新客复购率"`
|
||||||
|
T15NewBuyerRepurchaseRatio *float64 `json:"t15NewBuyerRepurchaseRatio" dc:"投后 15 日新客复购率"`
|
||||||
|
T30NewBuyerRepurchaseRatio *float64 `json:"t30NewBuyerRepurchaseRatio" dc:"投后 30 日新客复购率"`
|
||||||
|
T0ShopNewBuyerRoi *float64 `json:"t0ShopNewBuyerRoi" dc:"投后当日新客 ROI"`
|
||||||
|
T1ShopNewBuyerRoi *float64 `json:"t1ShopNewBuyerRoi" dc:"投后 1 日新客 ROI"`
|
||||||
|
T3ShopNewBuyerRoi *float64 `json:"t3ShopNewBuyerRoi" dc:"投后 3 日新客 ROI"`
|
||||||
|
T7ShopNewBuyerRoi *float64 `json:"t7ShopNewBuyerRoi" dc:"投后 7 日新客 ROI"`
|
||||||
|
T15ShopNewBuyerRoi *float64 `json:"t15ShopNewBuyerRoi" dc:"投后 15 日新客 ROI"`
|
||||||
|
T30ShopNewBuyerRoi *float64 `json:"t30ShopNewBuyerRoi" dc:"投后 30 日新客 ROI"`
|
||||||
|
CreateCardOrderCnt *int64 `json:"createCardOrderCnt" dc:"有效制卡订单数(回传时间)"`
|
||||||
|
ForwardTsCreateCardOrderCnt *int64 `json:"forwardTsCreateCardOrderCnt" dc:"有效制卡订单数(计费时间)"`
|
||||||
|
CreateCardOrderCost *float64 `json:"createCardOrderCost" dc:"有效制卡订单成本(回传时间)"`
|
||||||
|
ForwardTsCreateCardOrderCost *float64 `json:"forwardTsCreateCardOrderCost" dc:"有效制卡订单成本(计费时间)"`
|
||||||
|
ActivateCardOrderCnt *int64 `json:"activateCardOrderCnt" dc:"电话卡激活订单数(回传时间)"`
|
||||||
|
ForwardTsActivateCardOrderCnt *int64 `json:"forwardTsActivateCardOrderCnt" dc:"电话卡激活订单数(计费时间)"`
|
||||||
|
ActivateCardOrderCost *float64 `json:"activateCardOrderCost" dc:"电话卡激活订单成本(回传时间)"`
|
||||||
|
ForwardTsActivateCardOrderCost *float64 `json:"forwardTsActivateCardOrderCost" dc:"电话卡激活订单成本(计费时间)"`
|
||||||
|
CreateCardOrderRatio *float64 `json:"createCardOrderRatio" dc:"有效制卡订单率(回传时间)"`
|
||||||
|
ForwardTsCreateCardOrderRatio *float64 `json:"forwardTsCreateCardOrderRatio" dc:"有效制卡订单率(计费时间)"`
|
||||||
|
ActivateCardOrderCntRatio *float64 `json:"activateCardOrderCntRatio" dc:"电话卡激活率(回传时间)"`
|
||||||
|
ForwardTsActivateCardOrderRatio *float64 `json:"forwardTsActivateCardOrderRatio" dc:"电话卡激活率(计费时间)"`
|
||||||
|
LivePlayCnt *int64 `json:"livePlayCnt" dc:"全站直播观看数"`
|
||||||
|
ItemEntranceClkCnt *int64 `json:"itemEntranceClkCnt" dc:"小黄车点击数"`
|
||||||
|
ShowCnt *int64 `json:"showCnt" dc:"全站曝光"`
|
||||||
|
ReportDateStr string `json:"reportDateStr" v:"required" dc:"时间"`
|
||||||
|
CampaignId *int64 `json:"campaignId" dc:"计划 ID"`
|
||||||
|
CampaignName string `json:"campaignName" dc:"计划名称"`
|
||||||
|
UnitId *int64 `json:"unitId" dc:"单元 ID"`
|
||||||
|
UnitName string `json:"unitName" dc:"单元名称"`
|
||||||
|
CreativeId *int64 `json:"creativeId" dc:"创意 ID"`
|
||||||
|
CreativeName string `json:"creativeName" dc:"创意名称"`
|
||||||
|
CidActualRoiAfterSubsidy *float64 `json:"cidActualRoiAfterSubsidy" dc:"补贴后实际 ROI"`
|
||||||
|
CidCouponAmount *int64 `json:"cidCouponAmount" dc:"核销券金额"`
|
||||||
|
CidCouponCallbackPaidRefundAmount *int64 `json:"cidCouponCallbackPaidRefundAmount" dc:"退单有回传_核销券金额"`
|
||||||
|
CidVoucherCost *float64 `json:"cidVoucherCost" dc:"券成本"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ListCampaignReportDetailReq struct {
|
||||||
|
g.Meta `path:"/listCampaignReportDetail" method:"get" tags:"广告效果明细报表" summary:"获取广告效果指标明细表列表" dc:"分页查询广告效果指标明细表列表"`
|
||||||
|
*beans.Page
|
||||||
|
ReportDateStr string `json:"reportDateStr" dc:"时间"`
|
||||||
|
CampaignId *int64 `json:"campaignId" dc:"计划 ID"`
|
||||||
|
UnitId *int64 `json:"unitId" dc:"单元 ID"`
|
||||||
|
CreativeId *int64 `json:"creativeId" dc:"创意 ID"`
|
||||||
|
AuthorId string `json:"authorId" dc:"直播用户快手 Id"`
|
||||||
|
MerchantProductId string `json:"merchantProductId" dc:"商品 ID"`
|
||||||
|
Keyword string `json:"keyword" dc:"关键字"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ListCampaignReportDetailRes struct {
|
||||||
|
List []*CampaignReportDetailItem `json:"list" dc:"广告效果明细列表"`
|
||||||
|
Total int `json:"total" dc:"总数"`
|
||||||
|
}
|
||||||
237
model/dto/copydata/campaign_report_sum_dto.go
Normal file
237
model/dto/copydata/campaign_report_sum_dto.go
Normal file
@@ -0,0 +1,237 @@
|
|||||||
|
package copydata
|
||||||
|
|
||||||
|
import (
|
||||||
|
"gitea.com/red-future/common/beans"
|
||||||
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CreateCampaignReportSumReq 创建广告计划效果指标表请求
|
||||||
|
type CreateCampaignReportSumReq struct {
|
||||||
|
g.Meta `path:"/createCampaignReportSum" method:"post" tags:"广告计划报表" summary:"创建广告计划效果指标表" dc:"创建新的广告计划效果指标表"`
|
||||||
|
*CampaignReportSumItem
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateCampaignReportSumRes 创建广告计划效果指标表响应
|
||||||
|
type CreateCampaignReportSumRes struct {
|
||||||
|
Id int64 `json:"id" dc:"广告计划效果 ID"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// BatchCreateCampaignReportSumReq 批量创建广告计划效果指标表请求
|
||||||
|
type BatchCreateCampaignReportSumReq struct {
|
||||||
|
g.Meta `path:"/batchCreateCampaignReportSum" method:"post" tags:"广告计划报表" summary:"批量创建广告计划效果指标表" dc:"批量创建广告计划效果指标表"`
|
||||||
|
Items []*CampaignReportSumItem `json:"items" v:"required" dc:"广告计划效果列表"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// BatchCreateCampaignReportSumRes 批量创建广告计划效果指标表响应
|
||||||
|
type BatchCreateCampaignReportSumRes struct {
|
||||||
|
SuccessCount int64 `json:"successCount" dc:"成功数量"`
|
||||||
|
FailCount int64 `json:"failCount" dc:"失败数量"`
|
||||||
|
FailedItems []int64 `json:"failedItems" dc:"失败项索引"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CampaignReportSumItem 广告计划效果指标表项
|
||||||
|
type CampaignReportSumItem struct {
|
||||||
|
T0OrderPaymentAmt *float64 `json:"t0OrderPaymentAmt" dc:"当日总成交订单金额"`
|
||||||
|
CreativeMaterialType string `json:"creativeMaterialType" dc:"视频素材类型(视频:HORIZONTAL_SCREEN, VERTICAL_SCREEN, UNKNOWN_TYPE;图集:ATLAS;长图:ATLAS_VERTICAL)"`
|
||||||
|
LiveName string `json:"liveName" dc:"直播间名称"`
|
||||||
|
AuthorId string `json:"authorId" dc:"直播用户快手 Id"`
|
||||||
|
PicUrl string `json:"picUrl" dc:"图片 URL"`
|
||||||
|
PicName string `json:"picName" dc:"图片名称"`
|
||||||
|
PicId string `json:"picId" dc:"图片 Id"`
|
||||||
|
CoverUrl string `json:"coverUrl" dc:"封面 URL"`
|
||||||
|
CoverId *int64 `json:"coverId" dc:"封面 Id"`
|
||||||
|
ItemOrderConversionRatio *float64 `json:"itemOrderConversionRatio" dc:"转化率"`
|
||||||
|
ItemCardClickRatio *float64 `json:"itemCardClickRatio" dc:"点击率"`
|
||||||
|
ItemCardClkCnt *int64 `json:"itemCardClkCnt" dc:"商品卡点击数"`
|
||||||
|
LivePlayCntCost *float64 `json:"livePlayCntCost" dc:"直播间观看成本"`
|
||||||
|
AdMerchantFollowCost *float64 `json:"adMerchantFollowCost" dc:"涨粉成本"`
|
||||||
|
AdMerchantFollow *int64 `json:"adMerchantFollow" dc:"涨粉数"`
|
||||||
|
NetT0OrderCnt *int64 `json:"netT0OrderCnt" dc:"当日累计净成交订单数"`
|
||||||
|
NetT0Roi *float64 `json:"netT0Roi" dc:"净成交 ROI"`
|
||||||
|
NetT0Gmv *float64 `json:"netT0Gmv" dc:"净成交 GMV"`
|
||||||
|
PhotoName string `json:"photoName" dc:"视频名称"`
|
||||||
|
PhotoIdStr string `json:"photoIdStr" dc:"视频 id"`
|
||||||
|
PhotoId string `json:"photoId" dc:"视频 id"`
|
||||||
|
ModPriceSegment string `json:"modPriceSegment" dc:"设备价格区间"`
|
||||||
|
AgeSegment string `json:"ageSegment" dc:"年龄段"`
|
||||||
|
Province string `json:"province" dc:"省份名称"`
|
||||||
|
Gender string `json:"gender" dc:"性别"`
|
||||||
|
AdPhotoPlayedFiveRatio *float64 `json:"adPhotoPlayedFiveRatio" dc:"作品 5 秒播放率"`
|
||||||
|
AdPhotoPlayedThreeRatio *float64 `json:"adPhotoPlayedThreeRatio" dc:"作品 3 秒播放率"`
|
||||||
|
OrderSubmitRoi *float64 `json:"orderSubmitRoi" dc:"订单提交 ROI"`
|
||||||
|
OrderSubmitAmt *int64 `json:"orderSubmitAmt" dc:"外部订单金额"`
|
||||||
|
EventOrderSubmitCost *float64 `json:"eventOrderSubmitCost" dc:"订单提交成本"`
|
||||||
|
EventOrderSubmit *int64 `json:"eventOrderSubmit" dc:"订单提交数"`
|
||||||
|
EventOrderPaidRoi *float64 `json:"eventOrderPaidRoi" dc:"订单支付率"`
|
||||||
|
EventAppInvoked *int64 `json:"eventAppInvoked" dc:"唤起应用数"`
|
||||||
|
EventAddShoppingCart *int64 `json:"eventAddShoppingCart" dc:"添加购物车次数"`
|
||||||
|
ConversionNumCost *float64 `json:"conversionNumCost" dc:"转化成本(回传时间)"`
|
||||||
|
AdEffectivePlayNum *int64 `json:"adEffectivePlayNum" dc:"有效播放数"`
|
||||||
|
AdItemClick *int64 `json:"adItemClick" dc:"行为数"`
|
||||||
|
MerchantProductId string `json:"merchantProductId" dc:"商品 ID"`
|
||||||
|
CostTotal *float64 `json:"costTotal" dc:"花费"`
|
||||||
|
AdShow *int64 `json:"adShow" dc:"曝光数"`
|
||||||
|
AdShow1kCost *float64 `json:"adShow1kCost" dc:"平均千次广告曝光花费"`
|
||||||
|
Impression *int64 `json:"impression" dc:"封面曝光数"`
|
||||||
|
PhotoClick *int64 `json:"photoClick" dc:"封面点击数"`
|
||||||
|
PhotoClickRatio *float64 `json:"photoClickRatio" dc:"封面点击率"`
|
||||||
|
Click *int64 `json:"click" dc:"素材曝光数"`
|
||||||
|
ActionbarClick *int64 `json:"actionbarClick" dc:"行为数"`
|
||||||
|
ActionbarClickCost *float64 `json:"actionbarClickCost" dc:"行为成本"`
|
||||||
|
EspClickRatio *float64 `json:"espClickRatio" dc:"行为率"`
|
||||||
|
ActionRatio *float64 `json:"actionRatio" dc:"素材点击率"`
|
||||||
|
AdItemClickCount *int64 `json:"adItemClickCount" dc:"预约组件点击数"`
|
||||||
|
EspLivePlayedSeconds *int64 `json:"espLivePlayedSeconds" dc:"直播平均观看时长"`
|
||||||
|
PlayedThreeSeconds *int64 `json:"playedThreeSeconds" dc:"作品 3 秒播放数"`
|
||||||
|
Play3sRatio *float64 `json:"play3sRatio" dc:"作品 3 秒播放率"`
|
||||||
|
PlayedFiveSeconds *int64 `json:"playedFiveSeconds" dc:"作品 5 秒播放数"`
|
||||||
|
Play5sRatio *float64 `json:"play5sRatio" dc:"作品 5 秒播放率"`
|
||||||
|
PlayedEnd *int64 `json:"playedEnd" dc:"作品完播数"`
|
||||||
|
PlayEndRatio *float64 `json:"playEndRatio" dc:"作品完播率"`
|
||||||
|
Share *int64 `json:"share" dc:"作品分享数"`
|
||||||
|
Comment *int64 `json:"comment" dc:"作品评论数"`
|
||||||
|
Likes *int64 `json:"likes" dc:"作品点赞数"`
|
||||||
|
Report *int64 `json:"report" dc:"作品举报数"`
|
||||||
|
Block *int64 `json:"block" dc:"作品拉黑数"`
|
||||||
|
ItemNegative *int64 `json:"itemNegative" dc:"详情页减少此类作品数"`
|
||||||
|
LiveShare *int64 `json:"liveShare" dc:"直播送礼数"`
|
||||||
|
LiveComment *int64 `json:"liveComment" dc:"直播评论数"`
|
||||||
|
LiveReward *int64 `json:"liveReward" dc:"直播送礼数"`
|
||||||
|
EffectivePlayCount *int64 `json:"effectivePlayCount" dc:"有效播放数"`
|
||||||
|
EffectivePlayRatio *float64 `json:"effectivePlayRatio" dc:"有效播放率"`
|
||||||
|
ConversionNum *int64 `json:"conversionNum" dc:"转化数"`
|
||||||
|
ConversionCostEsp *float64 `json:"conversionCostEsp" dc:"转化成本"`
|
||||||
|
Roi *float64 `json:"roi" dc:"直接 ROI"`
|
||||||
|
Gmv *float64 `json:"gmv" dc:"直接 GMV"`
|
||||||
|
T0Gmv *float64 `json:"t0Gmv" dc:"当日累计 GMV"`
|
||||||
|
T1Gmv *float64 `json:"t1Gmv" dc:"次日累计 GMV"`
|
||||||
|
T7Gmv *float64 `json:"t7Gmv" dc:"7 日累计 GMV"`
|
||||||
|
T15Gmv *float64 `json:"t15Gmv" dc:"15 日累计 GMV"`
|
||||||
|
T30Gmv *float64 `json:"t30Gmv" dc:"30 日累计 GMV"`
|
||||||
|
T0Roi *float64 `json:"t0Roi" dc:"当日累计 ROI"`
|
||||||
|
T1Roi *float64 `json:"t1Roi" dc:"次日累计 ROI"`
|
||||||
|
T7Roi *float64 `json:"t7Roi" dc:"7 日累计 ROI"`
|
||||||
|
T15Roi *float64 `json:"t15Roi" dc:"15 日累计 ROI"`
|
||||||
|
T30Roi *float64 `json:"t30Roi" dc:"30 日累计 ROI"`
|
||||||
|
PaiedOrder *int64 `json:"paiedOrder" dc:"直接订单数"`
|
||||||
|
OrderRatio *float64 `json:"orderRatio" dc:"直接下单率"`
|
||||||
|
T0OrderCnt *int64 `json:"t0OrderCnt" dc:"当日累计订单数"`
|
||||||
|
T0OrderCntCost *float64 `json:"t0OrderCntCost" dc:"当日累计订单成本"`
|
||||||
|
T0OrderCntRatio *float64 `json:"t0OrderCntRatio" dc:"累计订单下单率"`
|
||||||
|
T1OrderCnt *int64 `json:"t1OrderCnt" dc:"次日累计订单数"`
|
||||||
|
T7OrderCnt *int64 `json:"t7OrderCnt" dc:"7 日累计订单数"`
|
||||||
|
T15OrderCnt *int64 `json:"t15OrderCnt" dc:"15 日累计订单数"`
|
||||||
|
T30OrderCnt *int64 `json:"t30OrderCnt" dc:"30 日累计订单数"`
|
||||||
|
MerchantRecoFans *int64 `json:"merchantRecoFans" dc:"涨粉数"`
|
||||||
|
T1Retention *float64 `json:"t1Retention" dc:"次日涨粉留存数"`
|
||||||
|
T7Retention *float64 `json:"t7Retention" dc:"7 日涨粉留存数"`
|
||||||
|
T15Retention *float64 `json:"t15Retention" dc:"15 日涨粉留存数"`
|
||||||
|
T30Retention *float64 `json:"t30Retention" dc:"30 日涨粉留存数"`
|
||||||
|
T1RetentionRatio *float64 `json:"t1RetentionRatio" dc:"次日涨粉留存率"`
|
||||||
|
T7RetentionRatio *float64 `json:"t7RetentionRatio" dc:"7 日涨粉留存率"`
|
||||||
|
T15RetentionRatio *float64 `json:"t15RetentionRatio" dc:"15 日涨粉留存率"`
|
||||||
|
T30RetentionRatio *float64 `json:"t30RetentionRatio" dc:"30 日涨粉留存率"`
|
||||||
|
ReservationSuccess *int64 `json:"reservationSuccess" dc:"直播预约成功数"`
|
||||||
|
ReservationCost *float64 `json:"reservationCost" dc:"直播预约成功成本"`
|
||||||
|
StandardLivePlayedStarted *int64 `json:"standardLivePlayedStarted" dc:"直播观看数"`
|
||||||
|
AdLivePlayCnt *int64 `json:"adLivePlayCnt" dc:"直播间人气数"`
|
||||||
|
AdLivePlayCntCost *float64 `json:"adLivePlayCntCost" dc:"直播间人气成本"`
|
||||||
|
LiveAudienceCost *float64 `json:"liveAudienceCost" dc:"直播观看成本"`
|
||||||
|
LiveEventGoodsView *int64 `json:"liveEventGoodsView" dc:"直播间商品点击数"`
|
||||||
|
GoodsClickRatio *float64 `json:"goodsClickRatio" dc:"直播间商品点击率"`
|
||||||
|
DirectAttrPlatNewBuyerCnt *int64 `json:"directAttrPlatNewBuyerCnt" dc:"直接平台新客"`
|
||||||
|
T30AttrPlatTotalBuyerCnt *int64 `json:"t30AttrPlatTotalBuyerCnt" dc:"30 日累计平台新客"`
|
||||||
|
DirectAttrSellerNewBuyerCnt *int64 `json:"directAttrSellerNewBuyerCnt" dc:"直接店铺新客"`
|
||||||
|
T30AttrSellerTotalBuyerCnt *int64 `json:"t30AttrSellerTotalBuyerCnt" dc:"30 日累计店铺新客"`
|
||||||
|
T3Gmv *float64 `json:"t3Gmv" dc:"3 日累计 GMV"`
|
||||||
|
T3OrderCnt *int64 `json:"t3OrderCnt" dc:"3 日累计订单数"`
|
||||||
|
T3Roi *float64 `json:"t3Roi" dc:"3 日累计 ROI"`
|
||||||
|
T7IndirectOrderAmt *float64 `json:"t7IndirectOrderAmt" dc:"7 日间接订单金额"`
|
||||||
|
T7IndirectOrderCnt *int64 `json:"t7IndirectOrderCnt" dc:"7 日间接订单数"`
|
||||||
|
FansT0GmvPerFans *float64 `json:"fansT0GmvPerFans" dc:"新增粉丝人均销售额"`
|
||||||
|
FansT3GmvPerFans *float64 `json:"fansT3GmvPerFans" dc:"3 日新增粉丝人均销售额"`
|
||||||
|
FansT7GmvPerFans *float64 `json:"fansT7GmvPerFans" dc:"7 日新增粉丝人均销售额"`
|
||||||
|
FansT15GmvPerFans *float64 `json:"fansT15GmvPerFans" dc:"15 日新增粉丝人均销售额"`
|
||||||
|
FansT30GmvPerFans *float64 `json:"fansT30GmvPerFans" dc:"30 日新增粉丝人均销售额"`
|
||||||
|
RecoFansCost *float64 `json:"recoFansCost" dc:"涨粉成本"`
|
||||||
|
QcpxWhiteboxDirectOrderPaymentAmt *float64 `json:"qcpxWhiteboxDirectOrderPaymentAmt" dc:"智能优惠券订单 GMV"`
|
||||||
|
QcpxWhiteboxDirectOrderCnt *int64 `json:"qcpxWhiteboxDirectOrderCnt" dc:"智能优惠券订单数"`
|
||||||
|
FansT0Gmv *float64 `json:"fansT0Gmv" dc:"涨粉当日 GMV"`
|
||||||
|
FansT1Gmv *float64 `json:"fansT1Gmv" dc:"涨粉次日 GMV"`
|
||||||
|
FansT7Gmv *float64 `json:"fansT7Gmv" dc:"涨粉 7 日 GMV"`
|
||||||
|
FansT15Gmv *float64 `json:"fansT15Gmv" dc:"涨粉 15 日 GMV"`
|
||||||
|
FansT30Gmv *float64 `json:"fansT30Gmv" dc:"涨粉 30 日 GMV"`
|
||||||
|
FansT0Roi *float64 `json:"fansT0Roi" dc:"涨粉当日 ROI"`
|
||||||
|
FansT1Roi *float64 `json:"fansT1Roi" dc:"涨粉次日 ROI"`
|
||||||
|
FansT7Roi *float64 `json:"fansT7Roi" dc:"涨粉 7 日 ROI"`
|
||||||
|
FansT15Roi *float64 `json:"fansT15Roi" dc:"涨粉 15 日 ROI"`
|
||||||
|
FansT30Roi *float64 `json:"fansT30Roi" dc:"涨粉 30 日 ROI"`
|
||||||
|
T0ShopNewBuyerOrderPaymentAmt *float64 `json:"t0ShopNewBuyerOrderPaymentAmt" dc:"当日新客 GMV"`
|
||||||
|
T1ShopNewBuyerOrderPaymentAmt *float64 `json:"t1ShopNewBuyerOrderPaymentAmt" dc:"投后 1 日新客 GMV"`
|
||||||
|
T3ShopNewBuyerOrderPaymentAmt *float64 `json:"t3ShopNewBuyerOrderPaymentAmt" dc:"投后 3 日新客 GMV"`
|
||||||
|
T7ShopNewBuyerOrderPaymentAmt *float64 `json:"t7ShopNewBuyerOrderPaymentAmt" dc:"投后 7 日新客 GMV"`
|
||||||
|
T15ShopNewBuyerOrderPaymentAmt *float64 `json:"t15ShopNewBuyerOrderPaymentAmt" dc:"投后 15 日新客 GMV"`
|
||||||
|
T30ShopNewBuyerOrderPaymentAmt *float64 `json:"t30ShopNewBuyerOrderPaymentAmt" dc:"投后 30 日新客 GMV"`
|
||||||
|
T0ShopNewBuyerOrderCnt *int64 `json:"t0ShopNewBuyerOrderCnt" dc:"当日新客成交订单量"`
|
||||||
|
T1ShopNewBuyerOrderCnt *int64 `json:"t1ShopNewBuyerOrderCnt" dc:"投后 1 日新客成交订单量"`
|
||||||
|
T3ShopNewBuyerOrderCnt *int64 `json:"t3ShopNewBuyerOrderCnt" dc:"投后 3 日新客成交订单量"`
|
||||||
|
T7ShopNewBuyerOrderCnt *int64 `json:"t7ShopNewBuyerOrderCnt" dc:"投后 7 日新客成交订单量"`
|
||||||
|
T15ShopNewBuyerOrderCnt *int64 `json:"t15ShopNewBuyerOrderCnt" dc:"投后 15 日新客成交订单量"`
|
||||||
|
T30ShopNewBuyerOrderCnt *int64 `json:"t30ShopNewBuyerOrderCnt" dc:"投后 30 日新客成交订单量"`
|
||||||
|
T1NewBuyerRepurchaseRatio *float64 `json:"t1NewBuyerRepurchaseRatio" dc:"投后 1 日新客复购率"`
|
||||||
|
T3NewBuyerRepurchaseRatio *float64 `json:"t3NewBuyerRepurchaseRatio" dc:"投后 3 日新客复购率"`
|
||||||
|
T7NewBuyerRepurchaseRatio *float64 `json:"t7NewBuyerRepurchaseRatio" dc:"投后 7 日新客复购率"`
|
||||||
|
T15NewBuyerRepurchaseRatio *float64 `json:"t15NewBuyerRepurchaseRatio" dc:"投后 15 日新客复购率"`
|
||||||
|
T30NewBuyerRepurchaseRatio *float64 `json:"t30NewBuyerRepurchaseRatio" dc:"投后 30 日新客复购率"`
|
||||||
|
T0ShopNewBuyerRoi *float64 `json:"t0ShopNewBuyerRoi" dc:"投后当日新客 ROI"`
|
||||||
|
T1ShopNewBuyerRoi *float64 `json:"t1ShopNewBuyerRoi" dc:"投后 1 日新客 ROI"`
|
||||||
|
T3ShopNewBuyerRoi *float64 `json:"t3ShopNewBuyerRoi" dc:"投后 3 日新客 ROI"`
|
||||||
|
T7ShopNewBuyerRoi *float64 `json:"t7ShopNewBuyerRoi" dc:"投后 7 日新客 ROI"`
|
||||||
|
T15ShopNewBuyerRoi *float64 `json:"t15ShopNewBuyerRoi" dc:"投后 15 日新客 ROI"`
|
||||||
|
T30ShopNewBuyerRoi *float64 `json:"t30ShopNewBuyerRoi" dc:"投后 30 日新客 ROI"`
|
||||||
|
CreateCardOrderCnt *int64 `json:"createCardOrderCnt" dc:"有效制卡订单数(回传时间)"`
|
||||||
|
ForwardTsCreateCardOrderCnt *int64 `json:"forwardTsCreateCardOrderCnt" dc:"有效制卡订单数(计费时间)"`
|
||||||
|
CreateCardOrderCost *float64 `json:"createCardOrderCost" dc:"有效制卡订单成本(回传时间)"`
|
||||||
|
ForwardTsCreateCardOrderCost *float64 `json:"forwardTsCreateCardOrderCost" dc:"有效制卡订单成本(计费时间)"`
|
||||||
|
ActivateCardOrderCnt *int64 `json:"activateCardOrderCnt" dc:"电话卡激活订单数(回传时间)"`
|
||||||
|
ForwardTsActivateCardOrderCnt *int64 `json:"forwardTsActivateCardOrderCnt" dc:"电话卡激活订单数(计费时间)"`
|
||||||
|
ActivateCardOrderCost *float64 `json:"activateCardOrderCost" dc:"电话卡激活订单成本(回传时间)"`
|
||||||
|
ForwardTsActivateCardOrderCost *float64 `json:"forwardTsActivateCardOrderCost" dc:"电话卡激活订单成本(计费时间)"`
|
||||||
|
CreateCardOrderRatio *float64 `json:"createCardOrderRatio" dc:"有效制卡订单率(回传时间)"`
|
||||||
|
ForwardTsCreateCardOrderRatio *float64 `json:"forwardTsCreateCardOrderRatio" dc:"有效制卡订单率(计费时间)"`
|
||||||
|
ActivateCardOrderCntRatio *float64 `json:"activateCardOrderCntRatio" dc:"电话卡激活率(回传时间)"`
|
||||||
|
ForwardTsActivateCardOrderRatio *float64 `json:"forwardTsActivateCardOrderRatio" dc:"电话卡激活率(计费时间)"`
|
||||||
|
LivePlayCnt *int64 `json:"livePlayCnt" dc:"全站直播观看数"`
|
||||||
|
ItemEntranceClkCnt *int64 `json:"itemEntranceClkCnt" dc:"小黄车点击数"`
|
||||||
|
ShowCnt *int64 `json:"showCnt" dc:"全站曝光"`
|
||||||
|
ReportDateStr string `json:"reportDateStr" v:"required" dc:"时间"`
|
||||||
|
CampaignId *int64 `json:"campaignId" dc:"计划 ID"`
|
||||||
|
CampaignName string `json:"campaignName" dc:"计划名称"`
|
||||||
|
UnitId *int64 `json:"unitId" dc:"单元 ID"`
|
||||||
|
UnitName string `json:"unitName" dc:"单元名称"`
|
||||||
|
CreativeId *int64 `json:"creativeId" dc:"创意 ID"`
|
||||||
|
CreativeName string `json:"creativeName" dc:"创意名称"`
|
||||||
|
CidActualRoiAfterSubsidy *float64 `json:"cidActualRoiAfterSubsidy" dc:"补贴后实际 ROI"`
|
||||||
|
CidCouponAmount *int64 `json:"cidCouponAmount" dc:"核销券金额"`
|
||||||
|
CidCouponCallbackPaidRefundAmount *int64 `json:"cidCouponCallbackPaidRefundAmount" dc:"退单有回传_核销券金额"`
|
||||||
|
CidVoucherCost *float64 `json:"cidVoucherCost" dc:"券成本"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListCampaignReportSumReq 获取广告计划效果指标表列表请求
|
||||||
|
type ListCampaignReportSumReq struct {
|
||||||
|
g.Meta `path:"/listCampaignReportSum" method:"get" tags:"广告计划报表" summary:"获取广告计划效果指标表列表" dc:"分页查询广告计划效果指标表列表"`
|
||||||
|
*beans.Page
|
||||||
|
ReportDateStr string `json:"reportDateStr" dc:"时间"`
|
||||||
|
CampaignId *int64 `json:"campaignId" dc:"计划 ID"`
|
||||||
|
UnitId *int64 `json:"unitId" dc:"单元 ID"`
|
||||||
|
CreativeId *int64 `json:"creativeId" dc:"创意 ID"`
|
||||||
|
AuthorId string `json:"authorId" dc:"直播用户快手 Id"`
|
||||||
|
MerchantProductId string `json:"merchantProductId" dc:"商品 ID"`
|
||||||
|
Keyword string `json:"keyword" dc:"关键字(搜索直播间名称、视频名称等)"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListCampaignReportSumRes 获取广告计划效果指标表列表响应
|
||||||
|
type ListCampaignReportSumRes struct {
|
||||||
|
List []*CampaignReportSumItem `json:"list" dc:"广告计划效果列表"`
|
||||||
|
Total int `json:"total" dc:"总数"`
|
||||||
|
}
|
||||||
582
model/entity/copydata/campaign_report_detail.go
Normal file
582
model/entity/copydata/campaign_report_detail.go
Normal file
@@ -0,0 +1,582 @@
|
|||||||
|
package copydata
|
||||||
|
|
||||||
|
import "gitea.com/red-future/common/beans"
|
||||||
|
|
||||||
|
// CampaignReportDetail 广告效果指标明细表实体
|
||||||
|
type CampaignReportDetail struct {
|
||||||
|
beans.SQLBaseDO `orm:",inherit"`
|
||||||
|
|
||||||
|
T0OrderPaymentAmt *float64 `orm:"t0_order_payment_amt" json:"t0OrderPaymentAmt" description:"当日总成交订单金额"`
|
||||||
|
CreativeMaterialType string `orm:"creative_material_type" json:"creativeMaterialType" description:"视频素材类型"`
|
||||||
|
LiveName string `orm:"live_name" json:"liveName" description:"直播间名称"`
|
||||||
|
AuthorId string `orm:"author_id" json:"authorId" description:"直播用户快手 Id"`
|
||||||
|
PicUrl string `orm:"pic_url" json:"picUrl" description:"图片 URL"`
|
||||||
|
PicName string `orm:"pic_name" json:"picName" description:"图片名称"`
|
||||||
|
PicId string `orm:"pic_id" json:"picId" description:"图片 Id"`
|
||||||
|
CoverUrl string `orm:"cover_url" json:"coverUrl" description:"封面 URL"`
|
||||||
|
CoverId *int64 `orm:"cover_id" json:"coverId" description:"封面 Id"`
|
||||||
|
ItemOrderConversionRatio *float64 `orm:"item_order_conversion_ratio" json:"itemOrderConversionRatio" description:"转化率"`
|
||||||
|
ItemCardClickRatio *float64 `orm:"item_card_click_ratio" json:"itemCardClickRatio" description:"点击率"`
|
||||||
|
ItemCardClkCnt *int64 `orm:"item_card_clk_cnt" json:"itemCardClkCnt" description:"商品卡点击数"`
|
||||||
|
LivePlayCntCost *float64 `orm:"live_play_cnt_cost" json:"livePlayCntCost" description:"直播间观看成本"`
|
||||||
|
AdMerchantFollowCost *float64 `orm:"ad_merchant_follow_cost" json:"adMerchantFollowCost" description:"涨粉成本"`
|
||||||
|
AdMerchantFollow *int64 `orm:"ad_merchant_follow" json:"adMerchantFollow" description:"涨粉数"`
|
||||||
|
NetT0OrderCnt *int64 `orm:"net_t0_order_cnt" json:"netT0OrderCnt" description:"当日累计净成交订单数"`
|
||||||
|
NetT0Roi *float64 `orm:"net_t0_roi" json:"netT0Roi" description:"净成交 ROI"`
|
||||||
|
NetT0Gmv *float64 `orm:"net_t0_gmv" json:"netT0Gmv" description:"净成交 GMV"`
|
||||||
|
PhotoName string `orm:"photo_name" json:"photoName" description:"视频名称"`
|
||||||
|
PhotoIdStr string `orm:"photo_id_str" json:"photoIdStr" description:"视频 id"`
|
||||||
|
PhotoId string `orm:"photo_id" json:"photoId" description:"视频 id"`
|
||||||
|
ModPriceSegment string `orm:"mod_price_segment" json:"modPriceSegment" description:"设备价格区间"`
|
||||||
|
AgeSegment string `orm:"age_segment" json:"ageSegment" description:"年龄段"`
|
||||||
|
Province string `orm:"province" json:"province" description:"省份名称"`
|
||||||
|
Gender string `orm:"gender" json:"gender" description:"性别"`
|
||||||
|
AdPhotoPlayedFiveRatio *float64 `orm:"ad_photo_played_five_ratio" json:"adPhotoPlayedFiveRatio" description:"作品 5 秒播放率"`
|
||||||
|
AdPhotoPlayedThreeRatio *float64 `orm:"ad_photo_played_three_ratio" json:"adPhotoPlayedThreeRatio" description:"作品 3 秒播放率"`
|
||||||
|
OrderSubmitRoi *float64 `orm:"order_submit_roi" json:"orderSubmitRoi" description:"订单提交 ROI"`
|
||||||
|
OrderSubmitAmt *int64 `orm:"order_submit_amt" json:"orderSubmitAmt" description:"外部订单金额"`
|
||||||
|
EventOrderSubmitCost *float64 `orm:"event_order_submit_cost" json:"eventOrderSubmitCost" description:"订单提交成本"`
|
||||||
|
EventOrderSubmit *int64 `orm:"event_order_submit" json:"eventOrderSubmit" description:"订单提交数"`
|
||||||
|
EventOrderPaidRoi *float64 `orm:"event_order_paid_roi" json:"eventOrderPaidRoi" description:"订单支付率"`
|
||||||
|
EventAppInvoked *int64 `orm:"event_app_invoked" json:"eventAppInvoked" description:"唤起应用数"`
|
||||||
|
EventAddShoppingCart *int64 `orm:"event_add_shopping_cart" json:"eventAddShoppingCart" description:"添加购物车次数"`
|
||||||
|
ConversionNumCost *float64 `orm:"conversion_num_cost" json:"conversionNumCost" description:"转化成本(回传时间)"`
|
||||||
|
AdEffectivePlayNum *int64 `orm:"ad_effective_play_num" json:"adEffectivePlayNum" description:"有效播放数"`
|
||||||
|
AdItemClick *int64 `orm:"ad_item_click" json:"adItemClick" description:"行为数"`
|
||||||
|
MerchantProductId string `orm:"merchant_product_id" json:"merchantProductId" description:"商品 ID"`
|
||||||
|
CostTotal *float64 `orm:"cost_total" json:"costTotal" description:"花费"`
|
||||||
|
AdShow *int64 `orm:"ad_show" json:"adShow" description:"曝光数"`
|
||||||
|
AdShow1kCost *float64 `orm:"ad_show1k_cost" json:"adShow1kCost" description:"平均千次广告曝光花费"`
|
||||||
|
Impression *int64 `orm:"impression" json:"impression" description:"封面曝光数"`
|
||||||
|
PhotoClick *int64 `orm:"photo_click" json:"photoClick" description:"封面点击数"`
|
||||||
|
PhotoClickRatio *float64 `orm:"photo_click_ratio" json:"photoClickRatio" description:"封面点击率"`
|
||||||
|
Click *int64 `orm:"click" json:"click" description:"素材曝光数"`
|
||||||
|
ActionbarClick *int64 `orm:"actionbar_click" json:"actionbarClick" description:"行为数"`
|
||||||
|
ActionbarClickCost *float64 `orm:"actionbar_click_cost" json:"actionbarClickCost" description:"行为成本"`
|
||||||
|
EspClickRatio *float64 `orm:"esp_click_ratio" json:"espClickRatio" description:"行为率"`
|
||||||
|
ActionRatio *float64 `orm:"action_ratio" json:"actionRatio" description:"素材点击率"`
|
||||||
|
AdItemClickCount *int64 `orm:"ad_item_click_count" json:"adItemClickCount" description:"预约组件点击数"`
|
||||||
|
EspLivePlayedSeconds *int64 `orm:"esp_live_played_seconds" json:"espLivePlayedSeconds" description:"直播平均观看时长"`
|
||||||
|
PlayedThreeSeconds *int64 `orm:"played_three_seconds" json:"playedThreeSeconds" description:"作品 3 秒播放数"`
|
||||||
|
Play3sRatio *float64 `orm:"play3s_ratio" json:"play3sRatio" description:"作品 3 秒播放率"`
|
||||||
|
PlayedFiveSeconds *int64 `orm:"played_five_seconds" json:"playedFiveSeconds" description:"作品 5 秒播放数"`
|
||||||
|
Play5sRatio *float64 `orm:"play5s_ratio" json:"play5sRatio" description:"作品 5 秒播放率"`
|
||||||
|
PlayedEnd *int64 `orm:"played_end" json:"playedEnd" description:"作品完播数"`
|
||||||
|
PlayEndRatio *float64 `orm:"play_end_ratio" json:"playEndRatio" description:"作品完播率"`
|
||||||
|
Share *int64 `orm:"share" json:"share" description:"作品分享数"`
|
||||||
|
Comment *int64 `orm:"comment" json:"comment" description:"作品评论数"`
|
||||||
|
Likes *int64 `orm:"likes" json:"likes" description:"作品点赞数"`
|
||||||
|
Report *int64 `orm:"report" json:"report" description:"作品举报数"`
|
||||||
|
Block *int64 `orm:"block" json:"block" description:"作品拉黑数"`
|
||||||
|
ItemNegative *int64 `orm:"item_negative" json:"itemNegative" description:"详情页减少此类作品数"`
|
||||||
|
LiveShare *int64 `orm:"live_share" json:"liveShare" description:"直播送礼数"`
|
||||||
|
LiveComment *int64 `orm:"live_comment" json:"liveComment" description:"直播评论数"`
|
||||||
|
LiveReward *int64 `orm:"live_reward" json:"liveReward" description:"直播送礼数"`
|
||||||
|
EffectivePlayCount *int64 `orm:"effective_play_count" json:"effectivePlayCount" description:"有效播放数"`
|
||||||
|
EffectivePlayRatio *float64 `orm:"effective_play_ratio" json:"effectivePlayRatio" description:"有效播放率"`
|
||||||
|
ConversionNum *int64 `orm:"conversion_num" json:"conversionNum" description:"转化数"`
|
||||||
|
ConversionCostEsp *float64 `orm:"conversion_cost_esp" json:"conversionCostEsp" description:"转化成本"`
|
||||||
|
Roi *float64 `orm:"roi" json:"roi" description:"直接 ROI"`
|
||||||
|
Gmv *float64 `orm:"gmv" json:"gmv" description:"直接 GMV"`
|
||||||
|
T0Gmv *float64 `orm:"t0_gmv" json:"t0Gmv" description:"当日累计 GMV"`
|
||||||
|
T1Gmv *float64 `orm:"t1_gmv" json:"t1Gmv" description:"次日累计 GMV"`
|
||||||
|
T7Gmv *float64 `orm:"t7_gmv" json:"t7Gmv" description:"7 日累计 GMV"`
|
||||||
|
T15Gmv *float64 `orm:"t15_gmv" json:"t15Gmv" description:"15 日累计 GMV"`
|
||||||
|
T30Gmv *float64 `orm:"t30_gmv" json:"t30Gmv" description:"30 日累计 GMV"`
|
||||||
|
T0Roi *float64 `orm:"t0_roi" json:"t0Roi" description:"当日累计 ROI"`
|
||||||
|
T1Roi *float64 `orm:"t1_roi" json:"t1Roi" description:"次日累计 ROI"`
|
||||||
|
T7Roi *float64 `orm:"t7_roi" json:"t7Roi" description:"7 日累计 ROI"`
|
||||||
|
T15Roi *float64 `orm:"t15_roi" json:"t15Roi" description:"15 日累计 ROI"`
|
||||||
|
T30Roi *float64 `orm:"t30_roi" json:"t30Roi" description:"30 日累计 ROI"`
|
||||||
|
PaiedOrder *int64 `orm:"paied_order" json:"paiedOrder" description:"直接订单数"`
|
||||||
|
OrderRatio *float64 `orm:"order_ratio" json:"orderRatio" description:"直接下单率"`
|
||||||
|
T0OrderCnt *int64 `orm:"t0_order_cnt" json:"t0OrderCnt" description:"当日累计订单数"`
|
||||||
|
T0OrderCntCost *float64 `orm:"t0_order_cnt_cost" json:"t0OrderCntCost" description:"当日累计订单成本"`
|
||||||
|
T0OrderCntRatio *float64 `orm:"t0_order_cnt_ratio" json:"t0OrderCntRatio" description:"累计订单下单率"`
|
||||||
|
T1OrderCnt *int64 `orm:"t1_order_cnt" json:"t1OrderCnt" description:"次日累计订单数"`
|
||||||
|
T7OrderCnt *int64 `orm:"t7_order_cnt" json:"t7OrderCnt" description:"7 日累计订单数"`
|
||||||
|
T15OrderCnt *int64 `orm:"t15_order_cnt" json:"t15OrderCnt" description:"15 日累计订单数"`
|
||||||
|
T30OrderCnt *int64 `orm:"t30_order_cnt" json:"t30OrderCnt" description:"30 日累计订单数"`
|
||||||
|
MerchantRecoFans *int64 `orm:"merchant_reco_fans" json:"merchantRecoFans" description:"涨粉数"`
|
||||||
|
T1Retention *float64 `orm:"t1_retention" json:"t1Retention" description:"次日涨粉留存数"`
|
||||||
|
T7Retention *float64 `orm:"t7_retention" json:"t7Retention" description:"7 日涨粉留存数"`
|
||||||
|
T15Retention *float64 `orm:"t15_retention" json:"t15Retention" description:"15 日涨粉留存数"`
|
||||||
|
T30Retention *float64 `orm:"t30_retention" json:"t30Retention" description:"30 日涨粉留存数"`
|
||||||
|
T1RetentionRatio *float64 `orm:"t1_retention_ratio" json:"t1RetentionRatio" description:"次日涨粉留存率"`
|
||||||
|
T7RetentionRatio *float64 `orm:"t7_retention_ratio" json:"t7RetentionRatio" description:"7 日涨粉留存率"`
|
||||||
|
T15RetentionRatio *float64 `orm:"t15_retention_ratio" json:"t15RetentionRatio" description:"15 日涨粉留存率"`
|
||||||
|
T30RetentionRatio *float64 `orm:"t30_retention_ratio" json:"t30RetentionRatio" description:"30 日涨粉留存率"`
|
||||||
|
ReservationSuccess *int64 `orm:"reservation_success" json:"reservationSuccess" description:"直播预约成功数"`
|
||||||
|
ReservationCost *float64 `orm:"reservation_cost" json:"reservationCost" description:"直播预约成功成本"`
|
||||||
|
StandardLivePlayedStarted *int64 `orm:"standard_live_played_started" json:"standardLivePlayedStarted" description:"直播观看数"`
|
||||||
|
AdLivePlayCnt *int64 `orm:"ad_live_play_cnt" json:"adLivePlayCnt" description:"直播间人气数"`
|
||||||
|
AdLivePlayCntCost *float64 `orm:"ad_live_play_cnt_cost" json:"adLivePlayCntCost" description:"直播间人气成本"`
|
||||||
|
LiveAudienceCost *float64 `orm:"live_audience_cost" json:"liveAudienceCost" description:"直播观看成本"`
|
||||||
|
LiveEventGoodsView *int64 `orm:"live_event_goods_view" json:"liveEventGoodsView" description:"直播间商品点击数"`
|
||||||
|
GoodsClickRatio *float64 `orm:"goods_click_ratio" json:"goodsClickRatio" description:"直播间商品点击率"`
|
||||||
|
DirectAttrPlatNewBuyerCnt *int64 `orm:"direct_attr_plat_new_buyer_cnt" json:"directAttrPlatNewBuyerCnt" description:"直接平台新客"`
|
||||||
|
T30AttrPlatTotalBuyerCnt *int64 `orm:"t30_attr_plat_total_buyer_cnt" json:"t30AttrPlatTotalBuyerCnt" description:"30 日累计平台新客"`
|
||||||
|
DirectAttrSellerNewBuyerCnt *int64 `orm:"direct_attr_seller_new_buyer_cnt" json:"directAttrSellerNewBuyerCnt" description:"直接店铺新客"`
|
||||||
|
T30AttrSellerTotalBuyerCnt *int64 `orm:"t30_attr_seller_total_buyer_cnt" json:"t30AttrSellerTotalBuyerCnt" description:"30 日累计店铺新客"`
|
||||||
|
T3Gmv *float64 `orm:"t3_gmv" json:"t3Gmv" description:"3 日累计 GMV"`
|
||||||
|
T3OrderCnt *int64 `orm:"t3_order_cnt" json:"t3OrderCnt" description:"3 日累计订单数"`
|
||||||
|
T3Roi *float64 `orm:"t3_roi" json:"t3Roi" description:"3 日累计 ROI"`
|
||||||
|
T7IndirectOrderAmt *float64 `orm:"t7_indirect_order_amt" json:"t7IndirectOrderAmt" description:"7 日间接订单金额"`
|
||||||
|
T7IndirectOrderCnt *int64 `orm:"t7_indirect_order_cnt" json:"t7IndirectOrderCnt" description:"7 日间接订单数"`
|
||||||
|
FansT0GmvPerFans *float64 `orm:"fans_t0_gmv_per_fans" json:"fansT0GmvPerFans" description:"新增粉丝人均销售额"`
|
||||||
|
FansT3GmvPerFans *float64 `orm:"fans_t3_gmv_per_fans" json:"fansT3GmvPerFans" description:"3 日新增粉丝人均销售额"`
|
||||||
|
FansT7GmvPerFans *float64 `orm:"fans_t7_gmv_per_fans" json:"fansT7GmvPerFans" description:"7 日新增粉丝人均销售额"`
|
||||||
|
FansT15GmvPerFans *float64 `orm:"fans_t15_gmv_per_fans" json:"fansT15GmvPerFans" description:"15 日新增粉丝人均销售额"`
|
||||||
|
FansT30GmvPerFans *float64 `orm:"fans_t30_gmv_per_fans" json:"fansT30GmvPerFans" description:"30 日新增粉丝人均销售额"`
|
||||||
|
RecoFansCost *float64 `orm:"reco_fans_cost" json:"recoFansCost" description:"涨粉成本"`
|
||||||
|
QcpxWhiteboxDirectOrderPaymentAmt *float64 `orm:"qcpx_whitebox_direct_order_payment_amt" json:"qcpxWhiteboxDirectOrderPaymentAmt" description:"智能优惠券订单 GMV"`
|
||||||
|
QcpxWhiteboxDirectOrderCnt *int64 `orm:"qcpx_whitebox_direct_order_cnt" json:"qcpxWhiteboxDirectOrderCnt" description:"智能优惠券订单数"`
|
||||||
|
FansT0Gmv *float64 `orm:"fans_t0_gmv" json:"fansT0Gmv" description:"涨粉当日 GMV"`
|
||||||
|
FansT1Gmv *float64 `orm:"fans_t1_gmv" json:"fansT1Gmv" description:"涨粉次日 GMV"`
|
||||||
|
FansT7Gmv *float64 `orm:"fans_t7_gmv" json:"fansT7Gmv" description:"涨粉 7 日 GMV"`
|
||||||
|
FansT15Gmv *float64 `orm:"fans_t15_gmv" json:"fansT15Gmv" description:"涨粉 15 日 GMV"`
|
||||||
|
FansT30Gmv *float64 `orm:"fans_t30_gmv" json:"fansT30Gmv" description:"涨粉 30 日 GMV"`
|
||||||
|
FansT0Roi *float64 `orm:"fans_t0_roi" json:"fansT0Roi" description:"涨粉当日 ROI"`
|
||||||
|
FansT1Roi *float64 `orm:"fans_t1_roi" json:"fansT1Roi" description:"涨粉次日 ROI"`
|
||||||
|
FansT7Roi *float64 `orm:"fans_t7_roi" json:"fansT7Roi" description:"涨粉 7 日 ROI"`
|
||||||
|
FansT15Roi *float64 `orm:"fans_t15_roi" json:"fansT15Roi" description:"涨粉 15 日 ROI"`
|
||||||
|
FansT30Roi *float64 `orm:"fans_t30_roi" json:"fansT30Roi" description:"涨粉 30 日 ROI"`
|
||||||
|
T0ShopNewBuyerOrderPaymentAmt *float64 `orm:"t0_shop_new_buyer_order_payment_amt" json:"t0ShopNewBuyerOrderPaymentAmt" description:"当日新客 GMV"`
|
||||||
|
T1ShopNewBuyerOrderPaymentAmt *float64 `orm:"t1_shop_new_buyer_order_payment_amt" json:"t1ShopNewBuyerOrderPaymentAmt" description:"投后 1 日新客 GMV"`
|
||||||
|
T3ShopNewBuyerOrderPaymentAmt *float64 `orm:"t3_shop_new_buyer_order_payment_amt" json:"t3ShopNewBuyerOrderPaymentAmt" description:"投后 3 日新客 GMV"`
|
||||||
|
T7ShopNewBuyerOrderPaymentAmt *float64 `orm:"t7_shop_new_buyer_order_payment_amt" json:"t7ShopNewBuyerOrderPaymentAmt" description:"投后 7 日新客 GMV"`
|
||||||
|
T15ShopNewBuyerOrderPaymentAmt *float64 `orm:"t15_shop_new_buyer_order_payment_amt" json:"t15ShopNewBuyerOrderPaymentAmt" description:"投后 15 日新客 GMV"`
|
||||||
|
T30ShopNewBuyerOrderPaymentAmt *float64 `orm:"t30_shop_new_buyer_order_payment_amt" json:"t30ShopNewBuyerOrderPaymentAmt" description:"投后 30 日新客 GMV"`
|
||||||
|
T0ShopNewBuyerOrderCnt *int64 `orm:"t0_shop_new_buyer_order_cnt" json:"t0ShopNewBuyerOrderCnt" description:"当日新客成交订单量"`
|
||||||
|
T1ShopNewBuyerOrderCnt *int64 `orm:"t1_shop_new_buyer_order_cnt" json:"t1ShopNewBuyerOrderCnt" description:"投后 1 日新客成交订单量"`
|
||||||
|
T3ShopNewBuyerOrderCnt *int64 `orm:"t3_shop_new_buyer_order_cnt" json:"t3ShopNewBuyerOrderCnt" description:"投后 3 日新客成交订单量"`
|
||||||
|
T7ShopNewBuyerOrderCnt *int64 `orm:"t7_shop_new_buyer_order_cnt" json:"t7ShopNewBuyerOrderCnt" description:"投后 7 日新客成交订单量"`
|
||||||
|
T15ShopNewBuyerOrderCnt *int64 `orm:"t15_shop_new_buyer_order_cnt" json:"t15ShopNewBuyerOrderCnt" description:"投后 15 日新客成交订单量"`
|
||||||
|
T30ShopNewBuyerOrderCnt *int64 `orm:"t30_shop_new_buyer_order_cnt" json:"t30ShopNewBuyerOrderCnt" description:"投后 30 日新客成交订单量"`
|
||||||
|
T1NewBuyerRepurchaseRatio *float64 `orm:"t1_new_buyer_repurchase_ratio" json:"t1NewBuyerRepurchaseRatio" description:"投后 1 日新客复购率"`
|
||||||
|
T3NewBuyerRepurchaseRatio *float64 `orm:"t3_new_buyer_repurchase_ratio" json:"t3NewBuyerRepurchaseRatio" description:"投后 3 日新客复购率"`
|
||||||
|
T7NewBuyerRepurchaseRatio *float64 `orm:"t7_new_buyer_repurchase_ratio" json:"t7NewBuyerRepurchaseRatio" description:"投后 7 日新客复购率"`
|
||||||
|
T15NewBuyerRepurchaseRatio *float64 `orm:"t15_new_buyer_repurchase_ratio" json:"t15NewBuyerRepurchaseRatio" description:"投后 15 日新客复购率"`
|
||||||
|
T30NewBuyerRepurchaseRatio *float64 `orm:"t30_new_buyer_repurchase_ratio" json:"t30NewBuyerRepurchaseRatio" description:"投后 30 日新客复购率"`
|
||||||
|
T0ShopNewBuyerRoi *float64 `orm:"t0_shop_new_buyer_roi" json:"t0ShopNewBuyerRoi" description:"投后当日新客 ROI"`
|
||||||
|
T1ShopNewBuyerRoi *float64 `orm:"t1_shop_new_buyer_roi" json:"t1ShopNewBuyerRoi" description:"投后 1 日新客 ROI"`
|
||||||
|
T3ShopNewBuyerRoi *float64 `orm:"t3_shop_new_buyer_roi" json:"t3ShopNewBuyerRoi" description:"投后 3 日新客 ROI"`
|
||||||
|
T7ShopNewBuyerRoi *float64 `orm:"t7_shop_new_buyer_roi" json:"t7ShopNewBuyerRoi" description:"投后 7 日新客 ROI"`
|
||||||
|
T15ShopNewBuyerRoi *float64 `orm:"t15_shop_new_buyer_roi" json:"t15ShopNewBuyerRoi" description:"投后 15 日新客 ROI"`
|
||||||
|
T30ShopNewBuyerRoi *float64 `orm:"t30_shop_new_buyer_roi" json:"t30ShopNewBuyerRoi" description:"投后 30 日新客 ROI"`
|
||||||
|
CreateCardOrderCnt *int64 `orm:"create_card_order_cnt" json:"createCardOrderCnt" description:"有效制卡订单数(回传时间)"`
|
||||||
|
ForwardTsCreateCardOrderCnt *int64 `orm:"forward_ts_create_card_order_cnt" json:"forwardTsCreateCardOrderCnt" description:"有效制卡订单数(计费时间)"`
|
||||||
|
CreateCardOrderCost *float64 `orm:"create_card_order_cost" json:"createCardOrderCost" description:"有效制卡订单成本(回传时间)"`
|
||||||
|
ForwardTsCreateCardOrderCost *float64 `orm:"forward_ts_create_card_order_cost" json:"forwardTsCreateCardOrderCost" description:"有效制卡订单成本(计费时间)"`
|
||||||
|
ActivateCardOrderCnt *int64 `orm:"activate_card_order_cnt" json:"activateCardOrderCnt" description:"电话卡激活订单数(回传时间)"`
|
||||||
|
ForwardTsActivateCardOrderCnt *int64 `orm:"forward_ts_activate_card_order_cnt" json:"forwardTsActivateCardOrderCnt" description:"电话卡激活订单数(计费时间)"`
|
||||||
|
ActivateCardOrderCost *float64 `orm:"activate_card_order_cost" json:"activateCardOrderCost" description:"电话卡激活订单成本(回传时间)"`
|
||||||
|
ForwardTsActivateCardOrderCost *float64 `orm:"forward_ts_activate_card_order_cost" json:"forwardTsActivateCardOrderCost" description:"电话卡激活订单成本(计费时间)"`
|
||||||
|
CreateCardOrderRatio *float64 `orm:"create_card_order_ratio" json:"createCardOrderRatio" description:"有效制卡订单率(回传时间)"`
|
||||||
|
ForwardTsCreateCardOrderRatio *float64 `orm:"forward_ts_create_card_order_ratio" json:"forwardTsCreateCardOrderRatio" description:"有效制卡订单率(计费时间)"`
|
||||||
|
ActivateCardOrderCntRatio *float64 `orm:"activate_card_order_cnt_ratio" json:"activateCardOrderCntRatio" description:"电话卡激活率(回传时间)"`
|
||||||
|
ForwardTsActivateCardOrderRatio *float64 `orm:"forward_ts_activate_card_order_ratio" json:"forwardTsActivateCardOrderRatio" description:"电话卡激活率(计费时间)"`
|
||||||
|
LivePlayCnt *int64 `orm:"live_play_cnt" json:"livePlayCnt" description:"全站直播观看数"`
|
||||||
|
ItemEntranceClkCnt *int64 `orm:"item_entrance_clk_cnt" json:"itemEntranceClkCnt" description:"小黄车点击数"`
|
||||||
|
ShowCnt *int64 `orm:"show_cnt" json:"showCnt" description:"全站曝光"`
|
||||||
|
ReportDateStr string `orm:"report_date_str" json:"reportDateStr" description:"时间"`
|
||||||
|
CampaignId *int64 `orm:"campaign_id" json:"campaignId" description:"计划 ID"`
|
||||||
|
CampaignName string `orm:"campaign_name" json:"campaignName" description:"计划名称"`
|
||||||
|
UnitId *int64 `orm:"unit_id" json:"unitId" description:"单元 ID"`
|
||||||
|
UnitName string `orm:"unit_name" json:"unitName" description:"单元名称"`
|
||||||
|
CreativeId *int64 `orm:"creative_id" json:"creativeId" description:"创意 ID"`
|
||||||
|
CreativeName string `orm:"creative_name" json:"creativeName" description:"创意名称"`
|
||||||
|
CidActualRoiAfterSubsidy *float64 `orm:"cid_actual_roi_after_subsidy" json:"cidActualRoiAfterSubsidy" description:"补贴后实际 ROI"`
|
||||||
|
CidCouponAmount *int64 `orm:"cid_coupon_amount" json:"cidCouponAmount" description:"核销券金额"`
|
||||||
|
CidCouponCallbackPaidRefundAmount *int64 `orm:"cid_coupon_callback_paid_refund_amount" json:"cidCouponCallbackPaidRefundAmount" description:"退单有回传_核销券金额"`
|
||||||
|
CidVoucherCost *float64 `orm:"cid_voucher_cost" json:"cidVoucherCost" description:"券成本"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CampaignReportDetailCol 广告效果指标明细表字段定义
|
||||||
|
type CampaignReportDetailCol struct {
|
||||||
|
beans.SQLBaseCol
|
||||||
|
T0OrderPaymentAmt string
|
||||||
|
CreativeMaterialType string
|
||||||
|
LiveName string
|
||||||
|
AuthorId string
|
||||||
|
PicUrl string
|
||||||
|
PicName string
|
||||||
|
PicId string
|
||||||
|
CoverUrl string
|
||||||
|
CoverId string
|
||||||
|
ItemOrderConversionRatio string
|
||||||
|
ItemCardClickRatio string
|
||||||
|
ItemCardClkCnt string
|
||||||
|
LivePlayCntCost string
|
||||||
|
AdMerchantFollowCost string
|
||||||
|
AdMerchantFollow string
|
||||||
|
NetT0OrderCnt string
|
||||||
|
NetT0Roi string
|
||||||
|
NetT0Gmv string
|
||||||
|
PhotoName string
|
||||||
|
PhotoIdStr string
|
||||||
|
PhotoId string
|
||||||
|
ModPriceSegment string
|
||||||
|
AgeSegment string
|
||||||
|
Province string
|
||||||
|
Gender string
|
||||||
|
AdPhotoPlayedFiveRatio string
|
||||||
|
AdPhotoPlayedThreeRatio string
|
||||||
|
OrderSubmitRoi string
|
||||||
|
OrderSubmitAmt string
|
||||||
|
EventOrderSubmitCost string
|
||||||
|
EventOrderSubmit string
|
||||||
|
EventOrderPaidRoi string
|
||||||
|
EventAppInvoked string
|
||||||
|
EventAddShoppingCart string
|
||||||
|
ConversionNumCost string
|
||||||
|
AdEffectivePlayNum string
|
||||||
|
AdItemClick string
|
||||||
|
MerchantProductId string
|
||||||
|
CostTotal string
|
||||||
|
AdShow string
|
||||||
|
AdShow1kCost string
|
||||||
|
Impression string
|
||||||
|
PhotoClick string
|
||||||
|
PhotoClickRatio string
|
||||||
|
Click string
|
||||||
|
ActionbarClick string
|
||||||
|
ActionbarClickCost string
|
||||||
|
EspClickRatio string
|
||||||
|
ActionRatio string
|
||||||
|
AdItemClickCount string
|
||||||
|
EspLivePlayedSeconds string
|
||||||
|
PlayedThreeSeconds string
|
||||||
|
Play3sRatio string
|
||||||
|
PlayedFiveSeconds string
|
||||||
|
Play5sRatio string
|
||||||
|
PlayedEnd string
|
||||||
|
PlayEndRatio string
|
||||||
|
Share string
|
||||||
|
Comment string
|
||||||
|
Likes string
|
||||||
|
Report string
|
||||||
|
Block string
|
||||||
|
ItemNegative string
|
||||||
|
LiveShare string
|
||||||
|
LiveComment string
|
||||||
|
LiveReward string
|
||||||
|
EffectivePlayCount string
|
||||||
|
EffectivePlayRatio string
|
||||||
|
ConversionNum string
|
||||||
|
ConversionCostEsp string
|
||||||
|
Roi string
|
||||||
|
Gmv string
|
||||||
|
T0Gmv string
|
||||||
|
T1Gmv string
|
||||||
|
T7Gmv string
|
||||||
|
T15Gmv string
|
||||||
|
T30Gmv string
|
||||||
|
T0Roi string
|
||||||
|
T1Roi string
|
||||||
|
T7Roi string
|
||||||
|
T15Roi string
|
||||||
|
T30Roi string
|
||||||
|
PaiedOrder string
|
||||||
|
OrderRatio string
|
||||||
|
T0OrderCnt string
|
||||||
|
T0OrderCntCost string
|
||||||
|
T0OrderCntRatio string
|
||||||
|
T1OrderCnt string
|
||||||
|
T7OrderCnt string
|
||||||
|
T15OrderCnt string
|
||||||
|
T30OrderCnt string
|
||||||
|
MerchantRecoFans string
|
||||||
|
T1Retention string
|
||||||
|
T7Retention string
|
||||||
|
T15Retention string
|
||||||
|
T30Retention string
|
||||||
|
T1RetentionRatio string
|
||||||
|
T7RetentionRatio string
|
||||||
|
T15RetentionRatio string
|
||||||
|
T30RetentionRatio string
|
||||||
|
ReservationSuccess string
|
||||||
|
ReservationCost string
|
||||||
|
StandardLivePlayedStarted string
|
||||||
|
AdLivePlayCnt string
|
||||||
|
AdLivePlayCntCost string
|
||||||
|
LiveAudienceCost string
|
||||||
|
LiveEventGoodsView string
|
||||||
|
GoodsClickRatio string
|
||||||
|
DirectAttrPlatNewBuyerCnt string
|
||||||
|
T30AttrPlatTotalBuyerCnt string
|
||||||
|
DirectAttrSellerNewBuyerCnt string
|
||||||
|
T30AttrSellerTotalBuyerCnt string
|
||||||
|
T3Gmv string
|
||||||
|
T3OrderCnt string
|
||||||
|
T3Roi string
|
||||||
|
T7IndirectOrderAmt string
|
||||||
|
T7IndirectOrderCnt string
|
||||||
|
FansT0GmvPerFans string
|
||||||
|
FansT3GmvPerFans string
|
||||||
|
FansT7GmvPerFans string
|
||||||
|
FansT15GmvPerFans string
|
||||||
|
FansT30GmvPerFans string
|
||||||
|
RecoFansCost string
|
||||||
|
QcpxWhiteboxDirectOrderPaymentAmt string
|
||||||
|
QcpxWhiteboxDirectOrderCnt string
|
||||||
|
FansT0Gmv string
|
||||||
|
FansT1Gmv string
|
||||||
|
FansT7Gmv string
|
||||||
|
FansT15Gmv string
|
||||||
|
FansT30Gmv string
|
||||||
|
FansT0Roi string
|
||||||
|
FansT1Roi string
|
||||||
|
FansT7Roi string
|
||||||
|
FansT15Roi string
|
||||||
|
FansT30Roi string
|
||||||
|
T0ShopNewBuyerOrderPaymentAmt string
|
||||||
|
T1ShopNewBuyerOrderPaymentAmt string
|
||||||
|
T3ShopNewBuyerOrderPaymentAmt string
|
||||||
|
T7ShopNewBuyerOrderPaymentAmt string
|
||||||
|
T15ShopNewBuyerOrderPaymentAmt string
|
||||||
|
T30ShopNewBuyerOrderPaymentAmt string
|
||||||
|
T0ShopNewBuyerOrderCnt string
|
||||||
|
T1ShopNewBuyerOrderCnt string
|
||||||
|
T3ShopNewBuyerOrderCnt string
|
||||||
|
T7ShopNewBuyerOrderCnt string
|
||||||
|
T15ShopNewBuyerOrderCnt string
|
||||||
|
T30ShopNewBuyerOrderCnt string
|
||||||
|
T1NewBuyerRepurchaseRatio string
|
||||||
|
T3NewBuyerRepurchaseRatio string
|
||||||
|
T7NewBuyerRepurchaseRatio string
|
||||||
|
T15NewBuyerRepurchaseRatio string
|
||||||
|
T30NewBuyerRepurchaseRatio string
|
||||||
|
T0ShopNewBuyerRoi string
|
||||||
|
T1ShopNewBuyerRoi string
|
||||||
|
T3ShopNewBuyerRoi string
|
||||||
|
T7ShopNewBuyerRoi string
|
||||||
|
T15ShopNewBuyerRoi string
|
||||||
|
T30ShopNewBuyerRoi string
|
||||||
|
CreateCardOrderCnt string
|
||||||
|
ForwardTsCreateCardOrderCnt string
|
||||||
|
CreateCardOrderCost string
|
||||||
|
ForwardTsCreateCardOrderCost string
|
||||||
|
ActivateCardOrderCnt string
|
||||||
|
ForwardTsActivateCardOrderCnt string
|
||||||
|
ActivateCardOrderCost string
|
||||||
|
ForwardTsActivateCardOrderCost string
|
||||||
|
CreateCardOrderRatio string
|
||||||
|
ForwardTsCreateCardOrderRatio string
|
||||||
|
ActivateCardOrderCntRatio string
|
||||||
|
ForwardTsActivateCardOrderRatio string
|
||||||
|
LivePlayCnt string
|
||||||
|
ItemEntranceClkCnt string
|
||||||
|
ShowCnt string
|
||||||
|
ReportDateStr string
|
||||||
|
CampaignId string
|
||||||
|
CampaignName string
|
||||||
|
UnitId string
|
||||||
|
UnitName string
|
||||||
|
CreativeId string
|
||||||
|
CreativeName string
|
||||||
|
CidActualRoiAfterSubsidy string
|
||||||
|
CidCouponAmount string
|
||||||
|
CidCouponCallbackPaidRefundAmount string
|
||||||
|
CidVoucherCost string
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName 返回表名
|
||||||
|
func (e *CampaignReportDetail) TableName() string {
|
||||||
|
return "campaign_report_detail"
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCols 获取所有字段名
|
||||||
|
func (e *CampaignReportDetail) GetCols() *CampaignReportDetailCol {
|
||||||
|
return &CampaignReportDetailCol{
|
||||||
|
SQLBaseCol: beans.SQLBaseCol{
|
||||||
|
Id: "id",
|
||||||
|
CreatedAt: "created_at",
|
||||||
|
UpdatedAt: "updated_at",
|
||||||
|
},
|
||||||
|
T0OrderPaymentAmt: "t0_order_payment_amt",
|
||||||
|
CreativeMaterialType: "creative_material_type",
|
||||||
|
LiveName: "live_name",
|
||||||
|
AuthorId: "author_id",
|
||||||
|
PicUrl: "pic_url",
|
||||||
|
PicName: "pic_name",
|
||||||
|
PicId: "pic_id",
|
||||||
|
CoverUrl: "cover_url",
|
||||||
|
CoverId: "cover_id",
|
||||||
|
ItemOrderConversionRatio: "item_order_conversion_ratio",
|
||||||
|
ItemCardClickRatio: "item_card_click_ratio",
|
||||||
|
ItemCardClkCnt: "item_card_clk_cnt",
|
||||||
|
LivePlayCntCost: "live_play_cnt_cost",
|
||||||
|
AdMerchantFollowCost: "ad_merchant_follow_cost",
|
||||||
|
AdMerchantFollow: "ad_merchant_follow",
|
||||||
|
NetT0OrderCnt: "net_t0_order_cnt",
|
||||||
|
NetT0Roi: "net_t0_roi",
|
||||||
|
NetT0Gmv: "net_t0_gmv",
|
||||||
|
PhotoName: "photo_name",
|
||||||
|
PhotoIdStr: "photo_id_str",
|
||||||
|
PhotoId: "photo_id",
|
||||||
|
ModPriceSegment: "mod_price_segment",
|
||||||
|
AgeSegment: "age_segment",
|
||||||
|
Province: "province",
|
||||||
|
Gender: "gender",
|
||||||
|
AdPhotoPlayedFiveRatio: "ad_photo_played_five_ratio",
|
||||||
|
AdPhotoPlayedThreeRatio: "ad_photo_played_three_ratio",
|
||||||
|
OrderSubmitRoi: "order_submit_roi",
|
||||||
|
OrderSubmitAmt: "order_submit_amt",
|
||||||
|
EventOrderSubmitCost: "event_order_submit_cost",
|
||||||
|
EventOrderSubmit: "event_order_submit",
|
||||||
|
EventOrderPaidRoi: "event_order_paid_roi",
|
||||||
|
EventAppInvoked: "event_app_invoked",
|
||||||
|
EventAddShoppingCart: "event_add_shopping_cart",
|
||||||
|
ConversionNumCost: "conversion_num_cost",
|
||||||
|
AdEffectivePlayNum: "ad_effective_play_num",
|
||||||
|
AdItemClick: "ad_item_click",
|
||||||
|
MerchantProductId: "merchant_product_id",
|
||||||
|
CostTotal: "cost_total",
|
||||||
|
AdShow: "ad_show",
|
||||||
|
AdShow1kCost: "ad_show1k_cost",
|
||||||
|
Impression: "impression",
|
||||||
|
PhotoClick: "photo_click",
|
||||||
|
PhotoClickRatio: "photo_click_ratio",
|
||||||
|
Click: "click",
|
||||||
|
ActionbarClick: "actionbar_click",
|
||||||
|
ActionbarClickCost: "actionbar_click_cost",
|
||||||
|
EspClickRatio: "esp_click_ratio",
|
||||||
|
ActionRatio: "action_ratio",
|
||||||
|
AdItemClickCount: "ad_item_click_count",
|
||||||
|
EspLivePlayedSeconds: "esp_live_played_seconds",
|
||||||
|
PlayedThreeSeconds: "played_three_seconds",
|
||||||
|
Play3sRatio: "play3s_ratio",
|
||||||
|
PlayedFiveSeconds: "played_five_seconds",
|
||||||
|
Play5sRatio: "play5s_ratio",
|
||||||
|
PlayedEnd: "played_end",
|
||||||
|
PlayEndRatio: "play_end_ratio",
|
||||||
|
Share: "share",
|
||||||
|
Comment: "comment",
|
||||||
|
Likes: "likes",
|
||||||
|
Report: "report",
|
||||||
|
Block: "block",
|
||||||
|
ItemNegative: "item_negative",
|
||||||
|
LiveShare: "live_share",
|
||||||
|
LiveComment: "live_comment",
|
||||||
|
LiveReward: "live_reward",
|
||||||
|
EffectivePlayCount: "effective_play_count",
|
||||||
|
EffectivePlayRatio: "effective_play_ratio",
|
||||||
|
ConversionNum: "conversion_num",
|
||||||
|
ConversionCostEsp: "conversion_cost_esp",
|
||||||
|
Roi: "roi",
|
||||||
|
Gmv: "gmv",
|
||||||
|
T0Gmv: "t0_gmv",
|
||||||
|
T1Gmv: "t1_gmv",
|
||||||
|
T7Gmv: "t7_gmv",
|
||||||
|
T15Gmv: "t15_gmv",
|
||||||
|
T30Gmv: "t30_gmv",
|
||||||
|
T0Roi: "t0_roi",
|
||||||
|
T1Roi: "t1_roi",
|
||||||
|
T7Roi: "t7_roi",
|
||||||
|
T15Roi: "t15_roi",
|
||||||
|
T30Roi: "t30_roi",
|
||||||
|
PaiedOrder: "paied_order",
|
||||||
|
OrderRatio: "order_ratio",
|
||||||
|
T0OrderCnt: "t0_order_cnt",
|
||||||
|
T0OrderCntCost: "t0_order_cnt_cost",
|
||||||
|
T0OrderCntRatio: "t0_order_cnt_ratio",
|
||||||
|
T1OrderCnt: "t1_order_cnt",
|
||||||
|
T7OrderCnt: "t7_order_cnt",
|
||||||
|
T15OrderCnt: "t15_order_cnt",
|
||||||
|
T30OrderCnt: "t30_order_cnt",
|
||||||
|
MerchantRecoFans: "merchant_reco_fans",
|
||||||
|
T1Retention: "t1_retention",
|
||||||
|
T7Retention: "t7_retention",
|
||||||
|
T15Retention: "t15_retention",
|
||||||
|
T30Retention: "t30_retention",
|
||||||
|
T1RetentionRatio: "t1_retention_ratio",
|
||||||
|
T7RetentionRatio: "t7_retention_ratio",
|
||||||
|
T15RetentionRatio: "t15_retention_ratio",
|
||||||
|
T30RetentionRatio: "t30_retention_ratio",
|
||||||
|
ReservationSuccess: "reservation_success",
|
||||||
|
ReservationCost: "reservation_cost",
|
||||||
|
StandardLivePlayedStarted: "standard_live_played_started",
|
||||||
|
AdLivePlayCnt: "ad_live_play_cnt",
|
||||||
|
AdLivePlayCntCost: "ad_live_play_cnt_cost",
|
||||||
|
LiveAudienceCost: "live_audience_cost",
|
||||||
|
LiveEventGoodsView: "live_event_goods_view",
|
||||||
|
GoodsClickRatio: "goods_click_ratio",
|
||||||
|
DirectAttrPlatNewBuyerCnt: "direct_attr_plat_new_buyer_cnt",
|
||||||
|
T30AttrPlatTotalBuyerCnt: "t30_attr_plat_total_buyer_cnt",
|
||||||
|
DirectAttrSellerNewBuyerCnt: "direct_attr_seller_new_buyer_cnt",
|
||||||
|
T30AttrSellerTotalBuyerCnt: "t30_attr_seller_total_buyer_cnt",
|
||||||
|
T3Gmv: "t3_gmv",
|
||||||
|
T3OrderCnt: "t3_order_cnt",
|
||||||
|
T3Roi: "t3_roi",
|
||||||
|
T7IndirectOrderAmt: "t7_indirect_order_amt",
|
||||||
|
T7IndirectOrderCnt: "t7_indirect_order_cnt",
|
||||||
|
FansT0GmvPerFans: "fans_t0_gmv_per_fans",
|
||||||
|
FansT3GmvPerFans: "fans_t3_gmv_per_fans",
|
||||||
|
FansT7GmvPerFans: "fans_t7_gmv_per_fans",
|
||||||
|
FansT15GmvPerFans: "fans_t15_gmv_per_fans",
|
||||||
|
FansT30GmvPerFans: "fans_t30_gmv_per_fans",
|
||||||
|
RecoFansCost: "reco_fans_cost",
|
||||||
|
QcpxWhiteboxDirectOrderPaymentAmt: "qcpx_whitebox_direct_order_payment_amt",
|
||||||
|
QcpxWhiteboxDirectOrderCnt: "qcpx_whitebox_direct_order_cnt",
|
||||||
|
FansT0Gmv: "fans_t0_gmv",
|
||||||
|
FansT1Gmv: "fans_t1_gmv",
|
||||||
|
FansT7Gmv: "fans_t7_gmv",
|
||||||
|
FansT15Gmv: "fans_t15_gmv",
|
||||||
|
FansT30Gmv: "fans_t30_gmv",
|
||||||
|
FansT0Roi: "fans_t0_roi",
|
||||||
|
FansT1Roi: "fans_t1_roi",
|
||||||
|
FansT7Roi: "fans_t7_roi",
|
||||||
|
FansT15Roi: "fans_t15_roi",
|
||||||
|
FansT30Roi: "fans_t30_roi",
|
||||||
|
T0ShopNewBuyerOrderPaymentAmt: "t0_shop_new_buyer_order_payment_amt",
|
||||||
|
T1ShopNewBuyerOrderPaymentAmt: "t1_shop_new_buyer_order_payment_amt",
|
||||||
|
T3ShopNewBuyerOrderPaymentAmt: "t3_shop_new_buyer_order_payment_amt",
|
||||||
|
T7ShopNewBuyerOrderPaymentAmt: "t7_shop_new_buyer_order_payment_amt",
|
||||||
|
T15ShopNewBuyerOrderPaymentAmt: "t15_shop_new_buyer_order_payment_amt",
|
||||||
|
T30ShopNewBuyerOrderPaymentAmt: "t30_shop_new_buyer_order_payment_amt",
|
||||||
|
T0ShopNewBuyerOrderCnt: "t0_shop_new_buyer_order_cnt",
|
||||||
|
T1ShopNewBuyerOrderCnt: "t1_shop_new_buyer_order_cnt",
|
||||||
|
T3ShopNewBuyerOrderCnt: "t3_shop_new_buyer_order_cnt",
|
||||||
|
T7ShopNewBuyerOrderCnt: "t7_shop_new_buyer_order_cnt",
|
||||||
|
T15ShopNewBuyerOrderCnt: "t15_shop_new_buyer_order_cnt",
|
||||||
|
T30ShopNewBuyerOrderCnt: "t30_shop_new_buyer_order_cnt",
|
||||||
|
T1NewBuyerRepurchaseRatio: "t1_new_buyer_repurchase_ratio",
|
||||||
|
T3NewBuyerRepurchaseRatio: "t3_new_buyer_repurchase_ratio",
|
||||||
|
T7NewBuyerRepurchaseRatio: "t7_new_buyer_repurchase_ratio",
|
||||||
|
T15NewBuyerRepurchaseRatio: "t15_new_buyer_repurchase_ratio",
|
||||||
|
T30NewBuyerRepurchaseRatio: "t30_new_buyer_repurchase_ratio",
|
||||||
|
T0ShopNewBuyerRoi: "t0_shop_new_buyer_roi",
|
||||||
|
T1ShopNewBuyerRoi: "t1_shop_new_buyer_roi",
|
||||||
|
T3ShopNewBuyerRoi: "t3_shop_new_buyer_roi",
|
||||||
|
T7ShopNewBuyerRoi: "t7_shop_new_buyer_roi",
|
||||||
|
T15ShopNewBuyerRoi: "t15_shop_new_buyer_roi",
|
||||||
|
T30ShopNewBuyerRoi: "t30_shop_new_buyer_roi",
|
||||||
|
CreateCardOrderCnt: "create_card_order_cnt",
|
||||||
|
ForwardTsCreateCardOrderCnt: "forward_ts_create_card_order_cnt",
|
||||||
|
CreateCardOrderCost: "create_card_order_cost",
|
||||||
|
ForwardTsCreateCardOrderCost: "forward_ts_create_card_order_cost",
|
||||||
|
ActivateCardOrderCnt: "activate_card_order_cnt",
|
||||||
|
ForwardTsActivateCardOrderCnt: "forward_ts_activate_card_order_cnt",
|
||||||
|
ActivateCardOrderCost: "activate_card_order_cost",
|
||||||
|
ForwardTsActivateCardOrderCost: "forward_ts_activate_card_order_cost",
|
||||||
|
CreateCardOrderRatio: "create_card_order_ratio",
|
||||||
|
ForwardTsCreateCardOrderRatio: "forward_ts_create_card_order_ratio",
|
||||||
|
ActivateCardOrderCntRatio: "activate_card_order_cnt_ratio",
|
||||||
|
ForwardTsActivateCardOrderRatio: "forward_ts_activate_card_order_ratio",
|
||||||
|
LivePlayCnt: "live_play_cnt",
|
||||||
|
ItemEntranceClkCnt: "item_entrance_clk_cnt",
|
||||||
|
ShowCnt: "show_cnt",
|
||||||
|
ReportDateStr: "report_date_str",
|
||||||
|
CampaignId: "campaign_id",
|
||||||
|
CampaignName: "campaign_name",
|
||||||
|
UnitId: "unit_id",
|
||||||
|
UnitName: "unit_name",
|
||||||
|
CreativeId: "creative_id",
|
||||||
|
CreativeName: "creative_name",
|
||||||
|
CidActualRoiAfterSubsidy: "cid_actual_roi_after_subsidy",
|
||||||
|
CidCouponAmount: "cid_coupon_amount",
|
||||||
|
CidCouponCallbackPaidRefundAmount: "cid_coupon_callback_paid_refund_amount",
|
||||||
|
CidVoucherCost: "cid_voucher_cost",
|
||||||
|
}
|
||||||
|
}
|
||||||
582
model/entity/copydata/campaign_report_sum.go
Normal file
582
model/entity/copydata/campaign_report_sum.go
Normal file
@@ -0,0 +1,582 @@
|
|||||||
|
package copydata
|
||||||
|
|
||||||
|
import "gitea.com/red-future/common/beans"
|
||||||
|
|
||||||
|
// CampaignReportSum 广告计划效果指标表实体
|
||||||
|
type CampaignReportSum struct {
|
||||||
|
beans.SQLBaseDO `orm:",inherit"`
|
||||||
|
|
||||||
|
T0OrderPaymentAmt *float64 `orm:"t0_order_payment_amt" json:"t0OrderPaymentAmt" description:"当日总成交订单金额"`
|
||||||
|
CreativeMaterialType string `orm:"creative_material_type" json:"creativeMaterialType" description:"视频素材类型(视频:HORIZONTAL_SCREEN, VERTICAL_SCREEN, UNKNOWN_TYPE;图集:ATLAS;长图:ATLAS_VERTICAL)"`
|
||||||
|
LiveName string `orm:"live_name" json:"liveName" description:"直播间名称"`
|
||||||
|
AuthorId string `orm:"author_id" json:"authorId" description:"直播用户快手 Id"`
|
||||||
|
PicUrl string `orm:"pic_url" json:"picUrl" description:"图片 URL"`
|
||||||
|
PicName string `orm:"pic_name" json:"picName" description:"图片名称"`
|
||||||
|
PicId string `orm:"pic_id" json:"picId" description:"图片 Id"`
|
||||||
|
CoverUrl string `orm:"cover_url" json:"coverUrl" description:"封面 URL"`
|
||||||
|
CoverId *int64 `orm:"cover_id" json:"coverId" description:"封面 Id"`
|
||||||
|
ItemOrderConversionRatio *float64 `orm:"item_order_conversion_ratio" json:"itemOrderConversionRatio" description:"转化率"`
|
||||||
|
ItemCardClickRatio *float64 `orm:"item_card_click_ratio" json:"itemCardClickRatio" description:"点击率"`
|
||||||
|
ItemCardClkCnt *int64 `orm:"item_card_clk_cnt" json:"itemCardClkCnt" description:"商品卡点击数"`
|
||||||
|
LivePlayCntCost *float64 `orm:"live_play_cnt_cost" json:"livePlayCntCost" description:"直播间观看成本"`
|
||||||
|
AdMerchantFollowCost *float64 `orm:"ad_merchant_follow_cost" json:"adMerchantFollowCost" description:"涨粉成本"`
|
||||||
|
AdMerchantFollow *int64 `orm:"ad_merchant_follow" json:"adMerchantFollow" description:"涨粉数"`
|
||||||
|
NetT0OrderCnt *int64 `orm:"net_t0_order_cnt" json:"netT0OrderCnt" description:"当日累计净成交订单数"`
|
||||||
|
NetT0Roi *float64 `orm:"net_t0_roi" json:"netT0Roi" description:"净成交 ROI"`
|
||||||
|
NetT0Gmv *float64 `orm:"net_t0_gmv" json:"netT0Gmv" description:"净成交 GMV"`
|
||||||
|
PhotoName string `orm:"photo_name" json:"photoName" description:"视频名称"`
|
||||||
|
PhotoIdStr string `orm:"photo_id_str" json:"photoIdStr" description:"视频 id"`
|
||||||
|
PhotoId string `orm:"photo_id" json:"photoId" description:"视频 id"`
|
||||||
|
ModPriceSegment string `orm:"mod_price_segment" json:"modPriceSegment" description:"设备价格区间"`
|
||||||
|
AgeSegment string `orm:"age_segment" json:"ageSegment" description:"年龄段"`
|
||||||
|
Province string `orm:"province" json:"province" description:"省份名称"`
|
||||||
|
Gender string `orm:"gender" json:"gender" description:"性别"`
|
||||||
|
AdPhotoPlayedFiveRatio *float64 `orm:"ad_photo_played_five_ratio" json:"adPhotoPlayedFiveRatio" description:"作品 5 秒播放率"`
|
||||||
|
AdPhotoPlayedThreeRatio *float64 `orm:"ad_photo_played_three_ratio" json:"adPhotoPlayedThreeRatio" description:"作品 3 秒播放率"`
|
||||||
|
OrderSubmitRoi *float64 `orm:"order_submit_roi" json:"orderSubmitRoi" description:"订单提交 ROI"`
|
||||||
|
OrderSubmitAmt *int64 `orm:"order_submit_amt" json:"orderSubmitAmt" description:"外部订单金额"`
|
||||||
|
EventOrderSubmitCost *float64 `orm:"event_order_submit_cost" json:"eventOrderSubmitCost" description:"订单提交成本"`
|
||||||
|
EventOrderSubmit *int64 `orm:"event_order_submit" json:"eventOrderSubmit" description:"订单提交数"`
|
||||||
|
EventOrderPaidRoi *float64 `orm:"event_order_paid_roi" json:"eventOrderPaidRoi" description:"订单支付率"`
|
||||||
|
EventAppInvoked *int64 `orm:"event_app_invoked" json:"eventAppInvoked" description:"唤起应用数"`
|
||||||
|
EventAddShoppingCart *int64 `orm:"event_add_shopping_cart" json:"eventAddShoppingCart" description:"添加购物车次数"`
|
||||||
|
ConversionNumCost *float64 `orm:"conversion_num_cost" json:"conversionNumCost" description:"转化成本(回传时间)"`
|
||||||
|
AdEffectivePlayNum *int64 `orm:"ad_effective_play_num" json:"adEffectivePlayNum" description:"有效播放数"`
|
||||||
|
AdItemClick *int64 `orm:"ad_item_click" json:"adItemClick" description:"行为数"`
|
||||||
|
MerchantProductId string `orm:"merchant_product_id" json:"merchantProductId" description:"商品 ID"`
|
||||||
|
CostTotal *float64 `orm:"cost_total" json:"costTotal" description:"花费"`
|
||||||
|
AdShow *int64 `orm:"ad_show" json:"adShow" description:"曝光数"`
|
||||||
|
AdShow1kCost *float64 `orm:"ad_show1k_cost" json:"adShow1kCost" description:"平均千次广告曝光花费"`
|
||||||
|
Impression *int64 `orm:"impression" json:"impression" description:"封面曝光数"`
|
||||||
|
PhotoClick *int64 `orm:"photo_click" json:"photoClick" description:"封面点击数"`
|
||||||
|
PhotoClickRatio *float64 `orm:"photo_click_ratio" json:"photoClickRatio" description:"封面点击率"`
|
||||||
|
Click *int64 `orm:"click" json:"click" description:"素材曝光数"`
|
||||||
|
ActionbarClick *int64 `orm:"actionbar_click" json:"actionbarClick" description:"行为数"`
|
||||||
|
ActionbarClickCost *float64 `orm:"actionbar_click_cost" json:"actionbarClickCost" description:"行为成本"`
|
||||||
|
EspClickRatio *float64 `orm:"esp_click_ratio" json:"espClickRatio" description:"行为率"`
|
||||||
|
ActionRatio *float64 `orm:"action_ratio" json:"actionRatio" description:"素材点击率"`
|
||||||
|
AdItemClickCount *int64 `orm:"ad_item_click_count" json:"adItemClickCount" description:"预约组件点击数"`
|
||||||
|
EspLivePlayedSeconds *int64 `orm:"esp_live_played_seconds" json:"espLivePlayedSeconds" description:"直播平均观看时长"`
|
||||||
|
PlayedThreeSeconds *int64 `orm:"played_three_seconds" json:"playedThreeSeconds" description:"作品 3 秒播放数"`
|
||||||
|
Play3sRatio *float64 `orm:"play3s_ratio" json:"play3sRatio" description:"作品 3 秒播放率"`
|
||||||
|
PlayedFiveSeconds *int64 `orm:"played_five_seconds" json:"playedFiveSeconds" description:"作品 5 秒播放数"`
|
||||||
|
Play5sRatio *float64 `orm:"play5s_ratio" json:"play5sRatio" description:"作品 5 秒播放率"`
|
||||||
|
PlayedEnd *int64 `orm:"played_end" json:"playedEnd" description:"作品完播数"`
|
||||||
|
PlayEndRatio *float64 `orm:"play_end_ratio" json:"playEndRatio" description:"作品完播率"`
|
||||||
|
Share *int64 `orm:"share" json:"share" description:"作品分享数"`
|
||||||
|
Comment *int64 `orm:"comment" json:"comment" description:"作品评论数"`
|
||||||
|
Likes *int64 `orm:"likes" json:"likes" description:"作品点赞数"`
|
||||||
|
Report *int64 `orm:"report" json:"report" description:"作品举报数"`
|
||||||
|
Block *int64 `orm:"block" json:"block" description:"作品拉黑数"`
|
||||||
|
ItemNegative *int64 `orm:"item_negative" json:"itemNegative" description:"详情页减少此类作品数"`
|
||||||
|
LiveShare *int64 `orm:"live_share" json:"liveShare" description:"直播送礼数"`
|
||||||
|
LiveComment *int64 `orm:"live_comment" json:"liveComment" description:"直播评论数"`
|
||||||
|
LiveReward *int64 `orm:"live_reward" json:"liveReward" description:"直播送礼数"`
|
||||||
|
EffectivePlayCount *int64 `orm:"effective_play_count" json:"effectivePlayCount" description:"有效播放数"`
|
||||||
|
EffectivePlayRatio *float64 `orm:"effective_play_ratio" json:"effectivePlayRatio" description:"有效播放率"`
|
||||||
|
ConversionNum *int64 `orm:"conversion_num" json:"conversionNum" description:"转化数"`
|
||||||
|
ConversionCostEsp *float64 `orm:"conversion_cost_esp" json:"conversionCostEsp" description:"转化成本"`
|
||||||
|
Roi *float64 `orm:"roi" json:"roi" description:"直接 ROI"`
|
||||||
|
Gmv *float64 `orm:"gmv" json:"gmv" description:"直接 GMV"`
|
||||||
|
T0Gmv *float64 `orm:"t0_gmv" json:"t0Gmv" description:"当日累计 GMV"`
|
||||||
|
T1Gmv *float64 `orm:"t1_gmv" json:"t1Gmv" description:"次日累计 GMV"`
|
||||||
|
T7Gmv *float64 `orm:"t7_gmv" json:"t7Gmv" description:"7 日累计 GMV"`
|
||||||
|
T15Gmv *float64 `orm:"t15_gmv" json:"t15Gmv" description:"15 日累计 GMV"`
|
||||||
|
T30Gmv *float64 `orm:"t30_gmv" json:"t30Gmv" description:"30 日累计 GMV"`
|
||||||
|
T0Roi *float64 `orm:"t0_roi" json:"t0Roi" description:"当日累计 ROI"`
|
||||||
|
T1Roi *float64 `orm:"t1_roi" json:"t1Roi" description:"次日累计 ROI"`
|
||||||
|
T7Roi *float64 `orm:"t7_roi" json:"t7Roi" description:"7 日累计 ROI"`
|
||||||
|
T15Roi *float64 `orm:"t15_roi" json:"t15Roi" description:"15 日累计 ROI"`
|
||||||
|
T30Roi *float64 `orm:"t30_roi" json:"t30Roi" description:"30 日累计 ROI"`
|
||||||
|
PaiedOrder *int64 `orm:"paied_order" json:"paiedOrder" description:"直接订单数"`
|
||||||
|
OrderRatio *float64 `orm:"order_ratio" json:"orderRatio" description:"直接下单率"`
|
||||||
|
T0OrderCnt *int64 `orm:"t0_order_cnt" json:"t0OrderCnt" description:"当日累计订单数"`
|
||||||
|
T0OrderCntCost *float64 `orm:"t0_order_cnt_cost" json:"t0OrderCntCost" description:"当日累计订单成本"`
|
||||||
|
T0OrderCntRatio *float64 `orm:"t0_order_cnt_ratio" json:"t0OrderCntRatio" description:"累计订单下单率"`
|
||||||
|
T1OrderCnt *int64 `orm:"t1_order_cnt" json:"t1OrderCnt" description:"次日累计订单数"`
|
||||||
|
T7OrderCnt *int64 `orm:"t7_order_cnt" json:"t7OrderCnt" description:"7 日累计订单数"`
|
||||||
|
T15OrderCnt *int64 `orm:"t15_order_cnt" json:"t15OrderCnt" description:"15 日累计订单数"`
|
||||||
|
T30OrderCnt *int64 `orm:"t30_order_cnt" json:"t30OrderCnt" description:"30 日累计订单数"`
|
||||||
|
MerchantRecoFans *int64 `orm:"merchant_reco_fans" json:"merchantRecoFans" description:"涨粉数"`
|
||||||
|
T1Retention *float64 `orm:"t1_retention" json:"t1Retention" description:"次日涨粉留存数"`
|
||||||
|
T7Retention *float64 `orm:"t7_retention" json:"t7Retention" description:"7 日涨粉留存数"`
|
||||||
|
T15Retention *float64 `orm:"t15_retention" json:"t15Retention" description:"15 日涨粉留存数"`
|
||||||
|
T30Retention *float64 `orm:"t30_retention" json:"t30Retention" description:"30 日涨粉留存数"`
|
||||||
|
T1RetentionRatio *float64 `orm:"t1_retention_ratio" json:"t1RetentionRatio" description:"次日涨粉留存率"`
|
||||||
|
T7RetentionRatio *float64 `orm:"t7_retention_ratio" json:"t7RetentionRatio" description:"7 日涨粉留存率"`
|
||||||
|
T15RetentionRatio *float64 `orm:"t15_retention_ratio" json:"t15RetentionRatio" description:"15 日涨粉留存率"`
|
||||||
|
T30RetentionRatio *float64 `orm:"t30_retention_ratio" json:"t30RetentionRatio" description:"30 日涨粉留存率"`
|
||||||
|
ReservationSuccess *int64 `orm:"reservation_success" json:"reservationSuccess" description:"直播预约成功数"`
|
||||||
|
ReservationCost *float64 `orm:"reservation_cost" json:"reservationCost" description:"直播预约成功成本"`
|
||||||
|
StandardLivePlayedStarted *int64 `orm:"standard_live_played_started" json:"standardLivePlayedStarted" description:"直播观看数"`
|
||||||
|
AdLivePlayCnt *int64 `orm:"ad_live_play_cnt" json:"adLivePlayCnt" description:"直播间人气数"`
|
||||||
|
AdLivePlayCntCost *float64 `orm:"ad_live_play_cnt_cost" json:"adLivePlayCntCost" description:"直播间人气成本"`
|
||||||
|
LiveAudienceCost *float64 `orm:"live_audience_cost" json:"liveAudienceCost" description:"直播观看成本"`
|
||||||
|
LiveEventGoodsView *int64 `orm:"live_event_goods_view" json:"liveEventGoodsView" description:"直播间商品点击数"`
|
||||||
|
GoodsClickRatio *float64 `orm:"goods_click_ratio" json:"goodsClickRatio" description:"直播间商品点击率"`
|
||||||
|
DirectAttrPlatNewBuyerCnt *int64 `orm:"direct_attr_plat_new_buyer_cnt" json:"directAttrPlatNewBuyerCnt" description:"直接平台新客"`
|
||||||
|
T30AttrPlatTotalBuyerCnt *int64 `orm:"t30_attr_plat_total_buyer_cnt" json:"t30AttrPlatTotalBuyerCnt" description:"30 日累计平台新客"`
|
||||||
|
DirectAttrSellerNewBuyerCnt *int64 `orm:"direct_attr_seller_new_buyer_cnt" json:"directAttrSellerNewBuyerCnt" description:"直接店铺新客"`
|
||||||
|
T30AttrSellerTotalBuyerCnt *int64 `orm:"t30_attr_seller_total_buyer_cnt" json:"t30AttrSellerTotalBuyerCnt" description:"30 日累计店铺新客"`
|
||||||
|
T3Gmv *float64 `orm:"t3_gmv" json:"t3Gmv" description:"3 日累计 GMV"`
|
||||||
|
T3OrderCnt *int64 `orm:"t3_order_cnt" json:"t3OrderCnt" description:"3 日累计订单数"`
|
||||||
|
T3Roi *float64 `orm:"t3_roi" json:"t3Roi" description:"3 日累计 ROI"`
|
||||||
|
T7IndirectOrderAmt *float64 `orm:"t7_indirect_order_amt" json:"t7IndirectOrderAmt" description:"7 日间接订单金额"`
|
||||||
|
T7IndirectOrderCnt *int64 `orm:"t7_indirect_order_cnt" json:"t7IndirectOrderCnt" description:"7 日间接订单数"`
|
||||||
|
FansT0GmvPerFans *float64 `orm:"fans_t0_gmv_per_fans" json:"fansT0GmvPerFans" description:"新增粉丝人均销售额"`
|
||||||
|
FansT3GmvPerFans *float64 `orm:"fans_t3_gmv_per_fans" json:"fansT3GmvPerFans" description:"3 日新增粉丝人均销售额"`
|
||||||
|
FansT7GmvPerFans *float64 `orm:"fans_t7_gmv_per_fans" json:"fansT7GmvPerFans" description:"7 日新增粉丝人均销售额"`
|
||||||
|
FansT15GmvPerFans *float64 `orm:"fans_t15_gmv_per_fans" json:"fansT15GmvPerFans" description:"15 日新增粉丝人均销售额"`
|
||||||
|
FansT30GmvPerFans *float64 `orm:"fans_t30_gmv_per_fans" json:"fansT30GmvPerFans" description:"30 日新增粉丝人均销售额"`
|
||||||
|
RecoFansCost *float64 `orm:"reco_fans_cost" json:"recoFansCost" description:"涨粉成本"`
|
||||||
|
QcpxWhiteboxDirectOrderPaymentAmt *float64 `orm:"qcpx_whitebox_direct_order_payment_amt" json:"qcpxWhiteboxDirectOrderPaymentAmt" description:"智能优惠券订单 GMV"`
|
||||||
|
QcpxWhiteboxDirectOrderCnt *int64 `orm:"qcpx_whitebox_direct_order_cnt" json:"qcpxWhiteboxDirectOrderCnt" description:"智能优惠券订单数"`
|
||||||
|
FansT0Gmv *float64 `orm:"fans_t0_gmv" json:"fansT0Gmv" description:"涨粉当日 GMV"`
|
||||||
|
FansT1Gmv *float64 `orm:"fans_t1_gmv" json:"fansT1Gmv" description:"涨粉次日 GMV"`
|
||||||
|
FansT7Gmv *float64 `orm:"fans_t7_gmv" json:"fansT7Gmv" description:"涨粉 7 日 GMV"`
|
||||||
|
FansT15Gmv *float64 `orm:"fans_t15_gmv" json:"fansT15Gmv" description:"涨粉 15 日 GMV"`
|
||||||
|
FansT30Gmv *float64 `orm:"fans_t30_gmv" json:"fansT30Gmv" description:"涨粉 30 日 GMV"`
|
||||||
|
FansT0Roi *float64 `orm:"fans_t0_roi" json:"fansT0Roi" description:"涨粉当日 ROI"`
|
||||||
|
FansT1Roi *float64 `orm:"fans_t1_roi" json:"fansT1Roi" description:"涨粉次日 ROI"`
|
||||||
|
FansT7Roi *float64 `orm:"fans_t7_roi" json:"fansT7Roi" description:"涨粉 7 日 ROI"`
|
||||||
|
FansT15Roi *float64 `orm:"fans_t15_roi" json:"fansT15Roi" description:"涨粉 15 日 ROI"`
|
||||||
|
FansT30Roi *float64 `orm:"fans_t30_roi" json:"fansT30Roi" description:"涨粉 30 日 ROI"`
|
||||||
|
T0ShopNewBuyerOrderPaymentAmt *float64 `orm:"t0_shop_new_buyer_order_payment_amt" json:"t0ShopNewBuyerOrderPaymentAmt" description:"当日新客 GMV"`
|
||||||
|
T1ShopNewBuyerOrderPaymentAmt *float64 `orm:"t1_shop_new_buyer_order_payment_amt" json:"t1ShopNewBuyerOrderPaymentAmt" description:"投后 1 日新客 GMV"`
|
||||||
|
T3ShopNewBuyerOrderPaymentAmt *float64 `orm:"t3_shop_new_buyer_order_payment_amt" json:"t3ShopNewBuyerOrderPaymentAmt" description:"投后 3 日新客 GMV"`
|
||||||
|
T7ShopNewBuyerOrderPaymentAmt *float64 `orm:"t7_shop_new_buyer_order_payment_amt" json:"t7ShopNewBuyerOrderPaymentAmt" description:"投后 7 日新客 GMV"`
|
||||||
|
T15ShopNewBuyerOrderPaymentAmt *float64 `orm:"t15_shop_new_buyer_order_payment_amt" json:"t15ShopNewBuyerOrderPaymentAmt" description:"投后 15 日新客 GMV"`
|
||||||
|
T30ShopNewBuyerOrderPaymentAmt *float64 `orm:"t30_shop_new_buyer_order_payment_amt" json:"t30ShopNewBuyerOrderPaymentAmt" description:"投后 30 日新客 GMV"`
|
||||||
|
T0ShopNewBuyerOrderCnt *int64 `orm:"t0_shop_new_buyer_order_cnt" json:"t0ShopNewBuyerOrderCnt" description:"当日新客成交订单量"`
|
||||||
|
T1ShopNewBuyerOrderCnt *int64 `orm:"t1_shop_new_buyer_order_cnt" json:"t1ShopNewBuyerOrderCnt" description:"投后 1 日新客成交订单量"`
|
||||||
|
T3ShopNewBuyerOrderCnt *int64 `orm:"t3_shop_new_buyer_order_cnt" json:"t3ShopNewBuyerOrderCnt" description:"投后 3 日新客成交订单量"`
|
||||||
|
T7ShopNewBuyerOrderCnt *int64 `orm:"t7_shop_new_buyer_order_cnt" json:"t7ShopNewBuyerOrderCnt" description:"投后 7 日新客成交订单量"`
|
||||||
|
T15ShopNewBuyerOrderCnt *int64 `orm:"t15_shop_new_buyer_order_cnt" json:"t15ShopNewBuyerOrderCnt" description:"投后 15 日新客成交订单量"`
|
||||||
|
T30ShopNewBuyerOrderCnt *int64 `orm:"t30_shop_new_buyer_order_cnt" json:"t30ShopNewBuyerOrderCnt" description:"投后 30 日新客成交订单量"`
|
||||||
|
T1NewBuyerRepurchaseRatio *float64 `orm:"t1_new_buyer_repurchase_ratio" json:"t1NewBuyerRepurchaseRatio" description:"投后 1 日新客复购率"`
|
||||||
|
T3NewBuyerRepurchaseRatio *float64 `orm:"t3_new_buyer_repurchase_ratio" json:"t3NewBuyerRepurchaseRatio" description:"投后 3 日新客复购率"`
|
||||||
|
T7NewBuyerRepurchaseRatio *float64 `orm:"t7_new_buyer_repurchase_ratio" json:"t7NewBuyerRepurchaseRatio" description:"投后 7 日新客复购率"`
|
||||||
|
T15NewBuyerRepurchaseRatio *float64 `orm:"t15_new_buyer_repurchase_ratio" json:"t15NewBuyerRepurchaseRatio" description:"投后 15 日新客复购率"`
|
||||||
|
T30NewBuyerRepurchaseRatio *float64 `orm:"t30_new_buyer_repurchase_ratio" json:"t30NewBuyerRepurchaseRatio" description:"投后 30 日新客复购率"`
|
||||||
|
T0ShopNewBuyerRoi *float64 `orm:"t0_shop_new_buyer_roi" json:"t0ShopNewBuyerRoi" description:"投后当日新客 ROI"`
|
||||||
|
T1ShopNewBuyerRoi *float64 `orm:"t1_shop_new_buyer_roi" json:"t1ShopNewBuyerRoi" description:"投后 1 日新客 ROI"`
|
||||||
|
T3ShopNewBuyerRoi *float64 `orm:"t3_shop_new_buyer_roi" json:"t3ShopNewBuyerRoi" description:"投后 3 日新客 ROI"`
|
||||||
|
T7ShopNewBuyerRoi *float64 `orm:"t7_shop_new_buyer_roi" json:"t7ShopNewBuyerRoi" description:"投后 7 日新客 ROI"`
|
||||||
|
T15ShopNewBuyerRoi *float64 `orm:"t15_shop_new_buyer_roi" json:"t15ShopNewBuyerRoi" description:"投后 15 日新客 ROI"`
|
||||||
|
T30ShopNewBuyerRoi *float64 `orm:"t30_shop_new_buyer_roi" json:"t30ShopNewBuyerRoi" description:"投后 30 日新客 ROI"`
|
||||||
|
CreateCardOrderCnt *int64 `orm:"create_card_order_cnt" json:"createCardOrderCnt" description:"有效制卡订单数(回传时间)"`
|
||||||
|
ForwardTsCreateCardOrderCnt *int64 `orm:"forward_ts_create_card_order_cnt" json:"forwardTsCreateCardOrderCnt" description:"有效制卡订单数(计费时间)"`
|
||||||
|
CreateCardOrderCost *float64 `orm:"create_card_order_cost" json:"createCardOrderCost" description:"有效制卡订单成本(回传时间)"`
|
||||||
|
ForwardTsCreateCardOrderCost *float64 `orm:"forward_ts_create_card_order_cost" json:"forwardTsCreateCardOrderCost" description:"有效制卡订单成本(计费时间)"`
|
||||||
|
ActivateCardOrderCnt *int64 `orm:"activate_card_order_cnt" json:"activateCardOrderCnt" description:"电话卡激活订单数(回传时间)"`
|
||||||
|
ForwardTsActivateCardOrderCnt *int64 `orm:"forward_ts_activate_card_order_cnt" json:"forwardTsActivateCardOrderCnt" description:"电话卡激活订单数(计费时间)"`
|
||||||
|
ActivateCardOrderCost *float64 `orm:"activate_card_order_cost" json:"activateCardOrderCost" description:"电话卡激活订单成本(回传时间)"`
|
||||||
|
ForwardTsActivateCardOrderCost *float64 `orm:"forward_ts_activate_card_order_cost" json:"forwardTsActivateCardOrderCost" description:"电话卡激活订单成本(计费时间)"`
|
||||||
|
CreateCardOrderRatio *float64 `orm:"create_card_order_ratio" json:"createCardOrderRatio" description:"有效制卡订单率(回传时间)"`
|
||||||
|
ForwardTsCreateCardOrderRatio *float64 `orm:"forward_ts_create_card_order_ratio" json:"forwardTsCreateCardOrderRatio" description:"有效制卡订单率(计费时间)"`
|
||||||
|
ActivateCardOrderCntRatio *float64 `orm:"activate_card_order_cnt_ratio" json:"activateCardOrderCntRatio" description:"电话卡激活率(回传时间)"`
|
||||||
|
ForwardTsActivateCardOrderRatio *float64 `orm:"forward_ts_activate_card_order_ratio" json:"forwardTsActivateCardOrderRatio" description:"电话卡激活率(计费时间)"`
|
||||||
|
LivePlayCnt *int64 `orm:"live_play_cnt" json:"livePlayCnt" description:"全站直播观看数"`
|
||||||
|
ItemEntranceClkCnt *int64 `orm:"item_entrance_clk_cnt" json:"itemEntranceClkCnt" description:"小黄车点击数"`
|
||||||
|
ShowCnt *int64 `orm:"show_cnt" json:"showCnt" description:"全站曝光"`
|
||||||
|
ReportDateStr string `orm:"report_date_str" json:"reportDateStr" description:"时间"`
|
||||||
|
CampaignId *int64 `orm:"campaign_id" json:"campaignId" description:"计划 ID"`
|
||||||
|
CampaignName string `orm:"campaign_name" json:"campaignName" description:"计划名称"`
|
||||||
|
UnitId *int64 `orm:"unit_id" json:"unitId" description:"单元 ID"`
|
||||||
|
UnitName string `orm:"unit_name" json:"unitName" description:"单元名称"`
|
||||||
|
CreativeId *int64 `orm:"creative_id" json:"creativeId" description:"创意 ID"`
|
||||||
|
CreativeName string `orm:"creative_name" json:"creativeName" description:"创意名称"`
|
||||||
|
CidActualRoiAfterSubsidy *float64 `orm:"cid_actual_roi_after_subsidy" json:"cidActualRoiAfterSubsidy" description:"补贴后实际 ROI"`
|
||||||
|
CidCouponAmount *int64 `orm:"cid_coupon_amount" json:"cidCouponAmount" description:"核销券金额"`
|
||||||
|
CidCouponCallbackPaidRefundAmount *int64 `orm:"cid_coupon_callback_paid_refund_amount" json:"cidCouponCallbackPaidRefundAmount" description:"退单有回传_核销券金额"`
|
||||||
|
CidVoucherCost *float64 `orm:"cid_voucher_cost" json:"cidVoucherCost" description:"券成本"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CampaignReportSumCol 广告计划效果指标表字段定义
|
||||||
|
type CampaignReportSumCol struct {
|
||||||
|
beans.SQLBaseCol
|
||||||
|
T0OrderPaymentAmt string
|
||||||
|
CreativeMaterialType string
|
||||||
|
LiveName string
|
||||||
|
AuthorId string
|
||||||
|
PicUrl string
|
||||||
|
PicName string
|
||||||
|
PicId string
|
||||||
|
CoverUrl string
|
||||||
|
CoverId string
|
||||||
|
ItemOrderConversionRatio string
|
||||||
|
ItemCardClickRatio string
|
||||||
|
ItemCardClkCnt string
|
||||||
|
LivePlayCntCost string
|
||||||
|
AdMerchantFollowCost string
|
||||||
|
AdMerchantFollow string
|
||||||
|
NetT0OrderCnt string
|
||||||
|
NetT0Roi string
|
||||||
|
NetT0Gmv string
|
||||||
|
PhotoName string
|
||||||
|
PhotoIdStr string
|
||||||
|
PhotoId string
|
||||||
|
ModPriceSegment string
|
||||||
|
AgeSegment string
|
||||||
|
Province string
|
||||||
|
Gender string
|
||||||
|
AdPhotoPlayedFiveRatio string
|
||||||
|
AdPhotoPlayedThreeRatio string
|
||||||
|
OrderSubmitRoi string
|
||||||
|
OrderSubmitAmt string
|
||||||
|
EventOrderSubmitCost string
|
||||||
|
EventOrderSubmit string
|
||||||
|
EventOrderPaidRoi string
|
||||||
|
EventAppInvoked string
|
||||||
|
EventAddShoppingCart string
|
||||||
|
ConversionNumCost string
|
||||||
|
AdEffectivePlayNum string
|
||||||
|
AdItemClick string
|
||||||
|
MerchantProductId string
|
||||||
|
CostTotal string
|
||||||
|
AdShow string
|
||||||
|
AdShow1kCost string
|
||||||
|
Impression string
|
||||||
|
PhotoClick string
|
||||||
|
PhotoClickRatio string
|
||||||
|
Click string
|
||||||
|
ActionbarClick string
|
||||||
|
ActionbarClickCost string
|
||||||
|
EspClickRatio string
|
||||||
|
ActionRatio string
|
||||||
|
AdItemClickCount string
|
||||||
|
EspLivePlayedSeconds string
|
||||||
|
PlayedThreeSeconds string
|
||||||
|
Play3sRatio string
|
||||||
|
PlayedFiveSeconds string
|
||||||
|
Play5sRatio string
|
||||||
|
PlayedEnd string
|
||||||
|
PlayEndRatio string
|
||||||
|
Share string
|
||||||
|
Comment string
|
||||||
|
Likes string
|
||||||
|
Report string
|
||||||
|
Block string
|
||||||
|
ItemNegative string
|
||||||
|
LiveShare string
|
||||||
|
LiveComment string
|
||||||
|
LiveReward string
|
||||||
|
EffectivePlayCount string
|
||||||
|
EffectivePlayRatio string
|
||||||
|
ConversionNum string
|
||||||
|
ConversionCostEsp string
|
||||||
|
Roi string
|
||||||
|
Gmv string
|
||||||
|
T0Gmv string
|
||||||
|
T1Gmv string
|
||||||
|
T7Gmv string
|
||||||
|
T15Gmv string
|
||||||
|
T30Gmv string
|
||||||
|
T0Roi string
|
||||||
|
T1Roi string
|
||||||
|
T7Roi string
|
||||||
|
T15Roi string
|
||||||
|
T30Roi string
|
||||||
|
PaiedOrder string
|
||||||
|
OrderRatio string
|
||||||
|
T0OrderCnt string
|
||||||
|
T0OrderCntCost string
|
||||||
|
T0OrderCntRatio string
|
||||||
|
T1OrderCnt string
|
||||||
|
T7OrderCnt string
|
||||||
|
T15OrderCnt string
|
||||||
|
T30OrderCnt string
|
||||||
|
MerchantRecoFans string
|
||||||
|
T1Retention string
|
||||||
|
T7Retention string
|
||||||
|
T15Retention string
|
||||||
|
T30Retention string
|
||||||
|
T1RetentionRatio string
|
||||||
|
T7RetentionRatio string
|
||||||
|
T15RetentionRatio string
|
||||||
|
T30RetentionRatio string
|
||||||
|
ReservationSuccess string
|
||||||
|
ReservationCost string
|
||||||
|
StandardLivePlayedStarted string
|
||||||
|
AdLivePlayCnt string
|
||||||
|
AdLivePlayCntCost string
|
||||||
|
LiveAudienceCost string
|
||||||
|
LiveEventGoodsView string
|
||||||
|
GoodsClickRatio string
|
||||||
|
DirectAttrPlatNewBuyerCnt string
|
||||||
|
T30AttrPlatTotalBuyerCnt string
|
||||||
|
DirectAttrSellerNewBuyerCnt string
|
||||||
|
T30AttrSellerTotalBuyerCnt string
|
||||||
|
T3Gmv string
|
||||||
|
T3OrderCnt string
|
||||||
|
T3Roi string
|
||||||
|
T7IndirectOrderAmt string
|
||||||
|
T7IndirectOrderCnt string
|
||||||
|
FansT0GmvPerFans string
|
||||||
|
FansT3GmvPerFans string
|
||||||
|
FansT7GmvPerFans string
|
||||||
|
FansT15GmvPerFans string
|
||||||
|
FansT30GmvPerFans string
|
||||||
|
RecoFansCost string
|
||||||
|
QcpxWhiteboxDirectOrderPaymentAmt string
|
||||||
|
QcpxWhiteboxDirectOrderCnt string
|
||||||
|
FansT0Gmv string
|
||||||
|
FansT1Gmv string
|
||||||
|
FansT7Gmv string
|
||||||
|
FansT15Gmv string
|
||||||
|
FansT30Gmv string
|
||||||
|
FansT0Roi string
|
||||||
|
FansT1Roi string
|
||||||
|
FansT7Roi string
|
||||||
|
FansT15Roi string
|
||||||
|
FansT30Roi string
|
||||||
|
T0ShopNewBuyerOrderPaymentAmt string
|
||||||
|
T1ShopNewBuyerOrderPaymentAmt string
|
||||||
|
T3ShopNewBuyerOrderPaymentAmt string
|
||||||
|
T7ShopNewBuyerOrderPaymentAmt string
|
||||||
|
T15ShopNewBuyerOrderPaymentAmt string
|
||||||
|
T30ShopNewBuyerOrderPaymentAmt string
|
||||||
|
T0ShopNewBuyerOrderCnt string
|
||||||
|
T1ShopNewBuyerOrderCnt string
|
||||||
|
T3ShopNewBuyerOrderCnt string
|
||||||
|
T7ShopNewBuyerOrderCnt string
|
||||||
|
T15ShopNewBuyerOrderCnt string
|
||||||
|
T30ShopNewBuyerOrderCnt string
|
||||||
|
T1NewBuyerRepurchaseRatio string
|
||||||
|
T3NewBuyerRepurchaseRatio string
|
||||||
|
T7NewBuyerRepurchaseRatio string
|
||||||
|
T15NewBuyerRepurchaseRatio string
|
||||||
|
T30NewBuyerRepurchaseRatio string
|
||||||
|
T0ShopNewBuyerRoi string
|
||||||
|
T1ShopNewBuyerRoi string
|
||||||
|
T3ShopNewBuyerRoi string
|
||||||
|
T7ShopNewBuyerRoi string
|
||||||
|
T15ShopNewBuyerRoi string
|
||||||
|
T30ShopNewBuyerRoi string
|
||||||
|
CreateCardOrderCnt string
|
||||||
|
ForwardTsCreateCardOrderCnt string
|
||||||
|
CreateCardOrderCost string
|
||||||
|
ForwardTsCreateCardOrderCost string
|
||||||
|
ActivateCardOrderCnt string
|
||||||
|
ForwardTsActivateCardOrderCnt string
|
||||||
|
ActivateCardOrderCost string
|
||||||
|
ForwardTsActivateCardOrderCost string
|
||||||
|
CreateCardOrderRatio string
|
||||||
|
ForwardTsCreateCardOrderRatio string
|
||||||
|
ActivateCardOrderCntRatio string
|
||||||
|
ForwardTsActivateCardOrderRatio string
|
||||||
|
LivePlayCnt string
|
||||||
|
ItemEntranceClkCnt string
|
||||||
|
ShowCnt string
|
||||||
|
ReportDateStr string
|
||||||
|
CampaignId string
|
||||||
|
CampaignName string
|
||||||
|
UnitId string
|
||||||
|
UnitName string
|
||||||
|
CreativeId string
|
||||||
|
CreativeName string
|
||||||
|
CidActualRoiAfterSubsidy string
|
||||||
|
CidCouponAmount string
|
||||||
|
CidCouponCallbackPaidRefundAmount string
|
||||||
|
CidVoucherCost string
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName 返回表名
|
||||||
|
func (e *CampaignReportSum) TableName() string {
|
||||||
|
return "campaign_report_sum"
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCols 获取所有字段名
|
||||||
|
func (e *CampaignReportSum) GetCols() *CampaignReportSumCol {
|
||||||
|
return &CampaignReportSumCol{
|
||||||
|
SQLBaseCol: beans.SQLBaseCol{
|
||||||
|
Id: "id",
|
||||||
|
CreatedAt: "created_at",
|
||||||
|
UpdatedAt: "updated_at",
|
||||||
|
},
|
||||||
|
T0OrderPaymentAmt: "t0_order_payment_amt",
|
||||||
|
CreativeMaterialType: "creative_material_type",
|
||||||
|
LiveName: "live_name",
|
||||||
|
AuthorId: "author_id",
|
||||||
|
PicUrl: "pic_url",
|
||||||
|
PicName: "pic_name",
|
||||||
|
PicId: "pic_id",
|
||||||
|
CoverUrl: "cover_url",
|
||||||
|
CoverId: "cover_id",
|
||||||
|
ItemOrderConversionRatio: "item_order_conversion_ratio",
|
||||||
|
ItemCardClickRatio: "item_card_click_ratio",
|
||||||
|
ItemCardClkCnt: "item_card_clk_cnt",
|
||||||
|
LivePlayCntCost: "live_play_cnt_cost",
|
||||||
|
AdMerchantFollowCost: "ad_merchant_follow_cost",
|
||||||
|
AdMerchantFollow: "ad_merchant_follow",
|
||||||
|
NetT0OrderCnt: "net_t0_order_cnt",
|
||||||
|
NetT0Roi: "net_t0_roi",
|
||||||
|
NetT0Gmv: "net_t0_gmv",
|
||||||
|
PhotoName: "photo_name",
|
||||||
|
PhotoIdStr: "photo_id_str",
|
||||||
|
PhotoId: "photo_id",
|
||||||
|
ModPriceSegment: "mod_price_segment",
|
||||||
|
AgeSegment: "age_segment",
|
||||||
|
Province: "province",
|
||||||
|
Gender: "gender",
|
||||||
|
AdPhotoPlayedFiveRatio: "ad_photo_played_five_ratio",
|
||||||
|
AdPhotoPlayedThreeRatio: "ad_photo_played_three_ratio",
|
||||||
|
OrderSubmitRoi: "order_submit_roi",
|
||||||
|
OrderSubmitAmt: "order_submit_amt",
|
||||||
|
EventOrderSubmitCost: "event_order_submit_cost",
|
||||||
|
EventOrderSubmit: "event_order_submit",
|
||||||
|
EventOrderPaidRoi: "event_order_paid_roi",
|
||||||
|
EventAppInvoked: "event_app_invoked",
|
||||||
|
EventAddShoppingCart: "event_add_shopping_cart",
|
||||||
|
ConversionNumCost: "conversion_num_cost",
|
||||||
|
AdEffectivePlayNum: "ad_effective_play_num",
|
||||||
|
AdItemClick: "ad_item_click",
|
||||||
|
MerchantProductId: "merchant_product_id",
|
||||||
|
CostTotal: "cost_total",
|
||||||
|
AdShow: "ad_show",
|
||||||
|
AdShow1kCost: "ad_show1k_cost",
|
||||||
|
Impression: "impression",
|
||||||
|
PhotoClick: "photo_click",
|
||||||
|
PhotoClickRatio: "photo_click_ratio",
|
||||||
|
Click: "click",
|
||||||
|
ActionbarClick: "actionbar_click",
|
||||||
|
ActionbarClickCost: "actionbar_click_cost",
|
||||||
|
EspClickRatio: "esp_click_ratio",
|
||||||
|
ActionRatio: "action_ratio",
|
||||||
|
AdItemClickCount: "ad_item_click_count",
|
||||||
|
EspLivePlayedSeconds: "esp_live_played_seconds",
|
||||||
|
PlayedThreeSeconds: "played_three_seconds",
|
||||||
|
Play3sRatio: "play3s_ratio",
|
||||||
|
PlayedFiveSeconds: "played_five_seconds",
|
||||||
|
Play5sRatio: "play5s_ratio",
|
||||||
|
PlayedEnd: "played_end",
|
||||||
|
PlayEndRatio: "play_end_ratio",
|
||||||
|
Share: "share",
|
||||||
|
Comment: "comment",
|
||||||
|
Likes: "likes",
|
||||||
|
Report: "report",
|
||||||
|
Block: "block",
|
||||||
|
ItemNegative: "item_negative",
|
||||||
|
LiveShare: "live_share",
|
||||||
|
LiveComment: "live_comment",
|
||||||
|
LiveReward: "live_reward",
|
||||||
|
EffectivePlayCount: "effective_play_count",
|
||||||
|
EffectivePlayRatio: "effective_play_ratio",
|
||||||
|
ConversionNum: "conversion_num",
|
||||||
|
ConversionCostEsp: "conversion_cost_esp",
|
||||||
|
Roi: "roi",
|
||||||
|
Gmv: "gmv",
|
||||||
|
T0Gmv: "t0_gmv",
|
||||||
|
T1Gmv: "t1_gmv",
|
||||||
|
T7Gmv: "t7_gmv",
|
||||||
|
T15Gmv: "t15_gmv",
|
||||||
|
T30Gmv: "t30_gmv",
|
||||||
|
T0Roi: "t0_roi",
|
||||||
|
T1Roi: "t1_roi",
|
||||||
|
T7Roi: "t7_roi",
|
||||||
|
T15Roi: "t15_roi",
|
||||||
|
T30Roi: "t30_roi",
|
||||||
|
PaiedOrder: "paied_order",
|
||||||
|
OrderRatio: "order_ratio",
|
||||||
|
T0OrderCnt: "t0_order_cnt",
|
||||||
|
T0OrderCntCost: "t0_order_cnt_cost",
|
||||||
|
T0OrderCntRatio: "t0_order_cnt_ratio",
|
||||||
|
T1OrderCnt: "t1_order_cnt",
|
||||||
|
T7OrderCnt: "t7_order_cnt",
|
||||||
|
T15OrderCnt: "t15_order_cnt",
|
||||||
|
T30OrderCnt: "t30_order_cnt",
|
||||||
|
MerchantRecoFans: "merchant_reco_fans",
|
||||||
|
T1Retention: "t1_retention",
|
||||||
|
T7Retention: "t7_retention",
|
||||||
|
T15Retention: "t15_retention",
|
||||||
|
T30Retention: "t30_retention",
|
||||||
|
T1RetentionRatio: "t1_retention_ratio",
|
||||||
|
T7RetentionRatio: "t7_retention_ratio",
|
||||||
|
T15RetentionRatio: "t15_retention_ratio",
|
||||||
|
T30RetentionRatio: "t30_retention_ratio",
|
||||||
|
ReservationSuccess: "reservation_success",
|
||||||
|
ReservationCost: "reservation_cost",
|
||||||
|
StandardLivePlayedStarted: "standard_live_played_started",
|
||||||
|
AdLivePlayCnt: "ad_live_play_cnt",
|
||||||
|
AdLivePlayCntCost: "ad_live_play_cnt_cost",
|
||||||
|
LiveAudienceCost: "live_audience_cost",
|
||||||
|
LiveEventGoodsView: "live_event_goods_view",
|
||||||
|
GoodsClickRatio: "goods_click_ratio",
|
||||||
|
DirectAttrPlatNewBuyerCnt: "direct_attr_plat_new_buyer_cnt",
|
||||||
|
T30AttrPlatTotalBuyerCnt: "t30_attr_plat_total_buyer_cnt",
|
||||||
|
DirectAttrSellerNewBuyerCnt: "direct_attr_seller_new_buyer_cnt",
|
||||||
|
T30AttrSellerTotalBuyerCnt: "t30_attr_seller_total_buyer_cnt",
|
||||||
|
T3Gmv: "t3_gmv",
|
||||||
|
T3OrderCnt: "t3_order_cnt",
|
||||||
|
T3Roi: "t3_roi",
|
||||||
|
T7IndirectOrderAmt: "t7_indirect_order_amt",
|
||||||
|
T7IndirectOrderCnt: "t7_indirect_order_cnt",
|
||||||
|
FansT0GmvPerFans: "fans_t0_gmv_per_fans",
|
||||||
|
FansT3GmvPerFans: "fans_t3_gmv_per_fans",
|
||||||
|
FansT7GmvPerFans: "fans_t7_gmv_per_fans",
|
||||||
|
FansT15GmvPerFans: "fans_t15_gmv_per_fans",
|
||||||
|
FansT30GmvPerFans: "fans_t30_gmv_per_fans",
|
||||||
|
RecoFansCost: "reco_fans_cost",
|
||||||
|
QcpxWhiteboxDirectOrderPaymentAmt: "qcpx_whitebox_direct_order_payment_amt",
|
||||||
|
QcpxWhiteboxDirectOrderCnt: "qcpx_whitebox_direct_order_cnt",
|
||||||
|
FansT0Gmv: "fans_t0_gmv",
|
||||||
|
FansT1Gmv: "fans_t1_gmv",
|
||||||
|
FansT7Gmv: "fans_t7_gmv",
|
||||||
|
FansT15Gmv: "fans_t15_gmv",
|
||||||
|
FansT30Gmv: "fans_t30_gmv",
|
||||||
|
FansT0Roi: "fans_t0_roi",
|
||||||
|
FansT1Roi: "fans_t1_roi",
|
||||||
|
FansT7Roi: "fans_t7_roi",
|
||||||
|
FansT15Roi: "fans_t15_roi",
|
||||||
|
FansT30Roi: "fans_t30_roi",
|
||||||
|
T0ShopNewBuyerOrderPaymentAmt: "t0_shop_new_buyer_order_payment_amt",
|
||||||
|
T1ShopNewBuyerOrderPaymentAmt: "t1_shop_new_buyer_order_payment_amt",
|
||||||
|
T3ShopNewBuyerOrderPaymentAmt: "t3_shop_new_buyer_order_payment_amt",
|
||||||
|
T7ShopNewBuyerOrderPaymentAmt: "t7_shop_new_buyer_order_payment_amt",
|
||||||
|
T15ShopNewBuyerOrderPaymentAmt: "t15_shop_new_buyer_order_payment_amt",
|
||||||
|
T30ShopNewBuyerOrderPaymentAmt: "t30_shop_new_buyer_order_payment_amt",
|
||||||
|
T0ShopNewBuyerOrderCnt: "t0_shop_new_buyer_order_cnt",
|
||||||
|
T1ShopNewBuyerOrderCnt: "t1_shop_new_buyer_order_cnt",
|
||||||
|
T3ShopNewBuyerOrderCnt: "t3_shop_new_buyer_order_cnt",
|
||||||
|
T7ShopNewBuyerOrderCnt: "t7_shop_new_buyer_order_cnt",
|
||||||
|
T15ShopNewBuyerOrderCnt: "t15_shop_new_buyer_order_cnt",
|
||||||
|
T30ShopNewBuyerOrderCnt: "t30_shop_new_buyer_order_cnt",
|
||||||
|
T1NewBuyerRepurchaseRatio: "t1_new_buyer_repurchase_ratio",
|
||||||
|
T3NewBuyerRepurchaseRatio: "t3_new_buyer_repurchase_ratio",
|
||||||
|
T7NewBuyerRepurchaseRatio: "t7_new_buyer_repurchase_ratio",
|
||||||
|
T15NewBuyerRepurchaseRatio: "t15_new_buyer_repurchase_ratio",
|
||||||
|
T30NewBuyerRepurchaseRatio: "t30_new_buyer_repurchase_ratio",
|
||||||
|
T0ShopNewBuyerRoi: "t0_shop_new_buyer_roi",
|
||||||
|
T1ShopNewBuyerRoi: "t1_shop_new_buyer_roi",
|
||||||
|
T3ShopNewBuyerRoi: "t3_shop_new_buyer_roi",
|
||||||
|
T7ShopNewBuyerRoi: "t7_shop_new_buyer_roi",
|
||||||
|
T15ShopNewBuyerRoi: "t15_shop_new_buyer_roi",
|
||||||
|
T30ShopNewBuyerRoi: "t30_shop_new_buyer_roi",
|
||||||
|
CreateCardOrderCnt: "create_card_order_cnt",
|
||||||
|
ForwardTsCreateCardOrderCnt: "forward_ts_create_card_order_cnt",
|
||||||
|
CreateCardOrderCost: "create_card_order_cost",
|
||||||
|
ForwardTsCreateCardOrderCost: "forward_ts_create_card_order_cost",
|
||||||
|
ActivateCardOrderCnt: "activate_card_order_cnt",
|
||||||
|
ForwardTsActivateCardOrderCnt: "forward_ts_activate_card_order_cnt",
|
||||||
|
ActivateCardOrderCost: "activate_card_order_cost",
|
||||||
|
ForwardTsActivateCardOrderCost: "forward_ts_activate_card_order_cost",
|
||||||
|
CreateCardOrderRatio: "create_card_order_ratio",
|
||||||
|
ForwardTsCreateCardOrderRatio: "forward_ts_create_card_order_ratio",
|
||||||
|
ActivateCardOrderCntRatio: "activate_card_order_cnt_ratio",
|
||||||
|
ForwardTsActivateCardOrderRatio: "forward_ts_activate_card_order_ratio",
|
||||||
|
LivePlayCnt: "live_play_cnt",
|
||||||
|
ItemEntranceClkCnt: "item_entrance_clk_cnt",
|
||||||
|
ShowCnt: "show_cnt",
|
||||||
|
ReportDateStr: "report_date_str",
|
||||||
|
CampaignId: "campaign_id",
|
||||||
|
CampaignName: "campaign_name",
|
||||||
|
UnitId: "unit_id",
|
||||||
|
UnitName: "unit_name",
|
||||||
|
CreativeId: "creative_id",
|
||||||
|
CreativeName: "creative_name",
|
||||||
|
CidActualRoiAfterSubsidy: "cid_actual_roi_after_subsidy",
|
||||||
|
CidCouponAmount: "cid_coupon_amount",
|
||||||
|
CidCouponCallbackPaidRefundAmount: "cid_coupon_callback_paid_refund_amount",
|
||||||
|
CidVoucherCost: "cid_voucher_cost",
|
||||||
|
}
|
||||||
|
}
|
||||||
39
scheduler/run_account_report_task.go
Normal file
39
scheduler/run_account_report_task.go
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"cid/sync"
|
||||||
|
|
||||||
|
_ "github.com/gogf/gf/contrib/drivers/pgsql/v2"
|
||||||
|
|
||||||
|
"github.com/gogf/gf/v2/os/gctx"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
ctx := gctx.New()
|
||||||
|
syncService := sync.NewSyncService()
|
||||||
|
|
||||||
|
req := &sync.CampaignReportRequest{
|
||||||
|
AdvertiserID: 10001,
|
||||||
|
StartTime: time.Now().AddDate(0, 0, -30).UnixNano() / 1e6,
|
||||||
|
EndTime: time.Now().UnixNano() / 1e6,
|
||||||
|
SelectColumns: []string{"impression", "click", "cost", "t0GMV"},
|
||||||
|
GroupType: 1,
|
||||||
|
QueryVersion: 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
logrus.Info("=== 开始执行定时同步任务 ===")
|
||||||
|
result, err := syncService.SyncCampaignReportWithPagination(ctx, req, true, 3)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Errorf("定时同步任务失败:%v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("✓ 定时同步完成:\n")
|
||||||
|
fmt.Printf(" 汇总数据:成功=%v, ID=%d\n", result.SumSuccess, result.SumID)
|
||||||
|
fmt.Printf(" 明细数据:总数=%d, 成功=%d, 失败=%d\n",
|
||||||
|
result.DetailCount, result.DetailSuccessCount, result.DetailFailCount)
|
||||||
|
}
|
||||||
@@ -68,7 +68,7 @@ func (s *cidAccountReportDetailService) BatchCreate(ctx context.Context, req *dt
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create 创建广告数据报表汇总
|
// CreateSum Create 创建广告数据报表汇总
|
||||||
func (s *cidAccountReportDetailService) CreateSum(ctx context.Context, req *dto.CidAccountReportSumItem) (res *dto.CreateCidAccountReportSumRes, err error) {
|
func (s *cidAccountReportDetailService) CreateSum(ctx context.Context, req *dto.CidAccountReportSumItem) (res *dto.CreateCidAccountReportSumRes, err error) {
|
||||||
// 验证必要字段
|
// 验证必要字段
|
||||||
if req.DataType == "" {
|
if req.DataType == "" {
|
||||||
@@ -90,7 +90,7 @@ func (s *cidAccountReportDetailService) CreateSum(ctx context.Context, req *dto.
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// BatchCreate 批量创建广告数据报表汇总
|
// BatchCreateSum 批量创建广告数据报表汇总
|
||||||
func (s *cidAccountReportDetailService) BatchCreateSum(ctx context.Context, req *dto.BatchCreateCidAccountReportSumReq) (res *dto.BatchCreateCidAccountReportSumRes, err error) {
|
func (s *cidAccountReportDetailService) BatchCreateSum(ctx context.Context, req *dto.BatchCreateCidAccountReportSumReq) (res *dto.BatchCreateCidAccountReportSumRes, err error) {
|
||||||
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
|
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
|
||||||
// 验证数据
|
// 验证数据
|
||||||
|
|||||||
97
service/copydata/campaign_report_service.go
Normal file
97
service/copydata/campaign_report_service.go
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
package copydata
|
||||||
|
|
||||||
|
import (
|
||||||
|
dao "cid/dao/copydata"
|
||||||
|
dto "cid/model/dto/copydata"
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"gitea.com/red-future/common/beans"
|
||||||
|
)
|
||||||
|
|
||||||
|
type campaignReportSumService struct{}
|
||||||
|
|
||||||
|
// CampaignReportSum 广告计划效果指标表服务
|
||||||
|
var CampaignReportSum = new(campaignReportSumService)
|
||||||
|
|
||||||
|
// Create 创建广告计划效果指标表
|
||||||
|
func (s *campaignReportSumService) Create(ctx context.Context, req *dto.CampaignReportSumItem) (res *dto.CreateCampaignReportSumRes, err error) {
|
||||||
|
// 验证必要字段
|
||||||
|
if req.ReportDateStr == "" {
|
||||||
|
return nil, errors.New("报告日期不能为空")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入数据库
|
||||||
|
id, err := dao.CampaignReportSum.Insert(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
res = &dto.CreateCampaignReportSumRes{
|
||||||
|
Id: id,
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// BatchCreate 批量创建广告计划效果指标表
|
||||||
|
func (s *campaignReportSumService) BatchCreate(ctx context.Context, req *dto.BatchCreateCampaignReportSumReq) (res *dto.BatchCreateCampaignReportSumRes, err error) {
|
||||||
|
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
|
||||||
|
// 验证数据
|
||||||
|
if len(req.Items) == 0 {
|
||||||
|
return nil, errors.New("批量创建数据不能为空")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量插入数据库
|
||||||
|
successCount, failCount, failedIndexes, err := dao.CampaignReportSum.BatchInsert(ctx, req.Items)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
res = &dto.BatchCreateCampaignReportSumRes{
|
||||||
|
SuccessCount: successCount,
|
||||||
|
FailCount: failCount,
|
||||||
|
FailedItems: failedIndexes,
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateDetail 创建广告效果指标表
|
||||||
|
func (s *campaignReportSumService) CreateDetail(ctx context.Context, req *dto.CampaignReportDetailItem) (res *dto.CreateCampaignReportDetailRes, err error) {
|
||||||
|
// 验证必要字段
|
||||||
|
if req.ReportDateStr == "" {
|
||||||
|
return nil, errors.New("报告日期不能为空")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入数据库
|
||||||
|
id, err := dao.CampaignReportDetail.Insert(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
res = &dto.CreateCampaignReportDetailRes{
|
||||||
|
Id: id,
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// BatchCreateDetail 批量创建广告效果指标表
|
||||||
|
func (s *campaignReportSumService) BatchCreateDetail(ctx context.Context, req *dto.BatchCreateCampaignReportDetailReq) (res *dto.BatchCreateCampaignReportDetailRes, err error) {
|
||||||
|
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
|
||||||
|
// 验证数据
|
||||||
|
if len(req.Items) == 0 {
|
||||||
|
return nil, errors.New("批量创建数据不能为空")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量插入数据库
|
||||||
|
successCount, failCount, failedIndexes, err := dao.CampaignReportDetail.BatchInsert(ctx, req.Items)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
res = &dto.BatchCreateCampaignReportDetailRes{
|
||||||
|
SuccessCount: successCount,
|
||||||
|
FailCount: failCount,
|
||||||
|
FailedItems: failedIndexes,
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
79
sync/base_report_sync.go
Normal file
79
sync/base_report_sync.go
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
package sync
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ReportSyncable interface {
|
||||||
|
FetchReport(ctx context.Context, params interface{}) (interface{}, error)
|
||||||
|
ConvertToSum(apiData interface{}, dataType string) interface{}
|
||||||
|
ConvertToDetails(apiData interface{}, dataType string) []interface{}
|
||||||
|
SaveSum(ctx context.Context, data interface{}) (int64, error)
|
||||||
|
SaveDetails(ctx context.Context, data []interface{}) (successCount, failCount int64, err error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type BaseReportSync struct {
|
||||||
|
httpClient *HttpClient
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewBaseReportSync() *BaseReportSync {
|
||||||
|
return &BaseReportSync{
|
||||||
|
httpClient: NewHttpClient("", 0),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BaseReportSync) FetchReport(ctx context.Context, params interface{}) (interface{}, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BaseReportSync) ConvertToSum(apiData interface{}, dataType string) interface{} {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BaseReportSync) ConvertToDetails(apiData interface{}, dataType string) []interface{} {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BaseReportSync) SaveSum(ctx context.Context, data interface{}) (int64, error) {
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BaseReportSync) SaveDetails(ctx context.Context, data []interface{}) (int64, int64, error) {
|
||||||
|
return 0, 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BaseReportSync) ExecuteSync(ctx context.Context, syncer ReportSyncable, params interface{}, dataType string, useMock bool) (*SyncResult, error) {
|
||||||
|
result := &SyncResult{}
|
||||||
|
|
||||||
|
apiData, err := syncer.FetchReport(ctx, params)
|
||||||
|
if err != nil {
|
||||||
|
result.Error = err
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
|
||||||
|
sumData := syncer.ConvertToSum(apiData, dataType)
|
||||||
|
if sumData != nil {
|
||||||
|
sumID, err := syncer.SaveSum(ctx, sumData)
|
||||||
|
if err != nil {
|
||||||
|
result.Error = err
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
result.SumSuccess = true
|
||||||
|
result.SumID = sumID
|
||||||
|
}
|
||||||
|
|
||||||
|
detailData := syncer.ConvertToDetails(apiData, dataType)
|
||||||
|
if len(detailData) > 0 {
|
||||||
|
successCount, failCount, err := syncer.SaveDetails(ctx, detailData)
|
||||||
|
if err != nil {
|
||||||
|
result.Error = err
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
result.DetailSuccess = true
|
||||||
|
result.DetailCount = len(detailData)
|
||||||
|
result.DetailSuccessCount = successCount
|
||||||
|
result.DetailFailCount = failCount
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
115
sync/campaign_report_sync.go
Normal file
115
sync/campaign_report_sync.go
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
package sync
|
||||||
|
|
||||||
|
import (
|
||||||
|
dto "cid/model/dto/copydata"
|
||||||
|
"cid/service/copydata"
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CampaignReportSync struct {
|
||||||
|
*BaseReportSync
|
||||||
|
converter *DataConverter
|
||||||
|
mockGen *MockDataGenerator
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewCampaignReportSync() *CampaignReportSync {
|
||||||
|
return &CampaignReportSync{
|
||||||
|
BaseReportSync: NewBaseReportSync(),
|
||||||
|
converter: NewDataConverter(),
|
||||||
|
mockGen: NewMockDataGenerator(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CampaignReportSync) FetchReport(ctx context.Context, params interface{}) (interface{}, error) {
|
||||||
|
req, ok := params.(*CampaignReportRequest)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("参数类型错误,期望 CampaignReportRequest 类型")
|
||||||
|
}
|
||||||
|
|
||||||
|
useMock := false
|
||||||
|
|
||||||
|
if useMock {
|
||||||
|
logrus.Info("使用 Mock 数据")
|
||||||
|
return c.mockGen.GenerateCampaignReportResponse(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
respBytes, err := NewHttpClient("https://ad.e.kuaishou.com", 0).Post(ctx, "/rest/openapi/gw/esp/report/campaignReport", req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("调用 API 失败:%w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var response CampaignReportResponse
|
||||||
|
if err := json.Unmarshal(respBytes, &response); err != nil {
|
||||||
|
return nil, fmt.Errorf("解析响应失败:%w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if response.Code != 0 {
|
||||||
|
return nil, fmt.Errorf("API 返回错误:code=%d, message=%s", response.Code, response.Message)
|
||||||
|
}
|
||||||
|
|
||||||
|
return &response, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CampaignReportSync) ConvertToSum(apiData interface{}, dataType string) interface{} {
|
||||||
|
response, ok := apiData.(*CampaignReportResponse)
|
||||||
|
if !ok || response.Data == nil || response.Data.Sum == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.converter.ConvertToSumItem(response.Data.Sum, dataType)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CampaignReportSync) ConvertToDetails(apiData interface{}, dataType string) []interface{} {
|
||||||
|
response, ok := apiData.(*CampaignReportResponse)
|
||||||
|
if !ok || response.Data == nil || len(response.Data.Detail) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
detailItems := c.converter.ConvertToDetailItems(response.Data.Detail, dataType)
|
||||||
|
|
||||||
|
result := make([]interface{}, len(detailItems))
|
||||||
|
for i, item := range detailItems {
|
||||||
|
result[i] = item
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CampaignReportSync) SaveSum(ctx context.Context, data interface{}) (int64, error) {
|
||||||
|
sumItem, ok := data.(*dto.CidAccountReportSumItem)
|
||||||
|
if !ok {
|
||||||
|
return 0, fmt.Errorf("数据类型错误,期望 CidAccountReportSumItem 类型")
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := copydata.CidAccountReportDetail.CreateSum(ctx, sumItem)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.Id, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CampaignReportSync) SaveDetails(ctx context.Context, data []interface{}) (int64, int64, error) {
|
||||||
|
detailItems := make([]*dto.CidAccountReportDetailItem, len(data))
|
||||||
|
for i, item := range data {
|
||||||
|
detailItem, ok := item.(*dto.CidAccountReportDetailItem)
|
||||||
|
if !ok {
|
||||||
|
return 0, 0, fmt.Errorf("第 %d 条数据类型错误", i)
|
||||||
|
}
|
||||||
|
detailItems[i] = detailItem
|
||||||
|
}
|
||||||
|
|
||||||
|
req := &dto.BatchCreateCidAccountReportDetailReq{
|
||||||
|
Items: detailItems,
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := copydata.CidAccountReportDetail.BatchCreate(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return 0, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.SuccessCount, res.FailCount, nil
|
||||||
|
}
|
||||||
235
sync/campaign_report_types.go
Normal file
235
sync/campaign_report_types.go
Normal file
@@ -0,0 +1,235 @@
|
|||||||
|
package sync
|
||||||
|
|
||||||
|
type CampaignReportRequest struct {
|
||||||
|
AdvertiserID int64 `json:"advertiser_id"`
|
||||||
|
StartTime int64 `json:"start_time"`
|
||||||
|
EndTime int64 `json:"end_time"`
|
||||||
|
SelectColumns []string `json:"select_columns"`
|
||||||
|
GroupType int `json:"group_type"`
|
||||||
|
QueryVersion int `json:"query_version"`
|
||||||
|
SelectParam *CampaignSelectParam `json:"select_param,omitempty"`
|
||||||
|
PageInfo *PageInfo `json:"page_info,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CampaignSelectParam struct {
|
||||||
|
CampaignIDs []int64 `json:"campaign_ids,omitempty"`
|
||||||
|
AuthorID int64 `json:"author_id,omitempty"`
|
||||||
|
AdTypeStr string `json:"ad_type_str,omitempty"`
|
||||||
|
MarketingObjective int `json:"marketing_objective,omitempty"`
|
||||||
|
DeliveryScenario int `json:"delivery_scenario,omitempty"`
|
||||||
|
DeliveryMethod int `json:"delivery_method,omitempty"`
|
||||||
|
SupportType string `json:"support_type,omitempty"`
|
||||||
|
OcpcActionType string `json:"ocpc_action_type,omitempty"`
|
||||||
|
SpeedType string `json:"speed_type,omitempty"`
|
||||||
|
ItemType string `json:"item_type,omitempty"`
|
||||||
|
CreativeBuildType string `json:"creative_build_type,omitempty"`
|
||||||
|
AdScene string `json:"ad_scene,omitempty"`
|
||||||
|
IncrementExploreType []int `json:"increment_explore_type,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type PageInfo struct {
|
||||||
|
CurrentPage int `json:"current_page"`
|
||||||
|
PageSize int `json:"page_size"`
|
||||||
|
TotalCount int `json:"total_count"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CampaignReportResponse struct {
|
||||||
|
Code int `json:"code"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
Data *CampaignReportData `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CampaignReportData struct {
|
||||||
|
Sum *CampaignReportSum `json:"sum"`
|
||||||
|
Detail []*CampaignReportItem `json:"detail"`
|
||||||
|
TotalCount int `json:"total_count"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CampaignReportSum struct {
|
||||||
|
T0OrderPaymentAmt string `json:"t0_order_payment_amt"`
|
||||||
|
CreativeMaterialType string `json:"creative_material_type"`
|
||||||
|
LiveName string `json:"live_name"`
|
||||||
|
AuthorId string `json:"author_id"`
|
||||||
|
PicUrl string `json:"pic_url"`
|
||||||
|
PicName string `json:"pic_name"`
|
||||||
|
PicId string `json:"pic_id"`
|
||||||
|
CoverUrl string `json:"cover_url"`
|
||||||
|
CoverId int64 `json:"cover_id"`
|
||||||
|
ItemOrderConversionRatio *float64 `json:"item_order_conversion_ratio"`
|
||||||
|
ItemCardClickRatio *float64 `json:"item_card_click_ratio"`
|
||||||
|
ItemCardClkCnt *int64 `json:"item_card_clk_cnt"`
|
||||||
|
LivePlayCntCost *float64 `json:"live_play_cnt_cost"`
|
||||||
|
AdMerchantFollowCost *float64 `json:"ad_merchant_follow_cost"`
|
||||||
|
AdMerchantFollow *int64 `json:"ad_merchant_follow"`
|
||||||
|
NetT0OrderCnt *int64 `json:"net_t0_order_cnt"`
|
||||||
|
NetT0Roi *float64 `json:"net_t0_roi"`
|
||||||
|
NetT0Gmv *float64 `json:"net_t0_gmv"`
|
||||||
|
PhotoName string `json:"photo_name"`
|
||||||
|
PhotoIdStr string `json:"photo_id_str"`
|
||||||
|
PhotoId string `json:"photo_id"`
|
||||||
|
ModPriceSegment string `json:"mod_price_segment"`
|
||||||
|
AgeSegment string `json:"age_segment"`
|
||||||
|
Province string `json:"province"`
|
||||||
|
Gender string `json:"gender"`
|
||||||
|
AdPhotoPlayedFiveRatio *float64 `json:"ad_photo_played_five_ratio"`
|
||||||
|
AdPhotoPlayedThreeRatio *float64 `json:"ad_photo_played_three_ratio"`
|
||||||
|
OrderSubmitRoi *float64 `json:"order_submit_roi"`
|
||||||
|
OrderSubmitAmt *int64 `json:"order_submit_amt"`
|
||||||
|
EventOrderSubmitCost *float64 `json:"event_order_submit_cost"`
|
||||||
|
EventOrderSubmit *int64 `json:"event_order_submit"`
|
||||||
|
EventOrderPaidRoi *float64 `json:"event_order_paid_roi"`
|
||||||
|
EventAppInvoked *int64 `json:"event_app_invoked"`
|
||||||
|
EventAddShoppingCart *int64 `json:"event_add_shopping_cart"`
|
||||||
|
ConversionNumCost *float64 `json:"conversion_num_cost"`
|
||||||
|
AdEffectivePlayNum *int64 `json:"ad_effective_play_num"`
|
||||||
|
AdItemClick *int64 `json:"ad_item_click"`
|
||||||
|
MerchantProductId string `json:"merchant_product_id"`
|
||||||
|
CostTotal *float64 `json:"cost_total"`
|
||||||
|
AdShow *int64 `json:"ad_show"`
|
||||||
|
AdShow1kCost *float64 `json:"ad_show1k_cost"`
|
||||||
|
Impression *int64 `json:"impression"`
|
||||||
|
PhotoClick *int64 `json:"photo_click"`
|
||||||
|
PhotoClickRatio *float64 `json:"photo_click_ratio"`
|
||||||
|
Click *int64 `json:"click"`
|
||||||
|
ActionbarClick *int64 `json:"actionbar_click"`
|
||||||
|
ActionbarClickCost *float64 `json:"actionbar_click_cost"`
|
||||||
|
EspClickRatio *float64 `json:"esp_click_ratio"`
|
||||||
|
ActionRatio *float64 `json:"action_ratio"`
|
||||||
|
AdItemClickCount *int64 `json:"ad_item_click_count"`
|
||||||
|
EspLivePlayedSeconds *int64 `json:"esp_live_played_seconds"`
|
||||||
|
PlayedThreeSeconds *int64 `json:"played_three_seconds"`
|
||||||
|
Play3sRatio *float64 `json:"play3s_ratio"`
|
||||||
|
PlayedFiveSeconds *int64 `json:"played_five_seconds"`
|
||||||
|
Play5sRatio *float64 `json:"play5s_ratio"`
|
||||||
|
PlayedEnd *int64 `json:"played_end"`
|
||||||
|
PlayEndRatio *float64 `json:"play_end_ratio"`
|
||||||
|
Share *int64 `json:"share"`
|
||||||
|
Comment *int64 `json:"comment"`
|
||||||
|
Likes *int64 `json:"likes"`
|
||||||
|
Report *int64 `json:"report"`
|
||||||
|
Block *int64 `json:"block"`
|
||||||
|
ItemNegative *int64 `json:"item_negative"`
|
||||||
|
LiveShare *int64 `json:"live_share"`
|
||||||
|
LiveComment *int64 `json:"live_comment"`
|
||||||
|
LiveReward *int64 `json:"live_reward"`
|
||||||
|
EffectivePlayCount *int64 `json:"effective_play_count"`
|
||||||
|
EffectivePlayRatio *float64 `json:"effective_play_ratio"`
|
||||||
|
ConversionNum *int64 `json:"conversion_num"`
|
||||||
|
ConversionCostEsp *float64 `json:"conversion_cost_esp"`
|
||||||
|
Roi *float64 `json:"roi"`
|
||||||
|
Gmv *float64 `json:"gmv"`
|
||||||
|
T0Gmv *float64 `json:"t0_gmv"`
|
||||||
|
T1Gmv *float64 `json:"t1_gmv"`
|
||||||
|
T7Gmv *float64 `json:"t7_gmv"`
|
||||||
|
T15Gmv *float64 `json:"t15_gmv"`
|
||||||
|
T30Gmv *float64 `json:"t30_gmv"`
|
||||||
|
T0Roi *float64 `json:"t0_roi"`
|
||||||
|
T1Roi *float64 `json:"t1_roi"`
|
||||||
|
T7Roi *float64 `json:"t7_roi"`
|
||||||
|
T15Roi *float64 `json:"t15_roi"`
|
||||||
|
T30Roi *float64 `json:"t30_roi"`
|
||||||
|
PaiedOrder *int64 `json:"paied_order"`
|
||||||
|
OrderRatio *float64 `json:"order_ratio"`
|
||||||
|
T0OrderCnt *int64 `json:"t0_order_cnt"`
|
||||||
|
T0OrderCntCost *float64 `json:"t0_order_cnt_cost"`
|
||||||
|
T0OrderCntRatio *float64 `json:"t0_order_cnt_ratio"`
|
||||||
|
T1OrderCnt *int64 `json:"t1_order_cnt"`
|
||||||
|
T3OrderCnt *int64 `json:"t3_order_cnt"`
|
||||||
|
T7OrderCnt *int64 `json:"t7_order_cnt"`
|
||||||
|
T15OrderCnt *int64 `json:"t15_order_cnt"`
|
||||||
|
T30OrderCnt *int64 `json:"t30_order_cnt"`
|
||||||
|
MerchantRecoFans *int64 `json:"merchant_reco_fans"`
|
||||||
|
T1Retention *float64 `json:"t1_retention"`
|
||||||
|
T7Retention *float64 `json:"t7_retention"`
|
||||||
|
T15Retention *float64 `json:"t15_retention"`
|
||||||
|
T30Retention *float64 `json:"t30_retention"`
|
||||||
|
T1RetentionRatio *float64 `json:"t1_retention_ratio"`
|
||||||
|
T7RetentionRatio *float64 `json:"t7_retention_ratio"`
|
||||||
|
T15RetentionRatio *float64 `json:"t15_retention_ratio"`
|
||||||
|
T30RetentionRatio *float64 `json:"t30_retention_ratio"`
|
||||||
|
ReservationSuccess *int64 `json:"reservation_success"`
|
||||||
|
ReservationCost *float64 `json:"reservation_cost"`
|
||||||
|
StandardLivePlayedStarted *int64 `json:"standard_live_played_started"`
|
||||||
|
AdLivePlayCnt *int64 `json:"ad_live_play_cnt"`
|
||||||
|
AdLivePlayCntCost *float64 `json:"ad_live_play_cnt_cost"`
|
||||||
|
LiveAudienceCost *float64 `json:"live_audience_cost"`
|
||||||
|
LiveEventGoodsView *int64 `json:"live_event_goods_view"`
|
||||||
|
GoodsClickRatio *float64 `json:"goods_click_ratio"`
|
||||||
|
DirectAttrPlatNewBuyerCnt *int64 `json:"direct_attr_plat_new_buyer_cnt"`
|
||||||
|
T30AttrPlatTotalBuyerCnt *int64 `json:"t30_attr_plat_total_buyer_cnt"`
|
||||||
|
DirectAttrSellerNewBuyerCnt *int64 `json:"direct_attr_seller_new_buyer_cnt"`
|
||||||
|
T30AttrSellerTotalBuyerCnt *int64 `json:"t30_attr_seller_total_buyer_cnt"`
|
||||||
|
T3Gmv *float64 `json:"t3_gmv"`
|
||||||
|
T3Roi *float64 `json:"t3_roi"`
|
||||||
|
T7IndirectOrderAmt *float64 `json:"t7_indirect_order_amt"`
|
||||||
|
T7IndirectOrderCnt *int64 `json:"t7_indirect_order_cnt"`
|
||||||
|
FansT0GmvPerFans *float64 `json:"fans_t0_gmv_per_fans"`
|
||||||
|
FansT3GmvPerFans *float64 `json:"fans_t3_gmv_per_fans"`
|
||||||
|
FansT7GmvPerFans *float64 `json:"fans_t7_gmv_per_fans"`
|
||||||
|
FansT15GmvPerFans *float64 `json:"fans_t15_gmv_per_fans"`
|
||||||
|
FansT30GmvPerFans *float64 `json:"fans_t30_gmv_per_fans"`
|
||||||
|
RecoFansCost *float64 `json:"reco_fans_cost"`
|
||||||
|
QcpxWhiteboxDirectOrderPaymentAmt *float64 `json:"qcpx_whitebox_direct_order_payment_amt"`
|
||||||
|
QcpxWhiteboxDirectOrderCnt *int64 `json:"qcpx_whitebox_direct_order_cnt"`
|
||||||
|
FansT0Gmv *float64 `json:"fans_t0_gmv"`
|
||||||
|
FansT1Gmv *float64 `json:"fans_t1_gmv"`
|
||||||
|
FansT7Gmv *float64 `json:"fans_t7_gmv"`
|
||||||
|
FansT15Gmv *float64 `json:"fans_t15_gmv"`
|
||||||
|
FansT30Gmv *float64 `json:"fans_t30_gmv"`
|
||||||
|
FansT0Roi *float64 `json:"fans_t0_roi"`
|
||||||
|
FansT1Roi *float64 `json:"fans_t1_roi"`
|
||||||
|
FansT7Roi *float64 `json:"fans_t7_roi"`
|
||||||
|
FansT15Roi *float64 `json:"fans_t15_roi"`
|
||||||
|
FansT30Roi *float64 `json:"fans_t30_roi"`
|
||||||
|
T0ShopNewBuyerOrderPaymentAmt *float64 `json:"t0_shop_new_buyer_order_payment_amt"`
|
||||||
|
T1ShopNewBuyerOrderPaymentAmt *float64 `json:"t1_shop_new_buyer_order_payment_amt"`
|
||||||
|
T3ShopNewBuyerOrderPaymentAmt *float64 `json:"t3_shop_new_buyer_order_payment_amt"`
|
||||||
|
T7ShopNewBuyerOrderPaymentAmt *float64 `json:"t7_shop_new_buyer_order_payment_amt"`
|
||||||
|
T15ShopNewBuyerOrderPaymentAmt *float64 `json:"t15_shop_new_buyer_order_payment_amt"`
|
||||||
|
T30ShopNewBuyerOrderPaymentAmt *float64 `json:"t30_shop_new_buyer_order_payment_amt"`
|
||||||
|
T0ShopNewBuyerOrderCnt *int64 `json:"t0_shop_new_buyer_order_cnt"`
|
||||||
|
T1ShopNewBuyerOrderCnt *int64 `json:"t1_shop_new_buyer_order_cnt"`
|
||||||
|
T3ShopNewBuyerOrderCnt *int64 `json:"t3_shop_new_buyer_order_cnt"`
|
||||||
|
T7ShopNewBuyerOrderCnt *int64 `json:"t7_shop_new_buyer_order_cnt"`
|
||||||
|
T15ShopNewBuyerOrderCnt *int64 `json:"t15_shop_new_buyer_order_cnt"`
|
||||||
|
T30ShopNewBuyerOrderCnt *int64 `json:"t30_shop_new_buyer_order_cnt"`
|
||||||
|
T1NewBuyerRepurchaseRatio *float64 `json:"t1_new_buyer_repurchase_ratio"`
|
||||||
|
T3NewBuyerRepurchaseRatio *float64 `json:"t3_new_buyer_repurchase_ratio"`
|
||||||
|
T7NewBuyerRepurchaseRatio *float64 `json:"t7_new_buyer_repurchase_ratio"`
|
||||||
|
T15NewBuyerRepurchaseRatio *float64 `json:"t15_new_buyer_repurchase_ratio"`
|
||||||
|
T30NewBuyerRepurchaseRatio *float64 `json:"t30_new_buyer_repurchase_ratio"`
|
||||||
|
T0ShopNewBuyerRoi *float64 `json:"t0_shop_new_buyer_roi"`
|
||||||
|
T1ShopNewBuyerRoi *float64 `json:"t1_shop_new_buyer_roi"`
|
||||||
|
T3ShopNewBuyerRoi *float64 `json:"t3_shop_new_buyer_roi"`
|
||||||
|
T7ShopNewBuyerRoi *float64 `json:"t7_shop_new_buyer_roi"`
|
||||||
|
T15ShopNewBuyerRoi *float64 `json:"t15_shop_new_buyer_roi"`
|
||||||
|
T30ShopNewBuyerRoi *float64 `json:"t30_shop_new_buyer_roi"`
|
||||||
|
CreateCardOrderCnt *int64 `json:"create_card_order_cnt"`
|
||||||
|
ForwardTsCreateCardOrderCnt *int64 `json:"forward_ts_create_card_order_cnt"`
|
||||||
|
CreateCardOrderCost *float64 `json:"create_card_order_cost"`
|
||||||
|
ForwardTsCreateCardOrderCost *float64 `json:"forward_ts_create_card_order_cost"`
|
||||||
|
ActivateCardOrderCnt *int64 `json:"activate_card_order_cnt"`
|
||||||
|
ForwardTsActivateCardOrderCnt *int64 `json:"forward_ts_activate_card_order_cnt"`
|
||||||
|
ActivateCardOrderCost *float64 `json:"activate_card_order_cost"`
|
||||||
|
ForwardTsActivateCardOrderCost *float64 `json:"forward_ts_activate_card_order_cost"`
|
||||||
|
CreateCardOrderRatio *float64 `json:"create_card_order_ratio"`
|
||||||
|
ForwardTsCreateCardOrderRatio *float64 `json:"forward_ts_create_card_order_ratio"`
|
||||||
|
ActivateCardOrderCntRatio *float64 `json:"activate_card_order_cnt_ratio"`
|
||||||
|
ForwardTsActivateCardOrderRatio *float64 `json:"forward_ts_activate_card_order_ratio"`
|
||||||
|
LivePlayCnt *int64 `json:"live_play_cnt"`
|
||||||
|
ItemEntranceClkCnt *int64 `json:"item_entrance_clk_cnt"`
|
||||||
|
ShowCnt *int64 `json:"show_cnt"`
|
||||||
|
ReportDateStr string `json:"report_date_str"`
|
||||||
|
CampaignId *int64 `json:"campaign_id"`
|
||||||
|
CampaignName string `json:"campaign_name"`
|
||||||
|
UnitId *int64 `json:"unit_id"`
|
||||||
|
UnitName string `json:"unit_name"`
|
||||||
|
CreativeId *int64 `json:"creative_id"`
|
||||||
|
CreativeName string `json:"creative_name"`
|
||||||
|
CidActualRoiAfterSubsidy *float64 `json:"cid_actual_roi_after_subsidy"`
|
||||||
|
CidCouponAmount *int64 `json:"cid_coupon_amount"`
|
||||||
|
CidCouponCallbackPaidRefundAmount *int64 `json:"cid_coupon_callback_paid_refund_amount"`
|
||||||
|
CidVoucherCost *float64 `json:"cid_voucher_cost"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CampaignReportItem CampaignReportSum
|
||||||
415
sync/data_converter.go
Normal file
415
sync/data_converter.go
Normal file
@@ -0,0 +1,415 @@
|
|||||||
|
package sync
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cid/model/dto/copydata"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DataConverter struct{}
|
||||||
|
|
||||||
|
func NewDataConverter() *DataConverter {
|
||||||
|
return &DataConverter{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *DataConverter) ConvertToSumItem(apiData *CampaignReportSum, dataType string) *copydata.CidAccountReportSumItem {
|
||||||
|
if apiData == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return ©data.CidAccountReportSumItem{
|
||||||
|
DataType: dataType,
|
||||||
|
T0OrderPaymentAmt: apiData.T0OrderPaymentAmt,
|
||||||
|
CreativeMaterialType: apiData.CreativeMaterialType,
|
||||||
|
LiveName: apiData.LiveName,
|
||||||
|
AuthorId: apiData.AuthorId,
|
||||||
|
PicUrl: apiData.PicUrl,
|
||||||
|
PicName: apiData.PicName,
|
||||||
|
PicId: apiData.PicId,
|
||||||
|
CoverUrl: apiData.CoverUrl,
|
||||||
|
CoverId: apiData.CoverId,
|
||||||
|
ItemOrderConversionRatio: apiData.ItemOrderConversionRatio,
|
||||||
|
ItemCardClickRatio: apiData.ItemCardClickRatio,
|
||||||
|
ItemCardClkCnt: apiData.ItemCardClkCnt,
|
||||||
|
LivePlayCntCost: apiData.LivePlayCntCost,
|
||||||
|
AdMerchantFollowCost: apiData.AdMerchantFollowCost,
|
||||||
|
AdMerchantFollow: apiData.AdMerchantFollow,
|
||||||
|
NetT0OrderCnt: apiData.NetT0OrderCnt,
|
||||||
|
NetT0Roi: apiData.NetT0Roi,
|
||||||
|
NetT0Gmv: apiData.NetT0Gmv,
|
||||||
|
PhotoName: apiData.PhotoName,
|
||||||
|
PhotoIdStr: apiData.PhotoIdStr,
|
||||||
|
PhotoId: apiData.PhotoId,
|
||||||
|
ModPriceSegment: apiData.ModPriceSegment,
|
||||||
|
AgeSegment: apiData.AgeSegment,
|
||||||
|
Province: apiData.Province,
|
||||||
|
Gender: apiData.Gender,
|
||||||
|
AdPhotoPlayedFiveRatio: apiData.AdPhotoPlayedFiveRatio,
|
||||||
|
AdPhotoPlayedThreeRatio: apiData.AdPhotoPlayedThreeRatio,
|
||||||
|
OrderSubmitRoi: apiData.OrderSubmitRoi,
|
||||||
|
OrderSubmitAmt: apiData.OrderSubmitAmt,
|
||||||
|
EventOrderSubmitCost: apiData.EventOrderSubmitCost,
|
||||||
|
EventOrderSubmit: apiData.EventOrderSubmit,
|
||||||
|
EventOrderPaidRoi: apiData.EventOrderPaidRoi,
|
||||||
|
EventAppInvoked: apiData.EventAppInvoked,
|
||||||
|
EventAddShoppingCart: apiData.EventAddShoppingCart,
|
||||||
|
ConversionNumCost: apiData.ConversionNumCost,
|
||||||
|
AdEffectivePlayNum: apiData.AdEffectivePlayNum,
|
||||||
|
AdItemClick: apiData.AdItemClick,
|
||||||
|
MerchantProductId: apiData.MerchantProductId,
|
||||||
|
CostTotal: apiData.CostTotal,
|
||||||
|
AdShow: apiData.AdShow,
|
||||||
|
AdShow1kCost: apiData.AdShow1kCost,
|
||||||
|
Impression: apiData.Impression,
|
||||||
|
PhotoClick: apiData.PhotoClick,
|
||||||
|
PhotoClickRatio: apiData.PhotoClickRatio,
|
||||||
|
Click: apiData.Click,
|
||||||
|
ActionbarClick: apiData.ActionbarClick,
|
||||||
|
ActionbarClickCost: apiData.ActionbarClickCost,
|
||||||
|
EspClickRatio: apiData.EspClickRatio,
|
||||||
|
ActionRatio: apiData.ActionRatio,
|
||||||
|
AdItemClickCount: apiData.AdItemClickCount,
|
||||||
|
EspLivePlayedSeconds: apiData.EspLivePlayedSeconds,
|
||||||
|
PlayedThreeSeconds: apiData.PlayedThreeSeconds,
|
||||||
|
Play3sRatio: apiData.Play3sRatio,
|
||||||
|
PlayedFiveSeconds: apiData.PlayedFiveSeconds,
|
||||||
|
Play5sRatio: apiData.Play5sRatio,
|
||||||
|
PlayedEnd: apiData.PlayedEnd,
|
||||||
|
PlayEndRatio: apiData.PlayEndRatio,
|
||||||
|
Share: apiData.Share,
|
||||||
|
Comment: apiData.Comment,
|
||||||
|
Likes: apiData.Likes,
|
||||||
|
Report: apiData.Report,
|
||||||
|
Block: apiData.Block,
|
||||||
|
ItemNegative: apiData.ItemNegative,
|
||||||
|
LiveShare: apiData.LiveShare,
|
||||||
|
LiveComment: apiData.LiveComment,
|
||||||
|
LiveReward: apiData.LiveReward,
|
||||||
|
EffectivePlayCount: apiData.EffectivePlayCount,
|
||||||
|
EffectivePlayRatio: apiData.EffectivePlayRatio,
|
||||||
|
ConversionNum: apiData.ConversionNum,
|
||||||
|
ConversionCostEsp: apiData.ConversionCostEsp,
|
||||||
|
Roi: apiData.Roi,
|
||||||
|
Gmv: apiData.Gmv,
|
||||||
|
T0Gmv: apiData.T0Gmv,
|
||||||
|
T1Gmv: apiData.T1Gmv,
|
||||||
|
T3Gmv: apiData.T3Gmv,
|
||||||
|
T7Gmv: apiData.T7Gmv,
|
||||||
|
T15Gmv: apiData.T15Gmv,
|
||||||
|
T30Gmv: apiData.T30Gmv,
|
||||||
|
T0Roi: apiData.T0Roi,
|
||||||
|
T1Roi: apiData.T1Roi,
|
||||||
|
T3Roi: apiData.T3Roi,
|
||||||
|
T7Roi: apiData.T7Roi,
|
||||||
|
T15Roi: apiData.T15Roi,
|
||||||
|
T30Roi: apiData.T30Roi,
|
||||||
|
PaiedOrder: apiData.PaiedOrder,
|
||||||
|
OrderRatio: apiData.OrderRatio,
|
||||||
|
T0OrderCnt: apiData.T0OrderCnt,
|
||||||
|
T0OrderCntCost: apiData.T0OrderCntCost,
|
||||||
|
T0OrderCntRatio: apiData.T0OrderCntRatio,
|
||||||
|
T1OrderCnt: apiData.T1OrderCnt,
|
||||||
|
T3OrderCnt: apiData.T3OrderCnt,
|
||||||
|
T7OrderCnt: apiData.T7OrderCnt,
|
||||||
|
T15OrderCnt: apiData.T15OrderCnt,
|
||||||
|
T30OrderCnt: apiData.T30OrderCnt,
|
||||||
|
MerchantRecoFans: apiData.MerchantRecoFans,
|
||||||
|
T1Retention: apiData.T1Retention,
|
||||||
|
T7Retention: apiData.T7Retention,
|
||||||
|
T15Retention: apiData.T15Retention,
|
||||||
|
T30Retention: apiData.T30Retention,
|
||||||
|
T1RetentionRatio: apiData.T1RetentionRatio,
|
||||||
|
T7RetentionRatio: apiData.T7RetentionRatio,
|
||||||
|
T15RetentionRatio: apiData.T15RetentionRatio,
|
||||||
|
T30RetentionRatio: apiData.T30RetentionRatio,
|
||||||
|
ReservationSuccess: apiData.ReservationSuccess,
|
||||||
|
ReservationCost: apiData.ReservationCost,
|
||||||
|
StandardLivePlayedStarted: apiData.StandardLivePlayedStarted,
|
||||||
|
AdLivePlayCnt: apiData.AdLivePlayCnt,
|
||||||
|
AdLivePlayCntCost: apiData.AdLivePlayCntCost,
|
||||||
|
LiveAudienceCost: apiData.LiveAudienceCost,
|
||||||
|
LiveEventGoodsView: apiData.LiveEventGoodsView,
|
||||||
|
GoodsClickRatio: apiData.GoodsClickRatio,
|
||||||
|
DirectAttrPlatNewBuyerCnt: apiData.DirectAttrPlatNewBuyerCnt,
|
||||||
|
T30AttrPlatTotalBuyerCnt: apiData.T30AttrPlatTotalBuyerCnt,
|
||||||
|
DirectAttrSellerNewBuyerCnt: apiData.DirectAttrSellerNewBuyerCnt,
|
||||||
|
T30AttrSellerTotalBuyerCnt: apiData.T30AttrSellerTotalBuyerCnt,
|
||||||
|
T7IndirectOrderAmt: apiData.T7IndirectOrderAmt,
|
||||||
|
T7IndirectOrderCnt: apiData.T7IndirectOrderCnt,
|
||||||
|
FansT0GmvPerFans: apiData.FansT0GmvPerFans,
|
||||||
|
FansT3GmvPerFans: apiData.FansT3GmvPerFans,
|
||||||
|
FansT7GmvPerFans: apiData.FansT7GmvPerFans,
|
||||||
|
FansT15GmvPerFans: apiData.FansT15GmvPerFans,
|
||||||
|
FansT30GmvPerFans: apiData.FansT30GmvPerFans,
|
||||||
|
RecoFansCost: apiData.RecoFansCost,
|
||||||
|
QcpxWhiteboxDirectOrderPaymentAmt: apiData.QcpxWhiteboxDirectOrderPaymentAmt,
|
||||||
|
QcpxWhiteboxDirectOrderCnt: apiData.QcpxWhiteboxDirectOrderCnt,
|
||||||
|
FansT0Gmv: apiData.FansT0Gmv,
|
||||||
|
FansT1Gmv: apiData.FansT1Gmv,
|
||||||
|
FansT7Gmv: apiData.FansT7Gmv,
|
||||||
|
FansT15Gmv: apiData.FansT15Gmv,
|
||||||
|
FansT30Gmv: apiData.FansT30Gmv,
|
||||||
|
FansT0Roi: apiData.FansT0Roi,
|
||||||
|
FansT1Roi: apiData.FansT1Roi,
|
||||||
|
FansT7Roi: apiData.FansT7Roi,
|
||||||
|
FansT15Roi: apiData.FansT15Roi,
|
||||||
|
FansT30Roi: apiData.FansT30Roi,
|
||||||
|
T0ShopNewBuyerOrderPaymentAmt: apiData.T0ShopNewBuyerOrderPaymentAmt,
|
||||||
|
T1ShopNewBuyerOrderPaymentAmt: apiData.T1ShopNewBuyerOrderPaymentAmt,
|
||||||
|
T3ShopNewBuyerOrderPaymentAmt: apiData.T3ShopNewBuyerOrderPaymentAmt,
|
||||||
|
T7ShopNewBuyerOrderPaymentAmt: apiData.T7ShopNewBuyerOrderPaymentAmt,
|
||||||
|
T15ShopNewBuyerOrderPaymentAmt: apiData.T15ShopNewBuyerOrderPaymentAmt,
|
||||||
|
T30ShopNewBuyerOrderPaymentAmt: apiData.T30ShopNewBuyerOrderPaymentAmt,
|
||||||
|
T0ShopNewBuyerOrderCnt: apiData.T0ShopNewBuyerOrderCnt,
|
||||||
|
T1ShopNewBuyerOrderCnt: apiData.T1ShopNewBuyerOrderCnt,
|
||||||
|
T3ShopNewBuyerOrderCnt: apiData.T3ShopNewBuyerOrderCnt,
|
||||||
|
T7ShopNewBuyerOrderCnt: apiData.T7ShopNewBuyerOrderCnt,
|
||||||
|
T15ShopNewBuyerOrderCnt: apiData.T15ShopNewBuyerOrderCnt,
|
||||||
|
T30ShopNewBuyerOrderCnt: apiData.T30ShopNewBuyerOrderCnt,
|
||||||
|
T1NewBuyerRepurchaseRatio: apiData.T1NewBuyerRepurchaseRatio,
|
||||||
|
T3NewBuyerRepurchaseRatio: apiData.T3NewBuyerRepurchaseRatio,
|
||||||
|
T7NewBuyerRepurchaseRatio: apiData.T7NewBuyerRepurchaseRatio,
|
||||||
|
T15NewBuyerRepurchaseRatio: apiData.T15NewBuyerRepurchaseRatio,
|
||||||
|
T30NewBuyerRepurchaseRatio: apiData.T30NewBuyerRepurchaseRatio,
|
||||||
|
T0ShopNewBuyerRoi: apiData.T0ShopNewBuyerRoi,
|
||||||
|
T1ShopNewBuyerRoi: apiData.T1ShopNewBuyerRoi,
|
||||||
|
T3ShopNewBuyerRoi: apiData.T3ShopNewBuyerRoi,
|
||||||
|
T7ShopNewBuyerRoi: apiData.T7ShopNewBuyerRoi,
|
||||||
|
T15ShopNewBuyerRoi: apiData.T15ShopNewBuyerRoi,
|
||||||
|
T30ShopNewBuyerRoi: apiData.T30ShopNewBuyerRoi,
|
||||||
|
CreateCardOrderCnt: apiData.CreateCardOrderCnt,
|
||||||
|
ForwardTsCreateCardOrderCnt: apiData.ForwardTsCreateCardOrderCnt,
|
||||||
|
CreateCardOrderCost: apiData.CreateCardOrderCost,
|
||||||
|
ForwardTsCreateCardOrderCost: apiData.ForwardTsCreateCardOrderCost,
|
||||||
|
ActivateCardOrderCnt: apiData.ActivateCardOrderCnt,
|
||||||
|
ForwardTsActivateCardOrderCnt: apiData.ForwardTsActivateCardOrderCnt,
|
||||||
|
ActivateCardOrderCost: apiData.ActivateCardOrderCost,
|
||||||
|
ForwardTsActivateCardOrderCost: apiData.ForwardTsActivateCardOrderCost,
|
||||||
|
CreateCardOrderRatio: apiData.CreateCardOrderRatio,
|
||||||
|
ForwardTsCreateCardOrderRatio: apiData.ForwardTsCreateCardOrderRatio,
|
||||||
|
ActivateCardOrderCntRatio: apiData.ActivateCardOrderCntRatio,
|
||||||
|
ForwardTsActivateCardOrderRatio: apiData.ForwardTsActivateCardOrderRatio,
|
||||||
|
LivePlayCnt: apiData.LivePlayCnt,
|
||||||
|
ItemEntranceClkCnt: apiData.ItemEntranceClkCnt,
|
||||||
|
ShowCnt: apiData.ShowCnt,
|
||||||
|
ReportDateStr: apiData.ReportDateStr,
|
||||||
|
CampaignId: apiData.CampaignId,
|
||||||
|
CampaignName: apiData.CampaignName,
|
||||||
|
UnitId: apiData.UnitId,
|
||||||
|
UnitName: apiData.UnitName,
|
||||||
|
CreativeId: apiData.CreativeId,
|
||||||
|
CreativeName: apiData.CreativeName,
|
||||||
|
CidActualRoiAfterSubsidy: apiData.CidActualRoiAfterSubsidy,
|
||||||
|
CidCouponAmount: apiData.CidCouponAmount,
|
||||||
|
CidCouponCallbackPaidRefundAmount: apiData.CidCouponCallbackPaidRefundAmount,
|
||||||
|
CidVoucherCost: apiData.CidVoucherCost,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *DataConverter) ConvertToDetailItems(apiItems []*CampaignReportItem, dataType string) []*copydata.CidAccountReportDetailItem {
|
||||||
|
if len(apiItems) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
result := make([]*copydata.CidAccountReportDetailItem, 0, len(apiItems))
|
||||||
|
for _, item := range apiItems {
|
||||||
|
detailItem := c.convertItemToDetail(item, dataType)
|
||||||
|
result = append(result, detailItem)
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *DataConverter) convertItemToDetail(apiItem *CampaignReportItem, dataType string) *copydata.CidAccountReportDetailItem {
|
||||||
|
if apiItem == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
item := (*CampaignReportSum)(apiItem)
|
||||||
|
sumItem := c.ConvertToSumItem(item, dataType)
|
||||||
|
|
||||||
|
return ©data.CidAccountReportDetailItem{
|
||||||
|
DataType: sumItem.DataType,
|
||||||
|
T0OrderPaymentAmt: sumItem.T0OrderPaymentAmt,
|
||||||
|
CreativeMaterialType: sumItem.CreativeMaterialType,
|
||||||
|
LiveName: sumItem.LiveName,
|
||||||
|
AuthorId: sumItem.AuthorId,
|
||||||
|
PicUrl: sumItem.PicUrl,
|
||||||
|
PicName: sumItem.PicName,
|
||||||
|
PicId: sumItem.PicId,
|
||||||
|
CoverUrl: sumItem.CoverUrl,
|
||||||
|
CoverId: sumItem.CoverId,
|
||||||
|
ItemOrderConversionRatio: sumItem.ItemOrderConversionRatio,
|
||||||
|
ItemCardClickRatio: sumItem.ItemCardClickRatio,
|
||||||
|
ItemCardClkCnt: sumItem.ItemCardClkCnt,
|
||||||
|
LivePlayCntCost: sumItem.LivePlayCntCost,
|
||||||
|
AdMerchantFollowCost: sumItem.AdMerchantFollowCost,
|
||||||
|
AdMerchantFollow: sumItem.AdMerchantFollow,
|
||||||
|
NetT0OrderCnt: sumItem.NetT0OrderCnt,
|
||||||
|
NetT0Roi: sumItem.NetT0Roi,
|
||||||
|
NetT0Gmv: sumItem.NetT0Gmv,
|
||||||
|
PhotoName: sumItem.PhotoName,
|
||||||
|
PhotoIdStr: sumItem.PhotoIdStr,
|
||||||
|
PhotoId: sumItem.PhotoId,
|
||||||
|
ModPriceSegment: sumItem.ModPriceSegment,
|
||||||
|
AgeSegment: sumItem.AgeSegment,
|
||||||
|
Province: sumItem.Province,
|
||||||
|
Gender: sumItem.Gender,
|
||||||
|
AdPhotoPlayedFiveRatio: sumItem.AdPhotoPlayedFiveRatio,
|
||||||
|
AdPhotoPlayedThreeRatio: sumItem.AdPhotoPlayedThreeRatio,
|
||||||
|
OrderSubmitRoi: sumItem.OrderSubmitRoi,
|
||||||
|
OrderSubmitAmt: sumItem.OrderSubmitAmt,
|
||||||
|
EventOrderSubmitCost: sumItem.EventOrderSubmitCost,
|
||||||
|
EventOrderSubmit: sumItem.EventOrderSubmit,
|
||||||
|
EventOrderPaidRoi: sumItem.EventOrderPaidRoi,
|
||||||
|
EventAppInvoked: sumItem.EventAppInvoked,
|
||||||
|
EventAddShoppingCart: sumItem.EventAddShoppingCart,
|
||||||
|
ConversionNumCost: sumItem.ConversionNumCost,
|
||||||
|
AdEffectivePlayNum: sumItem.AdEffectivePlayNum,
|
||||||
|
AdItemClick: sumItem.AdItemClick,
|
||||||
|
MerchantProductId: sumItem.MerchantProductId,
|
||||||
|
CostTotal: sumItem.CostTotal,
|
||||||
|
AdShow: sumItem.AdShow,
|
||||||
|
AdShow1kCost: sumItem.AdShow1kCost,
|
||||||
|
Impression: sumItem.Impression,
|
||||||
|
PhotoClick: sumItem.PhotoClick,
|
||||||
|
PhotoClickRatio: sumItem.PhotoClickRatio,
|
||||||
|
Click: sumItem.Click,
|
||||||
|
ActionbarClick: sumItem.ActionbarClick,
|
||||||
|
ActionbarClickCost: sumItem.ActionbarClickCost,
|
||||||
|
EspClickRatio: sumItem.EspClickRatio,
|
||||||
|
ActionRatio: sumItem.ActionRatio,
|
||||||
|
AdItemClickCount: sumItem.AdItemClickCount,
|
||||||
|
EspLivePlayedSeconds: sumItem.EspLivePlayedSeconds,
|
||||||
|
PlayedThreeSeconds: sumItem.PlayedThreeSeconds,
|
||||||
|
Play3sRatio: sumItem.Play3sRatio,
|
||||||
|
PlayedFiveSeconds: sumItem.PlayedFiveSeconds,
|
||||||
|
Play5sRatio: sumItem.Play5sRatio,
|
||||||
|
PlayedEnd: sumItem.PlayedEnd,
|
||||||
|
PlayEndRatio: sumItem.PlayEndRatio,
|
||||||
|
Share: sumItem.Share,
|
||||||
|
Comment: sumItem.Comment,
|
||||||
|
Likes: sumItem.Likes,
|
||||||
|
Report: sumItem.Report,
|
||||||
|
Block: sumItem.Block,
|
||||||
|
ItemNegative: sumItem.ItemNegative,
|
||||||
|
LiveShare: sumItem.LiveShare,
|
||||||
|
LiveComment: sumItem.LiveComment,
|
||||||
|
LiveReward: sumItem.LiveReward,
|
||||||
|
EffectivePlayCount: sumItem.EffectivePlayCount,
|
||||||
|
EffectivePlayRatio: sumItem.EffectivePlayRatio,
|
||||||
|
ConversionNum: sumItem.ConversionNum,
|
||||||
|
ConversionCostEsp: sumItem.ConversionCostEsp,
|
||||||
|
Roi: sumItem.Roi,
|
||||||
|
Gmv: sumItem.Gmv,
|
||||||
|
T0Gmv: sumItem.T0Gmv,
|
||||||
|
T1Gmv: sumItem.T1Gmv,
|
||||||
|
T3Gmv: sumItem.T3Gmv,
|
||||||
|
T7Gmv: sumItem.T7Gmv,
|
||||||
|
T15Gmv: sumItem.T15Gmv,
|
||||||
|
T30Gmv: sumItem.T30Gmv,
|
||||||
|
T0Roi: sumItem.T0Roi,
|
||||||
|
T1Roi: sumItem.T1Roi,
|
||||||
|
T3Roi: sumItem.T3Roi,
|
||||||
|
T7Roi: sumItem.T7Roi,
|
||||||
|
T15Roi: sumItem.T15Roi,
|
||||||
|
T30Roi: sumItem.T30Roi,
|
||||||
|
PaiedOrder: sumItem.PaiedOrder,
|
||||||
|
OrderRatio: sumItem.OrderRatio,
|
||||||
|
T0OrderCnt: sumItem.T0OrderCnt,
|
||||||
|
T0OrderCntCost: sumItem.T0OrderCntCost,
|
||||||
|
T0OrderCntRatio: sumItem.T0OrderCntRatio,
|
||||||
|
T1OrderCnt: sumItem.T1OrderCnt,
|
||||||
|
T3OrderCnt: sumItem.T3OrderCnt,
|
||||||
|
T7OrderCnt: sumItem.T7OrderCnt,
|
||||||
|
T15OrderCnt: sumItem.T15OrderCnt,
|
||||||
|
T30OrderCnt: sumItem.T30OrderCnt,
|
||||||
|
MerchantRecoFans: sumItem.MerchantRecoFans,
|
||||||
|
T1Retention: sumItem.T1Retention,
|
||||||
|
T7Retention: sumItem.T7Retention,
|
||||||
|
T15Retention: sumItem.T15Retention,
|
||||||
|
T30Retention: sumItem.T30Retention,
|
||||||
|
T1RetentionRatio: sumItem.T1RetentionRatio,
|
||||||
|
T7RetentionRatio: sumItem.T7RetentionRatio,
|
||||||
|
T15RetentionRatio: sumItem.T15RetentionRatio,
|
||||||
|
T30RetentionRatio: sumItem.T30RetentionRatio,
|
||||||
|
ReservationSuccess: sumItem.ReservationSuccess,
|
||||||
|
ReservationCost: sumItem.ReservationCost,
|
||||||
|
StandardLivePlayedStarted: sumItem.StandardLivePlayedStarted,
|
||||||
|
AdLivePlayCnt: sumItem.AdLivePlayCnt,
|
||||||
|
AdLivePlayCntCost: sumItem.AdLivePlayCntCost,
|
||||||
|
LiveAudienceCost: sumItem.LiveAudienceCost,
|
||||||
|
LiveEventGoodsView: sumItem.LiveEventGoodsView,
|
||||||
|
GoodsClickRatio: sumItem.GoodsClickRatio,
|
||||||
|
DirectAttrPlatNewBuyerCnt: sumItem.DirectAttrPlatNewBuyerCnt,
|
||||||
|
T30AttrPlatTotalBuyerCnt: sumItem.T30AttrPlatTotalBuyerCnt,
|
||||||
|
DirectAttrSellerNewBuyerCnt: sumItem.DirectAttrSellerNewBuyerCnt,
|
||||||
|
T30AttrSellerTotalBuyerCnt: sumItem.T30AttrSellerTotalBuyerCnt,
|
||||||
|
T7IndirectOrderAmt: sumItem.T7IndirectOrderAmt,
|
||||||
|
T7IndirectOrderCnt: sumItem.T7IndirectOrderCnt,
|
||||||
|
FansT0GmvPerFans: sumItem.FansT0GmvPerFans,
|
||||||
|
FansT3GmvPerFans: sumItem.FansT3GmvPerFans,
|
||||||
|
FansT7GmvPerFans: sumItem.FansT7GmvPerFans,
|
||||||
|
FansT15GmvPerFans: sumItem.FansT15GmvPerFans,
|
||||||
|
FansT30GmvPerFans: sumItem.FansT30GmvPerFans,
|
||||||
|
RecoFansCost: sumItem.RecoFansCost,
|
||||||
|
QcpxWhiteboxDirectOrderPaymentAmt: sumItem.QcpxWhiteboxDirectOrderPaymentAmt,
|
||||||
|
QcpxWhiteboxDirectOrderCnt: sumItem.QcpxWhiteboxDirectOrderCnt,
|
||||||
|
FansT0Gmv: sumItem.FansT0Gmv,
|
||||||
|
FansT1Gmv: sumItem.FansT1Gmv,
|
||||||
|
FansT7Gmv: sumItem.FansT7Gmv,
|
||||||
|
FansT15Gmv: sumItem.FansT15Gmv,
|
||||||
|
FansT30Gmv: sumItem.FansT30Gmv,
|
||||||
|
FansT0Roi: sumItem.FansT0Roi,
|
||||||
|
FansT1Roi: sumItem.FansT1Roi,
|
||||||
|
FansT7Roi: sumItem.FansT7Roi,
|
||||||
|
FansT15Roi: sumItem.FansT15Roi,
|
||||||
|
FansT30Roi: sumItem.FansT30Roi,
|
||||||
|
T0ShopNewBuyerOrderPaymentAmt: sumItem.T0ShopNewBuyerOrderPaymentAmt,
|
||||||
|
T1ShopNewBuyerOrderPaymentAmt: sumItem.T1ShopNewBuyerOrderPaymentAmt,
|
||||||
|
T3ShopNewBuyerOrderPaymentAmt: sumItem.T3ShopNewBuyerOrderPaymentAmt,
|
||||||
|
T7ShopNewBuyerOrderPaymentAmt: sumItem.T7ShopNewBuyerOrderPaymentAmt,
|
||||||
|
T15ShopNewBuyerOrderPaymentAmt: sumItem.T15ShopNewBuyerOrderPaymentAmt,
|
||||||
|
T30ShopNewBuyerOrderPaymentAmt: sumItem.T30ShopNewBuyerOrderPaymentAmt,
|
||||||
|
T0ShopNewBuyerOrderCnt: sumItem.T0ShopNewBuyerOrderCnt,
|
||||||
|
T1ShopNewBuyerOrderCnt: sumItem.T1ShopNewBuyerOrderCnt,
|
||||||
|
T3ShopNewBuyerOrderCnt: sumItem.T3ShopNewBuyerOrderCnt,
|
||||||
|
T7ShopNewBuyerOrderCnt: sumItem.T7ShopNewBuyerOrderCnt,
|
||||||
|
T15ShopNewBuyerOrderCnt: sumItem.T15ShopNewBuyerOrderCnt,
|
||||||
|
T30ShopNewBuyerOrderCnt: sumItem.T30ShopNewBuyerOrderCnt,
|
||||||
|
T1NewBuyerRepurchaseRatio: sumItem.T1NewBuyerRepurchaseRatio,
|
||||||
|
T3NewBuyerRepurchaseRatio: sumItem.T3NewBuyerRepurchaseRatio,
|
||||||
|
T7NewBuyerRepurchaseRatio: sumItem.T7NewBuyerRepurchaseRatio,
|
||||||
|
T15NewBuyerRepurchaseRatio: sumItem.T15NewBuyerRepurchaseRatio,
|
||||||
|
T30NewBuyerRepurchaseRatio: sumItem.T30NewBuyerRepurchaseRatio,
|
||||||
|
T0ShopNewBuyerRoi: sumItem.T0ShopNewBuyerRoi,
|
||||||
|
T1ShopNewBuyerRoi: sumItem.T1ShopNewBuyerRoi,
|
||||||
|
T3ShopNewBuyerRoi: sumItem.T3ShopNewBuyerRoi,
|
||||||
|
T7ShopNewBuyerRoi: sumItem.T7ShopNewBuyerRoi,
|
||||||
|
T15ShopNewBuyerRoi: sumItem.T15ShopNewBuyerRoi,
|
||||||
|
T30ShopNewBuyerRoi: sumItem.T30ShopNewBuyerRoi,
|
||||||
|
CreateCardOrderCnt: sumItem.CreateCardOrderCnt,
|
||||||
|
ForwardTsCreateCardOrderCnt: sumItem.ForwardTsCreateCardOrderCnt,
|
||||||
|
CreateCardOrderCost: sumItem.CreateCardOrderCost,
|
||||||
|
ForwardTsCreateCardOrderCost: sumItem.ForwardTsCreateCardOrderCost,
|
||||||
|
ActivateCardOrderCnt: sumItem.ActivateCardOrderCnt,
|
||||||
|
ForwardTsActivateCardOrderCnt: sumItem.ForwardTsActivateCardOrderCnt,
|
||||||
|
ActivateCardOrderCost: sumItem.ActivateCardOrderCost,
|
||||||
|
ForwardTsActivateCardOrderCost: sumItem.ForwardTsActivateCardOrderCost,
|
||||||
|
CreateCardOrderRatio: sumItem.CreateCardOrderRatio,
|
||||||
|
ForwardTsCreateCardOrderRatio: sumItem.ForwardTsCreateCardOrderRatio,
|
||||||
|
ActivateCardOrderCntRatio: sumItem.ActivateCardOrderCntRatio,
|
||||||
|
ForwardTsActivateCardOrderRatio: sumItem.ForwardTsActivateCardOrderRatio,
|
||||||
|
LivePlayCnt: sumItem.LivePlayCnt,
|
||||||
|
ItemEntranceClkCnt: sumItem.ItemEntranceClkCnt,
|
||||||
|
ShowCnt: sumItem.ShowCnt,
|
||||||
|
ReportDateStr: sumItem.ReportDateStr,
|
||||||
|
CampaignId: sumItem.CampaignId,
|
||||||
|
CampaignName: sumItem.CampaignName,
|
||||||
|
UnitId: sumItem.UnitId,
|
||||||
|
UnitName: sumItem.UnitName,
|
||||||
|
CreativeId: sumItem.CreativeId,
|
||||||
|
CreativeName: sumItem.CreativeName,
|
||||||
|
CidActualRoiAfterSubsidy: sumItem.CidActualRoiAfterSubsidy,
|
||||||
|
CidCouponAmount: sumItem.CidCouponAmount,
|
||||||
|
CidCouponCallbackPaidRefundAmount: sumItem.CidCouponCallbackPaidRefundAmount,
|
||||||
|
CidVoucherCost: sumItem.CidVoucherCost,
|
||||||
|
}
|
||||||
|
}
|
||||||
68
sync/http_client.go
Normal file
68
sync/http_client.go
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
package sync
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type HttpClient struct {
|
||||||
|
BaseURL string
|
||||||
|
Timeout time.Duration
|
||||||
|
HTTPClient *http.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewHttpClient(baseURL string, timeout time.Duration) *HttpClient {
|
||||||
|
if timeout == 0 {
|
||||||
|
timeout = 30 * time.Second
|
||||||
|
}
|
||||||
|
return &HttpClient{
|
||||||
|
BaseURL: baseURL,
|
||||||
|
Timeout: timeout,
|
||||||
|
HTTPClient: &http.Client{
|
||||||
|
Timeout: timeout,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *HttpClient) Post(ctx context.Context, url string, body interface{}) ([]byte, error) {
|
||||||
|
jsonData, err := json.Marshal(body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("序列化请求失败:%w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fullURL := url
|
||||||
|
if c.BaseURL != "" && len(url) > 0 && url[0] != '/' {
|
||||||
|
fullURL = c.BaseURL + url
|
||||||
|
} else if c.BaseURL != "" {
|
||||||
|
fullURL = c.BaseURL + url
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := http.NewRequestWithContext(ctx, "POST", fullURL, bytes.NewBuffer(jsonData))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("创建请求失败:%w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
|
||||||
|
resp, err := c.HTTPClient.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("请求失败:%w", err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
respBody, err := io.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("读取响应失败:%w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
return nil, fmt.Errorf("HTTP 错误状态码:%d", resp.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
return respBody, nil
|
||||||
|
}
|
||||||
272
sync/mock_generator.go
Normal file
272
sync/mock_generator.go
Normal file
@@ -0,0 +1,272 @@
|
|||||||
|
package sync
|
||||||
|
|
||||||
|
import (
|
||||||
|
"math/rand"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MockDataGenerator struct {
|
||||||
|
rand *rand.Rand
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMockDataGenerator() *MockDataGenerator {
|
||||||
|
return &MockDataGenerator{
|
||||||
|
rand: rand.New(rand.NewSource(time.Now().UnixNano())),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MockDataGenerator) GenerateCampaignReportRequest() *CampaignReportRequest {
|
||||||
|
return &CampaignReportRequest{
|
||||||
|
AdvertiserID: 10001,
|
||||||
|
StartTime: time.Now().AddDate(0, 0, -30).UnixNano() / 1e6,
|
||||||
|
EndTime: time.Now().UnixNano() / 1e6,
|
||||||
|
SelectColumns: []string{"impression", "click", "cost", "t0GMV"},
|
||||||
|
GroupType: 1,
|
||||||
|
QueryVersion: 1,
|
||||||
|
SelectParam: &CampaignSelectParam{
|
||||||
|
CampaignIDs: []int64{1, 2, 3},
|
||||||
|
},
|
||||||
|
PageInfo: &PageInfo{
|
||||||
|
CurrentPage: 1,
|
||||||
|
PageSize: 20,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MockDataGenerator) GenerateCampaignReportResponse() *CampaignReportResponse {
|
||||||
|
sumData := m.generateSumData()
|
||||||
|
detailData := m.generateDetailData(5)
|
||||||
|
|
||||||
|
return &CampaignReportResponse{
|
||||||
|
Code: 0,
|
||||||
|
Message: "success",
|
||||||
|
Data: &CampaignReportData{
|
||||||
|
Sum: sumData,
|
||||||
|
Detail: detailData,
|
||||||
|
TotalCount: len(detailData),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MockDataGenerator) generateSumData() *CampaignReportSum {
|
||||||
|
cost := m.randomFloat(1000, 10000)
|
||||||
|
impression := m.randomInt64(10000, 100000)
|
||||||
|
click := m.randomInt64(100, 1000)
|
||||||
|
|
||||||
|
return &CampaignReportSum{
|
||||||
|
T0OrderPaymentAmt: "888.99",
|
||||||
|
CreativeMaterialType: "视频素材类型",
|
||||||
|
LiveName: "测试直播间",
|
||||||
|
AuthorId: "123456",
|
||||||
|
PicUrl: "http://example.com/pic.jpg",
|
||||||
|
PicName: "图片名称",
|
||||||
|
PicId: "pic_123",
|
||||||
|
CoverUrl: "http://example.com/cover.jpg",
|
||||||
|
CoverId: 4551122,
|
||||||
|
ItemOrderConversionRatio: m.randomFloatPtr(0.01, 0.5),
|
||||||
|
ItemCardClickRatio: m.randomFloatPtr(0.02, 0.3),
|
||||||
|
ItemCardClkCnt: m.randomIntPtr(10, 100),
|
||||||
|
LivePlayCntCost: m.randomFloatPtr(0.5, 5.0),
|
||||||
|
AdMerchantFollowCost: m.randomFloatPtr(1.0, 10.0),
|
||||||
|
AdMerchantFollow: m.randomIntPtr(50, 500),
|
||||||
|
NetT0OrderCnt: m.randomIntPtr(10, 100),
|
||||||
|
NetT0Roi: m.randomFloatPtr(1.5, 5.0),
|
||||||
|
NetT0Gmv: m.randomFloatPtr(5000, 50000),
|
||||||
|
PhotoName: "测试视频",
|
||||||
|
PhotoIdStr: "video_123",
|
||||||
|
PhotoId: "video_123",
|
||||||
|
ModPriceSegment: "1000-2000",
|
||||||
|
AgeSegment: "24-30",
|
||||||
|
Province: "广东",
|
||||||
|
Gender: "男",
|
||||||
|
AdPhotoPlayedFiveRatio: m.randomFloatPtr(0.3, 0.8),
|
||||||
|
AdPhotoPlayedThreeRatio: m.randomFloatPtr(0.5, 0.9),
|
||||||
|
OrderSubmitRoi: m.randomFloatPtr(1.0, 3.0),
|
||||||
|
OrderSubmitAmt: m.randomIntPtr(10, 100),
|
||||||
|
EventOrderSubmitCost: m.randomFloatPtr(5.0, 20.0),
|
||||||
|
EventOrderSubmit: m.randomIntPtr(5, 50),
|
||||||
|
EventOrderPaidRoi: m.randomFloatPtr(0.5, 2.0),
|
||||||
|
EventAppInvoked: m.randomIntPtr(100, 1000),
|
||||||
|
EventAddShoppingCart: m.randomIntPtr(50, 500),
|
||||||
|
ConversionNumCost: m.randomFloatPtr(10.0, 50.0),
|
||||||
|
AdEffectivePlayNum: m.randomIntPtr(1000, 10000),
|
||||||
|
AdItemClick: m.randomIntPtr(100, 1000),
|
||||||
|
MerchantProductId: "product_123",
|
||||||
|
CostTotal: &cost,
|
||||||
|
AdShow: m.randomIntPtr(10000, 100000),
|
||||||
|
AdShow1kCost: m.randomFloatPtr(5.0, 50.0),
|
||||||
|
Impression: &impression,
|
||||||
|
PhotoClick: m.randomIntPtr(100, 5000),
|
||||||
|
PhotoClickRatio: m.randomFloatPtr(0.01, 0.1),
|
||||||
|
Click: &click,
|
||||||
|
ActionbarClick: m.randomIntPtr(50, 500),
|
||||||
|
ActionbarClickCost: m.randomFloatPtr(1.0, 10.0),
|
||||||
|
EspClickRatio: m.randomFloatPtr(0.01, 0.1),
|
||||||
|
ActionRatio: m.randomFloatPtr(0.02, 0.2),
|
||||||
|
AdItemClickCount: m.randomIntPtr(10, 100),
|
||||||
|
EspLivePlayedSeconds: m.randomIntPtr(30, 300),
|
||||||
|
PlayedThreeSeconds: m.randomIntPtr(5000, 50000),
|
||||||
|
Play3sRatio: m.randomFloatPtr(0.3, 0.8),
|
||||||
|
PlayedFiveSeconds: m.randomIntPtr(3000, 30000),
|
||||||
|
Play5sRatio: m.randomFloatPtr(0.2, 0.6),
|
||||||
|
PlayedEnd: m.randomIntPtr(1000, 10000),
|
||||||
|
PlayEndRatio: m.randomFloatPtr(0.1, 0.4),
|
||||||
|
Share: m.randomIntPtr(10, 100),
|
||||||
|
Comment: m.randomIntPtr(20, 200),
|
||||||
|
Likes: m.randomIntPtr(100, 1000),
|
||||||
|
Report: m.randomIntPtr(1, 10),
|
||||||
|
Block: m.randomIntPtr(1, 10),
|
||||||
|
ItemNegative: m.randomIntPtr(5, 50),
|
||||||
|
LiveShare: m.randomIntPtr(5, 50),
|
||||||
|
LiveComment: m.randomIntPtr(10, 100),
|
||||||
|
LiveReward: m.randomIntPtr(20, 200),
|
||||||
|
EffectivePlayCount: m.randomIntPtr(1000, 10000),
|
||||||
|
EffectivePlayRatio: m.randomFloatPtr(0.1, 0.5),
|
||||||
|
ConversionNum: m.randomIntPtr(5, 50),
|
||||||
|
ConversionCostEsp: m.randomFloatPtr(10.0, 50.0),
|
||||||
|
Roi: m.randomFloatPtr(1.0, 3.0),
|
||||||
|
Gmv: m.randomFloatPtr(1000, 10000),
|
||||||
|
T0Gmv: m.randomFloatPtr(500, 5000),
|
||||||
|
T1Gmv: m.randomFloatPtr(800, 8000),
|
||||||
|
T3Gmv: m.randomFloatPtr(1200, 12000),
|
||||||
|
T7Gmv: m.randomFloatPtr(2000, 20000),
|
||||||
|
T15Gmv: m.randomFloatPtr(3000, 30000),
|
||||||
|
T30Gmv: m.randomFloatPtr(5000, 50000),
|
||||||
|
T0Roi: m.randomFloatPtr(0.5, 2.0),
|
||||||
|
T1Roi: m.randomFloatPtr(0.8, 2.5),
|
||||||
|
T3Roi: m.randomFloatPtr(1.0, 3.0),
|
||||||
|
T7Roi: m.randomFloatPtr(1.5, 4.0),
|
||||||
|
T15Roi: m.randomFloatPtr(2.0, 5.0),
|
||||||
|
T30Roi: m.randomFloatPtr(2.5, 6.0),
|
||||||
|
PaiedOrder: m.randomIntPtr(5, 50),
|
||||||
|
OrderRatio: m.randomFloatPtr(0.01, 0.1),
|
||||||
|
T0OrderCnt: m.randomIntPtr(5, 50),
|
||||||
|
T0OrderCntCost: m.randomFloatPtr(10.0, 100.0),
|
||||||
|
T0OrderCntRatio: m.randomFloatPtr(0.5, 0.9),
|
||||||
|
T1OrderCnt: m.randomIntPtr(10, 100),
|
||||||
|
T3OrderCnt: m.randomIntPtr(20, 200),
|
||||||
|
T7OrderCnt: m.randomIntPtr(30, 300),
|
||||||
|
T15OrderCnt: m.randomIntPtr(40, 400),
|
||||||
|
T30OrderCnt: m.randomIntPtr(50, 500),
|
||||||
|
MerchantRecoFans: m.randomIntPtr(100, 1000),
|
||||||
|
T1Retention: m.randomFloatPtr(0.3, 0.8),
|
||||||
|
T7Retention: m.randomFloatPtr(0.2, 0.6),
|
||||||
|
T15Retention: m.randomFloatPtr(0.15, 0.5),
|
||||||
|
T30Retention: m.randomFloatPtr(0.1, 0.4),
|
||||||
|
T1RetentionRatio: m.randomFloatPtr(0.3, 0.8),
|
||||||
|
T7RetentionRatio: m.randomFloatPtr(0.2, 0.6),
|
||||||
|
T15RetentionRatio: m.randomFloatPtr(0.15, 0.5),
|
||||||
|
T30RetentionRatio: m.randomFloatPtr(0.1, 0.4),
|
||||||
|
ReservationSuccess: m.randomIntPtr(10, 100),
|
||||||
|
ReservationCost: m.randomFloatPtr(5.0, 50.0),
|
||||||
|
StandardLivePlayedStarted: m.randomIntPtr(100, 1000),
|
||||||
|
AdLivePlayCnt: m.randomIntPtr(50, 500),
|
||||||
|
AdLivePlayCntCost: m.randomFloatPtr(1.0, 10.0),
|
||||||
|
LiveAudienceCost: m.randomFloatPtr(0.5, 5.0),
|
||||||
|
LiveEventGoodsView: m.randomIntPtr(100, 1000),
|
||||||
|
GoodsClickRatio: m.randomFloatPtr(0.05, 0.3),
|
||||||
|
DirectAttrPlatNewBuyerCnt: m.randomIntPtr(10, 100),
|
||||||
|
T30AttrPlatTotalBuyerCnt: m.randomIntPtr(50, 500),
|
||||||
|
DirectAttrSellerNewBuyerCnt: m.randomIntPtr(5, 50),
|
||||||
|
T30AttrSellerTotalBuyerCnt: m.randomIntPtr(20, 200),
|
||||||
|
T7IndirectOrderAmt: m.randomFloatPtr(500, 5000),
|
||||||
|
T7IndirectOrderCnt: m.randomIntPtr(5, 50),
|
||||||
|
FansT0GmvPerFans: m.randomFloatPtr(10.0, 100.0),
|
||||||
|
FansT3GmvPerFans: m.randomFloatPtr(20.0, 200.0),
|
||||||
|
FansT7GmvPerFans: m.randomFloatPtr(30.0, 300.0),
|
||||||
|
FansT15GmvPerFans: m.randomFloatPtr(40.0, 400.0),
|
||||||
|
FansT30GmvPerFans: m.randomFloatPtr(50.0, 500.0),
|
||||||
|
RecoFansCost: m.randomFloatPtr(5.0, 50.0),
|
||||||
|
QcpxWhiteboxDirectOrderPaymentAmt: m.randomFloatPtr(100, 1000),
|
||||||
|
QcpxWhiteboxDirectOrderCnt: m.randomIntPtr(1, 10),
|
||||||
|
FansT0Gmv: m.randomFloatPtr(100, 1000),
|
||||||
|
FansT1Gmv: m.randomFloatPtr(200, 2000),
|
||||||
|
FansT7Gmv: m.randomFloatPtr(300, 3000),
|
||||||
|
FansT15Gmv: m.randomFloatPtr(400, 4000),
|
||||||
|
FansT30Gmv: m.randomFloatPtr(500, 5000),
|
||||||
|
FansT0Roi: m.randomFloatPtr(0.5, 2.0),
|
||||||
|
FansT1Roi: m.randomFloatPtr(0.8, 2.5),
|
||||||
|
FansT7Roi: m.randomFloatPtr(1.0, 3.0),
|
||||||
|
FansT15Roi: m.randomFloatPtr(1.5, 4.0),
|
||||||
|
FansT30Roi: m.randomFloatPtr(2.0, 5.0),
|
||||||
|
T0ShopNewBuyerOrderPaymentAmt: m.randomFloatPtr(100, 1000),
|
||||||
|
T1ShopNewBuyerOrderPaymentAmt: m.randomFloatPtr(200, 2000),
|
||||||
|
T3ShopNewBuyerOrderPaymentAmt: m.randomFloatPtr(300, 3000),
|
||||||
|
T7ShopNewBuyerOrderPaymentAmt: m.randomFloatPtr(400, 4000),
|
||||||
|
T15ShopNewBuyerOrderPaymentAmt: m.randomFloatPtr(500, 5000),
|
||||||
|
T30ShopNewBuyerOrderPaymentAmt: m.randomFloatPtr(600, 6000),
|
||||||
|
T0ShopNewBuyerOrderCnt: m.randomIntPtr(1, 10),
|
||||||
|
T1ShopNewBuyerOrderCnt: m.randomIntPtr(2, 20),
|
||||||
|
T3ShopNewBuyerOrderCnt: m.randomIntPtr(3, 30),
|
||||||
|
T7ShopNewBuyerOrderCnt: m.randomIntPtr(4, 40),
|
||||||
|
T15ShopNewBuyerOrderCnt: m.randomIntPtr(5, 50),
|
||||||
|
T30ShopNewBuyerOrderCnt: m.randomIntPtr(6, 60),
|
||||||
|
T1NewBuyerRepurchaseRatio: m.randomFloatPtr(0.1, 0.5),
|
||||||
|
T3NewBuyerRepurchaseRatio: m.randomFloatPtr(0.15, 0.55),
|
||||||
|
T7NewBuyerRepurchaseRatio: m.randomFloatPtr(0.2, 0.6),
|
||||||
|
T15NewBuyerRepurchaseRatio: m.randomFloatPtr(0.25, 0.65),
|
||||||
|
T30NewBuyerRepurchaseRatio: m.randomFloatPtr(0.3, 0.7),
|
||||||
|
T0ShopNewBuyerRoi: m.randomFloatPtr(0.5, 2.0),
|
||||||
|
T1ShopNewBuyerRoi: m.randomFloatPtr(0.8, 2.5),
|
||||||
|
T3ShopNewBuyerRoi: m.randomFloatPtr(1.0, 3.0),
|
||||||
|
T7ShopNewBuyerRoi: m.randomFloatPtr(1.5, 4.0),
|
||||||
|
T15ShopNewBuyerRoi: m.randomFloatPtr(2.0, 5.0),
|
||||||
|
T30ShopNewBuyerRoi: m.randomFloatPtr(2.5, 6.0),
|
||||||
|
CreateCardOrderCnt: m.randomIntPtr(1, 10),
|
||||||
|
ForwardTsCreateCardOrderCnt: m.randomIntPtr(1, 10),
|
||||||
|
CreateCardOrderCost: m.randomFloatPtr(10.0, 100.0),
|
||||||
|
ForwardTsCreateCardOrderCost: m.randomFloatPtr(10.0, 100.0),
|
||||||
|
ActivateCardOrderCnt: m.randomIntPtr(1, 10),
|
||||||
|
ForwardTsActivateCardOrderCnt: m.randomIntPtr(1, 10),
|
||||||
|
ActivateCardOrderCost: m.randomFloatPtr(10.0, 100.0),
|
||||||
|
ForwardTsActivateCardOrderCost: m.randomFloatPtr(10.0, 100.0),
|
||||||
|
CreateCardOrderRatio: m.randomFloatPtr(0.01, 0.1),
|
||||||
|
ForwardTsCreateCardOrderRatio: m.randomFloatPtr(0.01, 0.1),
|
||||||
|
ActivateCardOrderCntRatio: m.randomFloatPtr(0.01, 0.1),
|
||||||
|
ForwardTsActivateCardOrderRatio: m.randomFloatPtr(0.01, 0.1),
|
||||||
|
LivePlayCnt: m.randomIntPtr(100, 1000),
|
||||||
|
ItemEntranceClkCnt: m.randomIntPtr(50, 500),
|
||||||
|
ShowCnt: m.randomIntPtr(1000, 10000),
|
||||||
|
ReportDateStr: time.Now().Format("2006-01-02"),
|
||||||
|
CampaignId: m.randomIntPtr(1, 100),
|
||||||
|
CampaignName: "测试计划",
|
||||||
|
UnitId: m.randomIntPtr(1, 50),
|
||||||
|
UnitName: "测试单元",
|
||||||
|
CreativeId: m.randomIntPtr(1, 20),
|
||||||
|
CreativeName: "测试创意",
|
||||||
|
CidActualRoiAfterSubsidy: m.randomFloatPtr(1.0, 3.0),
|
||||||
|
CidCouponAmount: m.randomIntPtr(100, 1000),
|
||||||
|
CidCouponCallbackPaidRefundAmount: m.randomIntPtr(50, 500),
|
||||||
|
CidVoucherCost: m.randomFloatPtr(5.0, 50.0),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MockDataGenerator) generateDetailData(count int) []*CampaignReportItem {
|
||||||
|
items := make([]*CampaignReportItem, count)
|
||||||
|
for i := 0; i < count; i++ {
|
||||||
|
items[i] = (*CampaignReportItem)(m.generateSumData())
|
||||||
|
}
|
||||||
|
return items
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MockDataGenerator) randomInt(min, max int) int {
|
||||||
|
return m.rand.Intn(max-min) + min
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MockDataGenerator) randomInt64(min, max int64) int64 {
|
||||||
|
return m.rand.Int63n(max-min) + min
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MockDataGenerator) randomFloat(min, max float64) float64 {
|
||||||
|
return m.rand.Float64()*(max-min) + min
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MockDataGenerator) randomIntPtr(min, max int) *int64 {
|
||||||
|
v := int64(m.randomInt(min, max))
|
||||||
|
return &v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MockDataGenerator) randomFloatPtr(min, max float64) *float64 {
|
||||||
|
v := m.randomFloat(min, max)
|
||||||
|
return &v
|
||||||
|
}
|
||||||
51
sync/quick_sync.go
Normal file
51
sync/quick_sync.go
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
package sync
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SyncCampaignReportWithMock(ctx context.Context) error {
|
||||||
|
syncService := NewSyncService()
|
||||||
|
|
||||||
|
req := &CampaignReportRequest{
|
||||||
|
AdvertiserID: 10001,
|
||||||
|
StartTime: time.Now().AddDate(0, 0, -30).UnixNano() / 1e6,
|
||||||
|
EndTime: time.Now().UnixNano() / 1e6,
|
||||||
|
SelectColumns: []string{"impression", "click", "cost", "t0GMV"},
|
||||||
|
GroupType: 1,
|
||||||
|
QueryVersion: 1,
|
||||||
|
SelectParam: &CampaignSelectParam{
|
||||||
|
CampaignIDs: []int64{1, 2, 3},
|
||||||
|
},
|
||||||
|
PageInfo: &PageInfo{
|
||||||
|
CurrentPage: 1,
|
||||||
|
PageSize: 20,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := syncService.SyncCampaignReport(ctx, req, true)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Errorf("同步失败:%v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
logrus.Infof("同步成功 - 汇总 ID: %d, 明细数量:%d", result.SumID, result.DetailCount)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func SyncCampaignReportWithRealAPI(ctx context.Context, req *CampaignReportRequest) error {
|
||||||
|
syncService := NewSyncService()
|
||||||
|
|
||||||
|
result, err := syncService.SyncCampaignReport(ctx, req, false)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Errorf("同步失败:%v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
logrus.Infof("同步成功 - 汇总 ID: %d, 明细数量:%d, 成功:%d, 失败:%d",
|
||||||
|
result.SumID, result.DetailCount, result.DetailSuccessCount, result.DetailFailCount)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
268
sync/sync_service.go
Normal file
268
sync/sync_service.go
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
package sync
|
||||||
|
|
||||||
|
import (
|
||||||
|
dto "cid/model/dto/copydata"
|
||||||
|
"cid/service/copydata"
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"gitea.com/red-future/common/beans"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SyncService struct {
|
||||||
|
httpClient *HttpClient
|
||||||
|
converter *DataConverter
|
||||||
|
mockGen *MockDataGenerator
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSyncService() *SyncService {
|
||||||
|
return &SyncService{
|
||||||
|
httpClient: NewHttpClient("https://ad.e.kuaishou.com", 0),
|
||||||
|
converter: NewDataConverter(),
|
||||||
|
mockGen: NewMockDataGenerator(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type SyncResult struct {
|
||||||
|
SumSuccess bool `json:"sum_success"`
|
||||||
|
SumID int64 `json:"sum_id"`
|
||||||
|
DetailSuccess bool `json:"detail_success"`
|
||||||
|
DetailCount int `json:"detail_count"`
|
||||||
|
DetailSuccessCount int64 `json:"detail_success_count"`
|
||||||
|
DetailFailCount int64 `json:"detail_fail_count"`
|
||||||
|
Error error `json:"error"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SyncService) SyncCampaignReport(ctx context.Context, req *CampaignReportRequest, useMock bool) (*SyncResult, error) {
|
||||||
|
result := &SyncResult{}
|
||||||
|
|
||||||
|
var responseData *CampaignReportResponse
|
||||||
|
|
||||||
|
if useMock {
|
||||||
|
logrus.Info("使用 Mock 数据同步快手广告计划报表")
|
||||||
|
responseData = s.mockGen.GenerateCampaignReportResponse()
|
||||||
|
} else {
|
||||||
|
logrus.Info("从真实 API 同步快手广告计划报表")
|
||||||
|
respBytes, err := s.httpClient.Post(ctx, "/rest/openapi/gw/esp/report/campaignReport", req)
|
||||||
|
if err != nil {
|
||||||
|
result.Error = fmt.Errorf("调用 API 失败:%w", err)
|
||||||
|
return result, result.Error
|
||||||
|
}
|
||||||
|
|
||||||
|
responseData = &CampaignReportResponse{}
|
||||||
|
if err := json.Unmarshal(respBytes, responseData); err != nil {
|
||||||
|
result.Error = fmt.Errorf("解析响应失败:%w", err)
|
||||||
|
return result, result.Error
|
||||||
|
}
|
||||||
|
|
||||||
|
if responseData.Code != 0 {
|
||||||
|
result.Error = fmt.Errorf("API 返回错误:code=%d, message=%s", responseData.Code, responseData.Message)
|
||||||
|
return result, result.Error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if responseData.Data.Sum != nil {
|
||||||
|
sumItem := s.converter.ConvertToSumItem(responseData.Data.Sum, "campaign_report")
|
||||||
|
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
|
||||||
|
|
||||||
|
sumResult, saveErr := s.saveSumData(ctx, sumItem)
|
||||||
|
if saveErr != nil {
|
||||||
|
logrus.Errorf("保存汇总数据失败:%v", saveErr)
|
||||||
|
result.Error = fmt.Errorf("保存汇总数据失败:%w", saveErr)
|
||||||
|
} else {
|
||||||
|
result.SumSuccess = true
|
||||||
|
result.SumID = sumResult.Id
|
||||||
|
logrus.Infof("成功保存汇总数据,ID=%d", sumResult.Id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(responseData.Data.Detail) > 0 {
|
||||||
|
detailItems := s.converter.ConvertToDetailItems(responseData.Data.Detail, "campaign_report")
|
||||||
|
detailResult, saveErr := s.saveDetailData(ctx, detailItems)
|
||||||
|
if saveErr != nil {
|
||||||
|
logrus.Errorf("保存明细数据失败:%v", saveErr)
|
||||||
|
result.Error = fmt.Errorf("保存明细数据失败:%w", saveErr)
|
||||||
|
} else {
|
||||||
|
result.DetailSuccess = true
|
||||||
|
result.DetailCount = len(detailItems)
|
||||||
|
result.DetailSuccessCount = detailResult.SuccessCount
|
||||||
|
result.DetailFailCount = detailResult.FailCount
|
||||||
|
logrus.Infof("成功保存明细数据,成功=%d, 失败=%d", detailResult.SuccessCount, detailResult.FailCount)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, result.Error
|
||||||
|
}
|
||||||
|
|
||||||
|
// SyncCampaignReportWithPagination 带分页处理的同步方法(支持全量数据抽取)
|
||||||
|
func (s *SyncService) SyncCampaignReportWithPagination(ctx context.Context, req *CampaignReportRequest, useMock bool, maxRetries int) (*SyncResult, error) {
|
||||||
|
aggregatedResult := &SyncResult{
|
||||||
|
SumSuccess: false,
|
||||||
|
SumID: 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
allDetailItems := make([]*dto.CidAccountReportDetailItem, 0)
|
||||||
|
totalCount := 0
|
||||||
|
currentPage := 1
|
||||||
|
pageSize := 100
|
||||||
|
|
||||||
|
if req.PageInfo == nil {
|
||||||
|
req.PageInfo = &PageInfo{}
|
||||||
|
}
|
||||||
|
|
||||||
|
for {
|
||||||
|
logrus.Infof(">>> 正在同步第 %d 页数据...", currentPage)
|
||||||
|
|
||||||
|
req.PageInfo.CurrentPage = currentPage
|
||||||
|
req.PageInfo.PageSize = pageSize
|
||||||
|
|
||||||
|
result, err := s.SyncWithRetry(ctx, req, useMock, maxRetries)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Errorf("第 %d 页同步失败:%v", currentPage, err)
|
||||||
|
return aggregatedResult, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if result.SumSuccess && aggregatedResult.SumID == 0 {
|
||||||
|
aggregatedResult.SumSuccess = true
|
||||||
|
aggregatedResult.SumID = result.SumID
|
||||||
|
logrus.Infof("✓ 汇总数据已保存,ID=%d", result.SumID)
|
||||||
|
}
|
||||||
|
|
||||||
|
if result.DetailSuccess && result.DetailCount > 0 {
|
||||||
|
detailItems := s.extractDetailItems(req, useMock)
|
||||||
|
if len(detailItems) > 0 {
|
||||||
|
allDetailItems = append(allDetailItems, detailItems...)
|
||||||
|
totalCount += len(detailItems)
|
||||||
|
logrus.Infof("✓ 第 %d 页获取到 %d 条明细数据,累计 %d 条", currentPage, len(detailItems), totalCount)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
currentData := s.fetchCurrentData(req, useMock)
|
||||||
|
if currentData != nil && currentData.TotalCount > 0 {
|
||||||
|
totalPages := (currentData.TotalCount + pageSize - 1) / pageSize
|
||||||
|
logrus.Infof("总记录数:%d, 总页数:%d, 当前页:%d/%d",
|
||||||
|
currentData.TotalCount, totalPages, currentPage, totalPages)
|
||||||
|
|
||||||
|
if currentPage >= totalPages {
|
||||||
|
logrus.Infof("✓ 已同步所有页面数据,共 %d 页,%d 条记录", totalPages, currentData.TotalCount)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if result.DetailCount < pageSize {
|
||||||
|
logrus.Infof("✓ 当前页数据不足 %d 条,已到达最后一页", pageSize)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
currentPage++
|
||||||
|
time.Sleep(300 * time.Millisecond)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(allDetailItems) > 0 {
|
||||||
|
logrus.Infof("开始批量保存 %d 条明细数据...", len(allDetailItems))
|
||||||
|
detailResult, saveErr := s.saveDetailData(ctx, allDetailItems)
|
||||||
|
if saveErr != nil {
|
||||||
|
logrus.Errorf("批量保存明细数据失败:%v", saveErr)
|
||||||
|
aggregatedResult.Error = fmt.Errorf("批量保存明细数据失败:%w", saveErr)
|
||||||
|
} else {
|
||||||
|
aggregatedResult.DetailSuccess = true
|
||||||
|
aggregatedResult.DetailCount = len(allDetailItems)
|
||||||
|
aggregatedResult.DetailSuccessCount = detailResult.SuccessCount
|
||||||
|
aggregatedResult.DetailFailCount = detailResult.FailCount
|
||||||
|
logrus.Infof("✓ 批量保存明细数据完成,成功=%d, 失败=%d",
|
||||||
|
detailResult.SuccessCount, detailResult.FailCount)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logrus.Info("没有明细数据需要保存")
|
||||||
|
}
|
||||||
|
|
||||||
|
return aggregatedResult, aggregatedResult.Error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SyncService) extractDetailItems(req *CampaignReportRequest, useMock bool) []*dto.CidAccountReportDetailItem {
|
||||||
|
if useMock {
|
||||||
|
responseData := s.mockGen.GenerateCampaignReportResponse()
|
||||||
|
if responseData == nil || responseData.Data == nil || len(responseData.Data.Detail) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return s.converter.ConvertToDetailItems(responseData.Data.Detail, "campaign_report")
|
||||||
|
}
|
||||||
|
|
||||||
|
respBytes, err := s.httpClient.Post(context.Background(), "/rest/openapi/gw/esp/report/campaignReport", req)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Errorf("重新获取数据失败:%v", err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
responseData := &CampaignReportResponse{}
|
||||||
|
if err := json.Unmarshal(respBytes, responseData); err != nil {
|
||||||
|
logrus.Errorf("解析响应失败:%v", err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if responseData.Code != 0 || responseData.Data == nil || len(responseData.Data.Detail) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.converter.ConvertToDetailItems(responseData.Data.Detail, "campaign_report")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SyncService) fetchCurrentData(req *CampaignReportRequest, useMock bool) *CampaignReportData {
|
||||||
|
if useMock {
|
||||||
|
responseData := s.mockGen.GenerateCampaignReportResponse()
|
||||||
|
if responseData != nil && responseData.Data != nil {
|
||||||
|
return responseData.Data
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
respBytes, err := s.httpClient.Post(context.Background(), "/rest/openapi/gw/esp/report/campaignReport", req)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
responseData := &CampaignReportResponse{}
|
||||||
|
if err := json.Unmarshal(respBytes, responseData); err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if responseData.Code == 0 && responseData.Data != nil {
|
||||||
|
return responseData.Data
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SyncService) saveSumData(ctx context.Context, item *dto.CidAccountReportSumItem) (*dto.CreateCidAccountReportSumRes, error) {
|
||||||
|
return copydata.CidAccountReportDetail.CreateSum(ctx, item)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SyncService) saveDetailData(ctx context.Context, items []*dto.CidAccountReportDetailItem) (*dto.BatchCreateCidAccountReportDetailRes, error) {
|
||||||
|
req := &dto.BatchCreateCidAccountReportDetailReq{
|
||||||
|
Items: items,
|
||||||
|
}
|
||||||
|
return copydata.CidAccountReportDetail.BatchCreate(ctx, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SyncService) SyncWithRetry(ctx context.Context, req *CampaignReportRequest, useMock bool, maxRetries int) (*SyncResult, error) {
|
||||||
|
var lastResult *SyncResult
|
||||||
|
var lastErr error
|
||||||
|
|
||||||
|
for attempt := 0; attempt <= maxRetries; attempt++ {
|
||||||
|
result, err := s.SyncCampaignReport(ctx, req, useMock)
|
||||||
|
lastResult = result
|
||||||
|
lastErr = err
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
logrus.Infof("同步成功,尝试次数:%d", attempt+1)
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
logrus.Warnf("同步失败,第 %d 次重试,错误:%v", attempt+1, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return lastResult, lastErr
|
||||||
|
}
|
||||||
139
sync/sync_test.go
Normal file
139
sync/sync_test.go
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
package sync
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
_ "github.com/gogf/gf/contrib/drivers/pgsql/v2"
|
||||||
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
|
"github.com/gogf/gf/v2/os/gctx"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
fmt.Println("=== 初始化测试环境 ===")
|
||||||
|
ctx := gctx.New()
|
||||||
|
|
||||||
|
db := g.DB()
|
||||||
|
if db != nil {
|
||||||
|
_, err := db.Query(ctx, "SELECT 1")
|
||||||
|
if err == nil {
|
||||||
|
fmt.Println("✓ 数据库连接成功")
|
||||||
|
} else {
|
||||||
|
fmt.Printf("⚠️ 数据库连接失败:%v\n", err)
|
||||||
|
fmt.Println("⚠️ 将跳过数据库相关测试")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fmt.Println("⚠️ 数据库未初始化")
|
||||||
|
}
|
||||||
|
fmt.Println("========================")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMockDataGeneration(t *testing.T) {
|
||||||
|
mockGen := NewMockDataGenerator()
|
||||||
|
|
||||||
|
req := mockGen.GenerateCampaignReportRequest()
|
||||||
|
if req == nil {
|
||||||
|
t.Error("请求数据生成失败")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("✓ Mock 请求生成成功:AdvertiserID=%d\n", req.AdvertiserID)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDataConverter(t *testing.T) {
|
||||||
|
converter := NewDataConverter()
|
||||||
|
mockGen := NewMockDataGenerator()
|
||||||
|
|
||||||
|
responseData := mockGen.GenerateCampaignReportResponse()
|
||||||
|
if responseData == nil || responseData.Data.Sum == nil {
|
||||||
|
t.Fatal("Mock 数据生成失败")
|
||||||
|
}
|
||||||
|
|
||||||
|
sumItem := converter.ConvertToSumItem(responseData.Data.Sum, "campaign_report")
|
||||||
|
if sumItem == nil {
|
||||||
|
t.Fatal("转换为汇总数据失败")
|
||||||
|
}
|
||||||
|
|
||||||
|
if sumItem.CampaignName == "" {
|
||||||
|
t.Error("计划名称为空")
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("✓ 汇总数据转换成功:计划=%s\n", sumItem.CampaignName)
|
||||||
|
|
||||||
|
detailItems := converter.ConvertToDetailItems(responseData.Data.Detail, "campaign_report")
|
||||||
|
if len(detailItems) == 0 {
|
||||||
|
t.Fatal("转换为明细数据失败")
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("✓ 明细数据转换成功:数量=%d\n", len(detailItems))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncCampaignReportWithDB(t *testing.T) {
|
||||||
|
ctx := gctx.New()
|
||||||
|
syncService := NewSyncService()
|
||||||
|
|
||||||
|
req := &CampaignReportRequest{
|
||||||
|
AdvertiserID: 10001,
|
||||||
|
StartTime: time.Now().AddDate(0, 0, -30).UnixNano() / 1e6,
|
||||||
|
EndTime: time.Now().UnixNano() / 1e6,
|
||||||
|
SelectColumns: []string{"impression", "click", "cost", "t0GMV"},
|
||||||
|
GroupType: 1,
|
||||||
|
QueryVersion: 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := syncService.SyncCampaignReport(ctx, req, true)
|
||||||
|
if err != nil {
|
||||||
|
t.Logf("同步失败(可能是数据库问题): %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("✓ 同步结果:汇总成功=%v, 汇总 ID=%d, 明细数量=%d\n",
|
||||||
|
result.SumSuccess, result.SumID, result.DetailCount)
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//// TestScheduledSyncTask 测试定时同步任务(每小时执行一次,全量分页抽取)
|
||||||
|
//func TestScheduledSyncTask(t *testing.T) {
|
||||||
|
// ctx := gctx.New()
|
||||||
|
// syncService := NewSyncService()
|
||||||
|
//
|
||||||
|
// req := &CampaignReportRequest{
|
||||||
|
// AdvertiserID: 10001,
|
||||||
|
// StartTime: time.Now().AddDate(0, 0, -30).UnixNano() / 1e6,
|
||||||
|
// EndTime: time.Now().UnixNano() / 1e6,
|
||||||
|
// SelectColumns: []string{"impression", "click", "cost", "t0GMV"},
|
||||||
|
// GroupType: 1,
|
||||||
|
// QueryVersion: 1,
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// logrus.Info("=== 开始执行定时同步任务 ===")
|
||||||
|
// result, err := syncService.SyncCampaignReportWithPagination(ctx, req, true, 3)
|
||||||
|
// if err != nil {
|
||||||
|
// t.Logf("定时同步任务失败:%v", err)
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// fmt.Printf("✓ 定时同步完成:\n")
|
||||||
|
// fmt.Printf(" 汇总数据:成功=%v, ID=%d\n", result.SumSuccess, result.SumID)
|
||||||
|
// fmt.Printf(" 明细数据:总数=%d, 成功=%d, 失败=%d\n",
|
||||||
|
// result.DetailCount, result.DetailSuccessCount, result.DetailFailCount)
|
||||||
|
//}
|
||||||
|
|
||||||
|
func BenchmarkSyncCampaignReport(b *testing.B) {
|
||||||
|
ctx := gctx.New()
|
||||||
|
syncService := NewSyncService()
|
||||||
|
req := &CampaignReportRequest{
|
||||||
|
AdvertiserID: 10001,
|
||||||
|
StartTime: time.Now().AddDate(0, 0, -30).UnixNano() / 1e6,
|
||||||
|
EndTime: time.Now().UnixNano() / 1e6,
|
||||||
|
SelectColumns: []string{"impression", "click", "cost"},
|
||||||
|
GroupType: 1,
|
||||||
|
QueryVersion: 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
b.ResetTimer()
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
_, _ = syncService.SyncCampaignReport(ctx, req, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user