330 lines
15 KiB
Go
330 lines
15 KiB
Go
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) GenerateAccountReportRequest() *AccountReportRequest {
|
|
return &AccountReportRequest{
|
|
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: &AccountSelectParam{
|
|
CampaignIDs: []int64{1, 2, 3},
|
|
},
|
|
PageInfo: &PageInfo{
|
|
CurrentPage: 1,
|
|
PageSize: 10,
|
|
},
|
|
}
|
|
}
|
|
|
|
func (m *MockDataGenerator) GenerateAccountReportResponse() *AccountReportResponse {
|
|
return m.GenerateAccountReportResponseWithPage(1, 10)
|
|
}
|
|
|
|
func (m *MockDataGenerator) GenerateAccountReportResponseWithPage(page int, pageSize int) *AccountReportResponse {
|
|
sumData := m.generateSumData()
|
|
|
|
detailData := m.generateDetailDataByPage(page, pageSize)
|
|
totalCount := 23
|
|
|
|
return &AccountReportResponse{
|
|
Code: 0,
|
|
Message: "success",
|
|
Data: &AccountReportData{
|
|
Sum: sumData,
|
|
Detail: detailData,
|
|
TotalCount: totalCount,
|
|
},
|
|
}
|
|
}
|
|
|
|
func (m *MockDataGenerator) generateDetailDataByPage(page int, pageSize int) []*AccountReportItem {
|
|
totalCount := 23
|
|
|
|
if page < 1 || pageSize <= 0 {
|
|
return []*AccountReportItem{}
|
|
}
|
|
|
|
startIndex := (page - 1) * pageSize
|
|
|
|
if startIndex >= totalCount {
|
|
return []*AccountReportItem{}
|
|
}
|
|
|
|
endIndex := startIndex + pageSize
|
|
if endIndex > totalCount {
|
|
endIndex = totalCount
|
|
}
|
|
|
|
actualCount := endIndex - startIndex
|
|
items := make([]*AccountReportItem, actualCount)
|
|
|
|
for i := 0; i < actualCount; i++ {
|
|
itemIndex := startIndex + i + 1
|
|
|
|
campaignId := int64(itemIndex)
|
|
unitId := int64(itemIndex * 10)
|
|
creativeId := int64(itemIndex * 100)
|
|
|
|
campaignName := "测试计划_" + string(rune('A'+itemIndex-1))
|
|
unitName := "测试单元_" + string(rune('A'+itemIndex-1))
|
|
creativeName := "测试创意_" + string(rune('A'+itemIndex-1))
|
|
|
|
item := m.generateSumData()
|
|
|
|
item.CampaignId = &campaignId
|
|
item.UnitId = &unitId
|
|
item.CreativeId = &creativeId
|
|
item.CampaignName = campaignName
|
|
item.UnitName = unitName
|
|
item.CreativeName = creativeName
|
|
|
|
items[i] = (*AccountReportItem)(item)
|
|
}
|
|
|
|
return items
|
|
}
|
|
|
|
func (m *MockDataGenerator) generateSumData() *AccountReportSum {
|
|
cost := m.randomFloat(1000, 10000)
|
|
impression := m.randomInt64(10000, 100000)
|
|
click := m.randomInt64(100, 1000)
|
|
|
|
return &AccountReportSum{
|
|
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: int64Ptr(23),
|
|
CampaignName: "测试计划",
|
|
UnitId: int64Ptr(10),
|
|
UnitName: "测试单元",
|
|
CreativeId: int64Ptr(13),
|
|
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 int64Ptr(v int64) *int64 {
|
|
return &v
|
|
}
|
|
|
|
func (m *MockDataGenerator) generateDetailData(count int) []*AccountReportItem {
|
|
items := make([]*AccountReportItem, count)
|
|
for i := 0; i < count; i++ {
|
|
items[i] = (*AccountReportItem)(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
|
|
}
|