tkcashgame_v4/app/eonline/internal/biz/adjust/utils.go

402 lines
19 KiB
Go

package adjust
import (
"fmt"
"sandc/pkg/utils"
"strings"
"time"
)
type CallbackInfo struct {
ActivityKind string `json:"activity_kind"`
AdgroupName string `json:"adgroup_name"`
Adid string `json:"adid"`
AndroidId string `json:"android_id"`
AndroidIdMd5 string `json:"android_id_md5"`
AppId string `json:"app_id"`
AppName string `json:"app_name"`
AppNameDashboard string `json:"app_name_dashboard"`
AppToken string `json:"app_token"`
AppVersion string `json:"app_version"`
AppVersionRaw string `json:"app_version_raw"`
AppVersionShort string `json:"app_version_short"`
AttStatus string `json:"att_status"`
AttributionExpiresAt int64 `json:"attribution_expires_at"`
CallbackTtl string `json:"callback_ttl"`
CampaignName string `json:"campaign_name"`
City string `json:"city"`
ClickTime string `json:"click_time"`
ClickTimeHour string `json:"click_time_hour"`
ConnectionType string `json:"connection_type"`
ConversionDuration string `json:"conversion_duration"`
Country string `json:"country"`
CountrySubdivision string `json:"country_subdivision"`
CpuType string `json:"cpu_type"`
CreatedAt int64 `json:"created_at"`
CreatedAtHour int64 `json:"created_at_hour"`
CreatedAtMilli int64 `json:"created_at_milli"`
CreativeName string `json:"creative_name"`
Currency string `json:"currency"`
DbmCampaignType string `json:"dbm_campaign_type"`
DbmCreativeId string `json:"dbm_creative_id"`
DbmExchangeId string `json:"dbm_exchange_id"`
DbmExternalCustomerId string `json:"dbm_external_customer_id"`
DbmInsertionOrderId string `json:"dbm_insertion_order_id"`
DbmLineItemId string `json:"dbm_line_item_id"`
DbmLineItemName string `json:"dbm_line_item_name"`
DcmCampaignType string `json:"dcm_campaign_type"`
DcmCreativeId string `json:"dcm_creative_id"`
DcmExternalCustomerId string `json:"dcm_external_customer_id"`
DcmPlacementId string `json:"dcm_placement_id"`
DcmPlacementName string `json:"dcm_placement_name"`
DcmSiteId string `json:"dcm_site_id"`
Deeplink string `json:"deeplink"`
DeviceAtlasId string `json:"device_atlas_id"`
DeviceManufacturer string `json:"device_manufacturer"`
DeviceModel string `json:"device_model"`
DeviceName string `json:"device_name"`
DeviceType string `json:"device_type"`
EngagementTime string `json:"engagement_time"`
EngagementTimeHour string `json:"engagement_time_hour"`
Environment string `json:"environment"`
Event string `json:"event"`
EventCostId string `json:"event_cost_id"`
EventName string `json:"event_name"`
ExternalDeviceIdMd5 string `json:"external_device_id_md5"`
FbDeeplinkAccountId string `json:"fb_deeplink_account_id"`
FbDeeplinkAdId string `json:"fb_deeplink_ad_id"`
FbDeeplinkAdgroupId string `json:"fb_deeplink_adgroup_id"`
FbDeeplinkCampaignGroupId string `json:"fb_deeplink_campaign_group_id"`
FbDeeplinkCampaignId string `json:"fb_deeplink_campaign_id"`
FbInstallReferrer string `json:"fb_install_referrer"`
FbInstallReferrerAccountId string `json:"fb_install_referrer_account_id"`
FbInstallReferrerAdId string `json:"fb_install_referrer_ad_id"`
FbInstallReferrerAdObjectiveName string `json:"fb_install_referrer_ad_objective_name"`
FbInstallReferrerAdgroupId string `json:"fb_install_referrer_adgroup_id"`
FbInstallReferrerAdgroupName string `json:"fb_install_referrer_adgroup_name"`
FbInstallReferrerCampaignGroupId string `json:"fb_install_referrer_campaign_group_id"`
FbInstallReferrerCampaignGroupName string `json:"fb_install_referrer_campaign_group_name"`
FbInstallReferrerCampaignId string `json:"fb_install_referrer_campaign_id"`
FbInstallReferrerCampaignName string `json:"fb_install_referrer_campaign_name"`
FbInstallReferrerPublisherPlatform string `json:"fb_install_referrer_publisher_platform"`
FireAdid string `json:"fire_adid"`
FirstTracker string `json:"first_tracker"`
FirstTrackerName string `json:"first_tracker_name"`
Gbraid string `json:"gbraid"`
Gclid string `json:"gclid"`
GmpProductType string `json:"gmp_product_type"`
GoogleAdsAdType string `json:"google_ads_ad_type"`
GoogleAdsAdgroupId string `json:"google_ads_adgroup_id"`
GoogleAdsAdgroupName string `json:"google_ads_adgroup_name"`
GoogleAdsCampaignId string `json:"google_ads_campaign_id"`
GoogleAdsCampaignName string `json:"google_ads_campaign_name"`
GoogleAdsCampaignType string `json:"google_ads_campaign_type"`
GoogleAdsCreativeId string `json:"google_ads_creative_id"`
GoogleAdsEngagementType string `json:"google_ads_engagement_type"`
GoogleAdsExternalCustomerId string `json:"google_ads_external_customer_id"`
GoogleAdsKeyword string `json:"google_ads_keyword"`
GoogleAdsMatchtype string `json:"google_ads_matchtype"`
GoogleAdsNetworkSubtype string `json:"google_ads_network_subtype"`
GoogleAdsNetworkType string `json:"google_ads_network_type"`
GoogleAdsPlacement string `json:"google_ads_placement"`
GoogleAdsVideoId string `json:"google_ads_video_id"`
GoogleAppSetId string `json:"google_app_set_id"`
GpsAdid string `json:"gps_adid"`
GpsAdidMd5 string `json:"gps_adid_md5"`
HardwareName string `json:"hardware_name"`
IadAdId string `json:"iad_ad_id"`
IadConversionType string `json:"iad_conversion_type"`
IadCountryOrRegion string `json:"iad_country_or_region"`
IadKeyword string `json:"iad_keyword"`
IadKeywordId string `json:"iad_keyword_id"`
IadOrgId string `json:"iad_org_id"`
Idfa string `json:"idfa"`
IdfaAndroidId string `json:"idfa_android_id"`
IdfaGpsAdid string `json:"idfa_gps_adid"`
IdfaGpsAdidFireAdid string `json:"idfa_gps_adid_fire_adid"`
IdfaMd5 string `json:"idfa_md5"`
IdfaMd5Hex string `json:"idfa_md5_hex"`
IdfaUpper string `json:"idfa_upper"`
Idfv string `json:"idfv"`
IdfvGoogleAppSetId string `json:"idfv_google_app_set_id"`
ImpressionBased string `json:"impression_based"`
ImpressionTime string `json:"impression_time"`
ImpressionTimeHour string `json:"impression_time_hour"`
InstalledAt int64 `json:"installed_at"`
InstalledAtHour int64 `json:"installed_at_hour"`
IpAddress string `json:"ip_address"`
IsImported string `json:"is_imported"`
IsOrganic string `json:"is_organic"`
IsReattributed string `json:"is_reattributed"`
IsS2s string `json:"is_s2s"`
Isp string `json:"isp"`
Label string `json:"label"`
Language string `json:"language"`
LastFallbackTime string `json:"last_fallback_time"`
LastFallbackTimeHour string `json:"last_fallback_time_hour"`
LastSessionTime string `json:"last_session_time"`
LastTracker string `json:"last_tracker"`
LastTrackerName string `json:"last_tracker_name"`
LifetimeSessionCount string `json:"lifetime_session_count"`
MacMd5 string `json:"mac_md5"`
MacSha1 string `json:"mac_sha1"`
MatchType string `json:"match_type"`
Mcc string `json:"mcc"`
Mnc string `json:"mnc"`
NetworkName string `json:"network_name"`
NetworkType string `json:"network_type"`
Nonce string `json:"nonce"`
Oaid string `json:"oaid"`
OaidMd5 string `json:"oaid_md5"`
OsName string `json:"os_name"`
OsVersion string `json:"os_version"`
PartnerParameters string `json:"partner_parameters"`
Platform string `json:"platform"`
PostalCode string `json:"postal_code"`
PredictedValue string `json:"predicted_value"`
PredictionLabel string `json:"prediction_label"`
PredictionPeriodDays string `json:"prediction_period_days"`
ProxyIpAddress string `json:"proxy_ip_address"`
PublisherParameters string `json:"publisher_parameters"`
PushToken string `json:"push_token"`
Random string `json:"random"`
RandomUserId string `json:"random_user_id"`
ReattributedAt int64 `json:"reattributed_at"`
ReattributedAtHour int64 `json:"reattributed_at_hour"`
ReceivedAt int64 `json:"received_at"`
Referrer string `json:"referrer"`
Reftag string `json:"reftag"`
Region string `json:"region"`
ReinstalledAt int64 `json:"reinstalled_at"`
ReportingCurrency string `json:"reporting_currency"`
ReportingRevenue string `json:"reporting_revenue"`
Revenue string `json:"revenue"`
RevenueCny string `json:"revenue_cny"`
RevenueCnyCents string `json:"revenue_cny_cents"`
RevenueFloat string `json:"revenue_float"`
RevenueUsd string `json:"revenue_usd"`
RevenueUsdCents string `json:"revenue_usd_cents"`
Rida string `json:"rida"`
RokuContentId string `json:"roku_content_id"`
RokuPlacementType string `json:"roku_placement_type"`
SanEngagementTimes string `json:"san_engagement_times"`
SdkVersion string `json:"sdk_version"`
SessionCount string `json:"session_count"`
SimSlotIds string `json:"sim_slot_ids"`
SkCoarseConversionValue string `json:"sk_coarse_conversion_value"`
SkConversionValue string `json:"sk_conversion_value"`
SkConversionValueDevice string `json:"sk_conversion_value_device"`
SkConversionValueDeviceTime string `json:"sk_conversion_value_device_time"`
SkConversionValueStatus string `json:"sk_conversion_value_status"`
SkConversionValueTime string `json:"sk_conversion_value_time"`
SkCvWindowExpiration string `json:"sk_cv_window_expiration"`
SkRegisteredAt int64 `json:"sk_registered_at"`
SkTimerExpiration string `json:"sk_timer_expiration"`
SnapchatAdId string `json:"snapchat_ad_id"`
Store string `json:"store"`
ThirdPartySharingDisabled string `json:"third_party_sharing_disabled"`
Tifa string `json:"tifa"`
TimeSpent string `json:"time_spent"`
Timezone string `json:"timezone"`
Tracker string `json:"tracker"`
TrackerName string `json:"tracker_name"`
TrackingEnabled string `json:"tracking_enabled"`
TrackingLimited string `json:"tracking_limited"`
TweetId string `json:"tweet_id"`
TwitterLineItemId string `json:"twitter_line_item_id"`
UninstalledAt int64 `json:"uninstalled_at"`
UserAgent string `json:"user_agent"`
Vida string `json:"vida"`
VizioContentId string `json:"vizio_content_id"`
VizioPlacementType string `json:"vizio_placement_type"`
Wbraid string `json:"wbraid"`
WebUuid string `json:"web_uuid"`
WinAdid string `json:"win_adid"`
WinHwid string `json:"win_hwid"`
WinNaid string `json:"win_naid"`
WinUdid string `json:"win_udid"`
WithinCallbackTtl string `json:"within_callback_ttl"`
YahooCreativeId string `json:"yahoo_creative_id"`
YahooCreativeName string `json:"yahoo_creative_name"`
YahooSiteId string `json:"yahoo_site_id"`
AdImpressionsCount int64 `json:"ad_impressions_count,omitempty"` // 时间
AdMediationPlatform string `json:"ad_mediation_platform,omitempty"`
AdRevenueNetwork string `json:"ad_revenue_network,omitempty"`
AdRevenuePayload string `json:"ad_revenue_payload,omitempty"`
AdRevenuePlacement string `json:"ad_revenue_placement,omitempty"`
AdRevenueUnit string `json:"ad_revenue_unit,omitempty"`
}
type AdjustExportFilter struct {
Filename string
Tokens []string
Event string
Fields []string
CreatedAtFrom time.Time
CreatedAtTo time.Time
Location *time.Location //当前时期
Countries []string
Channels []string
InstallTimeFrom *time.Time
InstallTimeTo *time.Time
InstallHour *int
SumFields []string
Conditons map[string][]string
ConditionsNeq map[string][]string
CsvHeaders []string //csv头部
Offset int
}
type AdjustCondition struct {
Key int64 `json:"key"`
Value string `json:"value"`
}
type CallBackData struct {
Token string
Content []string
MapKeyData map[string]interface{}
}
type AdjustEventType string
const (
AdjustEventTypeInstall AdjustEventType = "install"
AdjustEventTypeGlobal AdjustEventType = "global"
AdjustEventTypeAdRevenue AdjustEventType = "ad_revenue"
)
func (d AdjustEventType) String() string {
return string(d)
}
func CheckAdjustQueueCondition(filter *AdjustExportFilter, info *CallbackInfo) (*CallBackData, bool) {
//判断token
if !InSlice(info.AppToken, filter.Tokens) {
return nil, false
}
//判断事件
if filter.Event == AdjustEventTypeGlobal.String() {
if info.ActivityKind == AdjustEventTypeAdRevenue.String() {
return nil, false
}
} else {
if info.ActivityKind != filter.Event {
return nil, false
}
}
//判断创建时间 @todo
fromTime, _ := time.ParseInLocation(time.DateTime, fmt.Sprintf("%s 00:00:00", filter.CreatedAtFrom.In(time.Local).Format(time.DateOnly)), filter.Location)
toTime, _ := time.ParseInLocation(time.DateTime, fmt.Sprintf("%s 23:59:59", filter.CreatedAtTo.In(time.Local).Format(time.DateOnly)), filter.Location)
if info.CreatedAt < fromTime.Unix() || info.CreatedAt > toTime.Unix() {
return nil, false
}
//判断国家
if len(filter.Countries) > 0 {
if !InSlice(info.Country, filter.Countries) {
return nil, false
}
}
//判断渠道
if len(filter.Channels) > 0 {
if !InSlice(info.NetworkName, filter.Channels) {
return nil, false
}
}
//判断安装时间
if filter.InstallTimeFrom != nil && filter.InstallTimeTo != nil {
installFormTime, _ := time.ParseInLocation(time.DateTime, fmt.Sprintf("%s 00:00:00", filter.InstallTimeFrom.In(time.Local).Format(time.DateOnly)), filter.Location)
installToTime, _ := time.ParseInLocation(time.DateTime, fmt.Sprintf("%s 23:59:59", filter.InstallTimeTo.In(time.Local).Format(time.DateOnly)), filter.Location)
if info.InstalledAt < installFormTime.Unix() || info.InstalledAt > installToTime.Unix() {
return nil, false
}
}
//判断小时
if filter.InstallHour != nil {
installHour := *filter.InstallHour
if info.CreatedAt-info.InstalledAt > 3600*int64(installHour) {
return nil, false
}
}
mapKeyData := utils.StructToMapJson(*info)
//判断自定义条件等于,仅支持string
if len(filter.Conditons) > 0 {
for k, filterValue := range filter.Conditons {
//如果自定义字段存在,判断值是否符合
if mapVal, ok := mapKeyData[k].(string); ok {
if !InSlice(mapVal, filterValue) {
return nil, false
}
} else {
return nil, false
}
}
}
//判断自定义条件不等于,仅支持string
if len(filter.ConditionsNeq) > 0 {
for k, filterValue := range filter.ConditionsNeq {
//如果自定义字段存在,判断值是否符合
if mapVal, ok := mapKeyData[k].(string); ok {
if utils.InSlice("NULL", filterValue) {
if mapVal == "" {
return nil, false
}
} else {
// 存在值则跳过数据
if InSlice(mapVal, filterValue) {
return nil, false
}
}
} else {
return nil, false
}
}
}
//获取筛选字段的值
content := make([]string, 0)
for _, field := range filter.Fields {
if mapVal, ok := mapKeyData[field]; ok {
content = append(content, fmt.Sprintf("%v", mapVal))
}
//单独处理date
if field == "date" {
rowDate := time.Unix(info.CreatedAt, 0)
rowDateString := rowDate.In(filter.Location).Format(time.DateOnly)
content = append(content, rowDateString)
}
}
//根据自定义字段返回数据
data := &CallBackData{
Token: info.AppToken,
Content: content,
MapKeyData: mapKeyData,
}
return data, true
}
func InSlice(str string, slice []string) bool {
for _, v := range slice {
if formatString(v) == formatString(str) {
return true
}
}
return false
}
func formatString(str string) string {
return strings.TrimSpace(strings.ToLower(str))
}