diff --git a/README.md b/README.md index fe10588..a554c02 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,28 @@ https://dev2.baidu.com/content?sceneType=0&pageId=101213&nodeId=663&subhead= ## 广电通 - 腾讯广告 https://developers.e.qq.com/docs/guide/conversion/new_version/dianjijiance -## 快手 +## 快手 https://developers.e.kuaishou.com/docs?docType=DSP&documentId=1942 ## vivo https://ad.vivo.com.cn/help?id=353 ## 汇川 + + + +## V2 版本设计 + +### 1.1 巨量引擎 - 更新时间 2023-5-17 13:21:22 +- + + + + + + + + + + ## 投放时间表 - ps 要避开系统正常运行的时间点,然后进行更新代码 diff --git a/TODO-list.md b/TODO-list.md new file mode 100644 index 0000000..19e7157 --- /dev/null +++ b/TODO-list.md @@ -0,0 +1,71 @@ +## 巨量开发 + +- v1, v2 版本基础回值入库 - 数据库表设计 +- 投放包字段设计入库, 【关键字段, 进行冗余存储】 + 所有main参数 + - v2 PROMOTION_ID PROMOTION_NAME + - v1 AID AID_NAME CID CID_NAME CSITE? + +## 通用 + +- 【平台通用】 投放计划监测及 DMP 监测 【不同广告计划, 线索来的数量, 模型计算出的数量】 + - 需要监测的值 填入需要进行检测的值-ID, 采样时间-定时任务统计, 采集的值, 计算的值, 有效值 + - 影响我们的广告质量分算法 +- 【平台通用】 配置时候生成, 不同版本, 不同配置位置的链接 + - 选择平台, 选择版本 + - 不同的位置[配置文档] +- 【平台通用】 定时整理回值的数据 + - 定时删除大表多少天的数据 - 3个月以前的 - 每 5000 条删/次 +- 【平台通用】 默认开启投放包的开关, 进行是否收集投放包的抉择, 或者投放包的合并等基础操作 + - 投放包收集开启, 关闭 + - 差集, 并集, 交集 + - 投放包打分 + - 使用次数 + - 更新时间等 + +## 百度开发 + +- 百度和广点通类似 +- https://dev2.baidu.com/content?sceneType=0&pageId=101213&nodeId=663&subhead= + +## 广点通开发 +- 相关文档 + - 转化归因配置 + - 应用转化, Web落地页转化, 小程序转化, 公众号转化, 小游戏转化, 企业微信转化 + - https://e.qq.com/ads/helpcenter/detail?cid=3018&pid=7993 + - 配置点击监测/ 曝光监测/ 效果监测 + - https://developers.e.qq.com/docs/guide/conversion/new_version/dianjijiance + - https://developers.e.qq.com/docs/guide/conversion/new_version/baoguangjiance + - https://developers.e.qq.com/docs/guide/conversion/new_version/actiontrace [不常用] + +- 配置步骤 + - 步骤1: 选择新建转化方式 + - 步骤2: 填写基本信息、选填监测链接 + - 步骤3: 通过联调激活转化 + - 步骤4: 创建广告使用转化归因 + +## 快手 + + +--- + +# 设置保存投放包的收集规则 + +- 文件加密 (固定秘钥),专门生产一个文件的秘钥库进行管理密码 + +- 以每天为一个事件节点产生一个文件目录 : /ad-bk-data/source/2023-5-26/ +- 每一个tag每天的全量为一个文件 (时间 0-24点) : + - tag值.csv + + +- 处理后的文件夹 +- /ad-bk-data/produce/ + - 2023-5-26-prod-6位随机值.csv + +- 关联数据表, + - 存储信息记录表 {id, gmt_create, gmt_modify, operator, file_name, file_path, file_pwd, file_status, weight} + - file_pwd 文件密码 + - file_status 文件状态, 0-文件正常可用, 1-正在生成, 2-文件状态异常, 3-文件操作禁用 + - weight 权重, 根据调用次数和手动设置加权来进行配置, 初始0, 最高 10, 调用一次 + 1, 30天未调用 -1 + - 调用信息记录表 {id, gmt_create, gmt_modify, operator, file_name, file_path, opt_way, back_status} + - opt_way: 操作方式 【todo 之后进行补充区分】 + - back_status:是否成功 0-成功 1-失败 diff --git a/file/参数对应表.xlsx b/file/参数对应表.xlsx new file mode 100644 index 0000000..6c62c91 Binary files /dev/null and b/file/参数对应表.xlsx differ diff --git a/sql/initDB.sql b/sql/initDB.sql new file mode 100644 index 0000000..c1ae54f --- /dev/null +++ b/sql/initDB.sql @@ -0,0 +1,266 @@ +CREATE DATABASE IF NOT EXISTS `db_ad` default character set utf8mb4 COLLATE utf8mb4_general_ci; + +DROP TABLE IF EXISTS `tb_jl_v2_backdata`; +CREATE TABLE `tb_jl_v2_backdata` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `gmt_create` datetime(0) NULL DEFAULT NULL, + `gmt_modified` datetime(0) NULL DEFAULT NULL, + `operator` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人', + `promotion_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '代表巨量广告体验版的广告ID', + `project_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '代表巨量广告体验版的项目ID', + `promotion_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '巨量广告体验版中的广告名称', + `project_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '巨量广告体验版中的项目名称', + `mid1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '图片素材宏参数(下发原始素材id)', + `mid2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '标题素材宏参数(下发原始素材id)', + `mid3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '视频素材宏参数(下发原始素材id)', + `mid4` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '搭配试玩素材宏参数(下发原始素材id)', + `mid5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '落地页素材宏参数(下发原始素材id)', + `mid6` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '安卓下载详情页素材宏参数(下发原始素材id)', + `csite` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告投放位置', + `convert_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '转化id', + `request_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求下发的id', + `track_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求下发的id&创意id的md5,16位', + `os` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作系统平台', + `ua` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户代理 (User Agent)', + `geo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '位置信息', + `ts` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户端发生广告点击事件的时间', + `model` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机型号', + `imei` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '安卓的设备 ID 的 md5 摘要32位', + `idfa` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ' IOS 6+的设备id字段,32位', + `idfa_md5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'IOS 6+的设备id的md5摘要,32位', + `oaid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Android Q及更高版本的设备号,32位', + `oaid_md5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Android Q及更高版本的设备号的md5摘要,32位', + `mac` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '移动设备mac地址', + `callback_param` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '一些跟广告信息相关的回调参数,内容是一个加密字符串,在调用事件回传接口的时候会用到', + `callback_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '直接把调用事件回传接口的url生成出来,广告主可以直接使用', + `advertiser_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告主id', + `tag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用于监测链接的自定义带参格式', + `vpoint` int(20) NULL DEFAULT NULL COMMENT '用于区分广告配置的地方', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_imei`(`imei`) USING BTREE, + INDEX `idx_idfa`(`idfa`) USING BTREE, + INDEX `idx_oaid`(`oaid`) USING BTREE, + INDEX `idx_tag`(`tag`) USING BTREE +)ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +SET FOREIGN_KEY_CHECKS = 1; + + +DROP TABLE IF EXISTS `tb_jl_v1_backdata`; +CREATE TABLE `tb_jl_v1_backdata` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `gmt_create` datetime(0) NULL DEFAULT NULL, + `gmt_modified` datetime(0) NULL DEFAULT NULL, + `operator` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人', + `aid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告计划id', + `aid_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告计划名称', + `cid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告创意 id', + `cid_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告创意名称', + `campaign_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ' 广告组 id', + `campaign_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告组名称', + `ctype` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创意样式', + `csite` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告投放位置', + `convert_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '转化id', + `request_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求下发的id', + `track_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求下发的id&创意id的md5,16位', + `os` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作系统平台', + `ua` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户代理 (User Agent)', + `geo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '位置信息', + `ts` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户端发生广告点击事件的时间', + `model` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机型号', + `imei` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '安卓的设备 ID 的 md5 摘要32位', + `idfa` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ' IOS 6+的设备id字段,32位', + `idfa_md5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'IOS 6+的设备id的md5摘要,32位', + `oaid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Android Q及更高版本的设备号,32位', + `oaid_md5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Android Q及更高版本的设备号的md5摘要,32位', + `mac` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '移动设备mac地址', + `callback_param` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '一些跟广告信息相关的回调参数,内容是一个加密字符串,在调用事件回传接口的时候会用到', + `callback_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '直接把调用事件回传接口的url生成出来,广告主可以直接使用', + `advertiser_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告主id', + `tag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用于监测链接的自定义带参格式', + `vpoint` int(20) NULL DEFAULT NULL COMMENT '用于区分广告配置的地方', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_imei`(`imei`) USING BTREE, + INDEX `idx_idfa`(`idfa`) USING BTREE, + INDEX `idx_oaid`(`oaid`) USING BTREE, + INDEX `idx_tag`(`tag`) USING BTREE +)ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +SET FOREIGN_KEY_CHECKS = 1; + + +DROP TABLE IF EXISTS `tb_ks_new_backdata`; +CREATE TABLE `tb_ks_new_backdata` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `gmt_create` datetime(0) NULL DEFAULT NULL, + `gmt_modified` datetime(0) NULL DEFAULT NULL, + `operator` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人', + `account_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告账户ID', + `aid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告组ID', + `cid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告创意 id', + `did` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告计划ID', + `d_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ' 广告计划名称', + `photo_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '素材ID', + `oaid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Android设备标识计算MD5', + `imei` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '安卓广告唯一标示', + `imei_hash` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Android下的IMEI,hash', + `idfa` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'iOS下的idfa计算MD5', + `idfa_hash` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'iOS下的idfa计算SHA1', + `mac_bak` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '对 MAC 进行 MD5', + `mac` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '对 MAC 去除分隔符之后进行 MD5', + `ts` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户端发生广告点击事件的时间', + `ua` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户端UA', + `os` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'OS系统', + `model` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机型号', + `call_back` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '回调信息,编码一次的URL', + `ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户IP地址', + `csite` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告投放场景', + `ac_creative` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否为高级创意', + `win_for_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '仅支持搜索流量', + `callback_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '直接把调用事件回传接口的url生成出来,广告主可以直接使用', + `tag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用于监测链接的自定义带参格式', + `vpoint` int(20) NULL DEFAULT NULL COMMENT '用于区分广告配置的地方', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_imei`(`imei`) USING BTREE, + INDEX `idx_idfa`(`idfa`) USING BTREE, + INDEX `idx_oaid`(`oaid`) USING BTREE, + INDEX `idx_tag`(`tag`) USING BTREE +)ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +SET FOREIGN_KEY_CHECKS = 1; + + +DROP TABLE IF EXISTS `tb_bd_new_backdata`; +CREATE TABLE `tb_bd_new_backdata` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `gmt_create` datetime(0) NULL DEFAULT NULL, + `gmt_modified` datetime(0) NULL DEFAULT NULL, + `operator` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人', + `akey` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '双方加密密钥', + `userid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '账户ID', + `aid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创意ID', + `pid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '计划ID', + `uid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ' 单元ID', + `callback_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '效果数据回传URL', + `ext_info` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '点击信息/曝光信息', + `click_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '点击或曝光唯一标识', + `idfa` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'IOS设备标识', + `imei` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Android设备标识', + `oaid_MD5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'oaid编码方式', + `oaid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '原文oaid', + `mac` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'mac地址', + `ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户IP地址', + `ua` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户端UA', + `os_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'OS系统', + `ts` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '时间戳', + `device_info` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '已废弃', + `interactions_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户对广告进行的所有交互操作', + `tag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用于监测链接的自定义带参格式', + `vpoint` int(20) NULL DEFAULT NULL COMMENT '用于区分广告配置的地方', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_imei`(`imei`) USING BTREE, + INDEX `idx_idfa`(`idfa`) USING BTREE, + INDEX `idx_oaid`(`oaid`) USING BTREE, + INDEX `idx_tag`(`tag`) USING BTREE +)ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +SET FOREIGN_KEY_CHECKS = 1; + + + + +DROP TABLE IF EXISTS `tb_gdt_new_backdata`; +CREATE TABLE `tb_gdt_new_backdata` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `gmt_create` datetime(0) NULL DEFAULT NULL, + `gmt_modified` datetime(0) NULL DEFAULT NULL, + `operator` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人', + `account_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告主id', + `click_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '点击id', + `click_time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '点击时间', + `campaign_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ' 计划id', + `adgroup_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告组id', + `ad_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告id', + `device_os_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备类型', + `promoted_object_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '应用id', + `promoted_object_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '推广类型', + `imei` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '安卓设备id', + `idfa` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '苹果设备id', + `mac` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'mac 地址', + `ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'mac地址', + `user_agent` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户代理(user_agent)', + `callback` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '直接提供上报信息回传接口的 url', + `oaid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '安卓系统移动终端补充设备标识', + `tag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用于监测链接的自定义带参格式', + `vpoint` int(20) NULL DEFAULT NULL COMMENT '用于区分广告配置的地方', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_muid`(`muid`) USING BTREE, + INDEX `idx_oaid`(`oaid`) USING BTREE, + INDEX `idx_tag`(`tag`) USING BTREE +)ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +SET FOREIGN_KEY_CHECKS = 1; + + + + +-- +--- fixme 方案1: 这个表不一定用(使用这个的话,就必须进行分表分库), 文件里面要收集的字段也参考这个 +--- +DROP TABLE IF EXISTS `tb_tf_source`; +CREATE TABLE `tb_tf_source` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `gmt_create` datetime(0) NULL DEFAULT NULL, + `gmt_modified` datetime(0) NULL DEFAULT NULL, + `operator` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人', + `click_time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '点击时间,时间戳', + `ad_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告名称', + `imei` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '安卓设备id', + `idfa` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '苹果设备id', + `mac` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'mac地址', + `oaid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '安卓系统移动终端补充设备标识', + `tag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用于监测链接的自定义带参格式', + `vpoint` int(20) NULL DEFAULT NULL COMMENT '用于区分广告配置的地方', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_imei`(`imei`) USING BTREE, + INDEX `idx_idfa`(`idfa`) USING BTREE, + INDEX `idx_mac`(`mac`) USING BTREE, + INDEX `idx_idfa`(`idfa`) USING BTREE, + INDEX `idx_oaid`(`oaid`) USING BTREE, + INDEX `idx_oaid`(`tag`) USING BTREE +)ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +SET FOREIGN_KEY_CHECKS = 1; + + +-- +--- fixme 方案2: [推荐] 直接按文件存投放包的文件地址 +--- +DROP TABLE IF EXISTS `tb_tf_source`; +CREATE TABLE `tb_tf_source` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `gmt_create` datetime(0) NULL DEFAULT NULL, + `gmt_modified` datetime(0) NULL DEFAULT NULL, + `operator` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人', + `produce_time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '投放包的产生时间 例如 2023-1-2', + `ad_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '广告名称[多个用逗号]', + `category` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '投放类目', + `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件名称', + `file_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件存放地址', + `file_status` int(20) NULL DEFAULT NULL COMMENT '文件状态, 1-正在生成 2-正常 3-禁用 4-删除', + `last_operator_time` datetime(0) NULL DEFAULT NULL COMMENT '最后操作时间', + `weight` int(20) NULL DEFAULT NULL COMMENT '权重值', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_produce_time`(`produce_time`) USING BTREE, + INDEX `idx_last_operator_time`(`last_operator_time`) USING BTREE +)ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +SET FOREIGN_KEY_CHECKS = 1; + + + + + + + + diff --git a/src/main/java/com/baiyee/adcallback/api/callback/MobileMonitorCallbackNewAPI.java b/src/main/java/com/baiyee/adcallback/api/callback/MobileMonitorCallbackNewAPI.java new file mode 100644 index 0000000..5519491 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/api/callback/MobileMonitorCallbackNewAPI.java @@ -0,0 +1,357 @@ +package com.baiyee.adcallback.api.callback; + +import cn.hutool.core.util.StrUtil; +import com.baiyee.adcallback.api.common.CommonResponse; +import com.baiyee.adcallback.api.vo.*; +import com.baiyee.adcallback.service.AdOriginalityManageService; +import com.baiyee.adcallback.service.AdTFPackageService; +import com.baiyee.adcallback.tools.CheckPlatPointParamsUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * 更新时间 2023-5-18 + * + * 监测互联网回值的基本类 + * + * 涉及: + * 巨量广告, 广电通, 快手, 百度 + * + * @author q + */ +@RestController +@RequestMapping(value = ("/api")) +@Slf4j +public class MobileMonitorCallbackNewAPI { + + + private final AdOriginalityManageService originalityManageService; + + + private final AdTFPackageService adTFPackageService; + + public MobileMonitorCallbackNewAPI(AdOriginalityManageService originalityManageService, AdTFPackageService adTFPackageService) { + this.originalityManageService = originalityManageService; + this.adTFPackageService = adTFPackageService; + } + + + /** + * V2-仅巨量广告体验版 + * + * 【宏参数】 + * promotion_id=__PROMOTION_ID__&project_id=__PROJECT_ID__&promotion_name=__PROMOTION_NAME__&project_name=__PROJECT_NAME__&mid1=__MID1__&mid2=__MID2__&mid3=__MID3__&mid4=__MID4__&mid5=__MID5__&mid6=__MID6__&csite=__CSITE__&convert_id=__CONVERT_ID__&request_id=__REQUEST_ID__&track_id=__TRACK_ID__&os=__OS__&ua=__UA__&geo=__GEO__&ts=__TS__&model=__MODEL__&imei=__IMEI__&idfa=__IDFA__&idfa_md5=__IDFA_MD5__&oaid=__OAID__&oaid_md5=__OAID_MD5__&mac=__MAC__&callback_param=__CALLBACK_PARAM__&callback_url=__CALLBACK_URL__&advertiser_id=__ADVERTISER_ID__&tag=&vpoint= + */ + @RequestMapping(value = "/jl/new/monitor/v2") + public CommonResponse jlMonitorUrlCallbackReqUrlV2( + @RequestParam(value = "promotion_id",defaultValue = "") String promotionId, + @RequestParam(value = "project_id",defaultValue = "") String projectId, + @RequestParam(value = "promotion_name",defaultValue = "") String promotionName, + @RequestParam(value = "project_name",defaultValue = "") String projectName, + @RequestParam(value = "mid1",defaultValue = "") String mid1, + @RequestParam(value = "mid2",defaultValue = "") String mid2, + @RequestParam(value = "mid3",defaultValue = "") String mid3, + @RequestParam(value = "mid4",defaultValue = "") String mid4, + @RequestParam(value = "mid5",defaultValue = "") String mid5, + @RequestParam(value = "mid6",defaultValue = "") String mid6, + @RequestParam(value = "csite",defaultValue = "") String csite, + @RequestParam(value = "convert_id",defaultValue = "") String convertId, + @RequestParam(value = "request_id",defaultValue = "") String requestId, + @RequestParam(value = "track_id",defaultValue = "") String trackId, + @RequestParam(value = "os",defaultValue = "") String os, + @RequestParam(value = "ua",defaultValue = "") String ua, + @RequestParam(value = "geo",defaultValue = "") String geo, + @RequestParam(value = "ts",defaultValue = "") String ts, + @RequestParam(value = "model",defaultValue = "") String model, + @RequestParam(value = "imei",defaultValue = "") String imei, + @RequestParam(value = "idfa",defaultValue = "") String idfa, + @RequestParam(value = "idfa_md5",defaultValue = "") String idfaMD5, + @RequestParam(value = "oaid",defaultValue = "") String oaid, + @RequestParam(value = "oaid_md5",defaultValue = "") String oaidMD5, + @RequestParam(value = "mac",defaultValue = "") String mac, + @RequestParam(value = "callback_param",defaultValue = "") String callbackParam, + @RequestParam(value = "callback_url",defaultValue = "") String callbackUrl, + @RequestParam(value = "advertiser_id",defaultValue = "") String advertiserId, + @RequestParam(value = "tag",defaultValue = "") String tag, + @RequestParam(value = "vpoint",defaultValue = "") int vpoint + ){ + + // 映射 + JuliangMobileMonitorCallbackRequestNewV2VO vo = new JuliangMobileMonitorCallbackRequestNewV2VO( + promotionId,projectId,promotionName,projectName,mid1,mid2,mid3,mid4,mid5,mid6, + csite,convertId,requestId,trackId,os,ua,geo,ts,model, + imei,idfa,idfaMD5,oaid,oaidMD5,mac, + callbackParam,callbackUrl,advertiserId + ); + + // 映射 - Base 参数 + if (StrUtil.isNotBlank(tag) && vpoint >= 0){ + vo.setTag(tag); + vo.setVpoint(vpoint); + } + + // 重点参数校验规则 - 通过则入监控回流Source库 - 较完整字段 + if (CheckPlatPointParamsUtil.checkJLPlatPointV2Param(vo.getOs(), vo.getImei(), vo.getIdfa(), vo.getIdfaMD5())) { + originalityManageService.handleNewJLV2MonitorUrlCallbackDataThenSave(vo); + } + + // 校验以下参数是否存在 - 入投放包库 - 部分字段 + if (CheckPlatPointParamsUtil.checkMainParamForPut(vo.getOaid(), vo.getOaidMD5(), vo.getImei(), null,vo.getIdfa(), vo.getIdfaMD5(), vo.getMac())){ + adTFPackageService.loadJLTFV2PackageData(vo); + } + + return CommonResponse.createBySuccess(); + } + + + /** + * V1-巨量广告1.0 + * + * 【宏参数】 + * aid=__AID__&aid_name=__AID_NAME__&cid=__CID__&cid_name=__CID_NAME__&campaign_id=__CAMPAIGN_ID__&campaign_name=__CAMPAIGN_NAME__&ctype=__CTYPE__&csite=__CSITE__&convert_id=__CONVERT_ID__&request_id=__REQUEST_ID__&track_id=__TRACK_ID__&os=__OS__&ua=__UA__&geo=__GEO__&ts=__TS__&model=__MODEL__&imei=__IMEI__&idfa=__IDFA__&idfa_md5=__IDFA_MD5__&oaid=__OAID__&oaid_md5=__OAID_MD5__&mac=__MAC__&callback_param=__CALLBACK_PARAM__&callback_url=__CALLBACK_URL__&advertiser_id=__ADVERTISER_ID__&tag=&vpoint= + */ + @RequestMapping(value = "/jl/new/monitor/v1") + public CommonResponse jlMonitorUrlCallbackReqUrlV1( + @RequestParam(value = "aid",defaultValue = "") String aid, + @RequestParam(value = "aid_name",defaultValue = "") String aidName, + @RequestParam(value = "cid",defaultValue = "") String cid, + @RequestParam(value = "cid_name",defaultValue = "") String cidName, + @RequestParam(value = "campaign_id",defaultValue = "") String campaignId, + @RequestParam(value = "campaign_name",defaultValue = "") String campaignName, + @RequestParam(value = "ctype",defaultValue = "") String ctype, + @RequestParam(value = "csite",defaultValue = "") String csite, + @RequestParam(value = "convert_id",defaultValue = "") String convertId, + @RequestParam(value = "request_id",defaultValue = "") String requestId, + @RequestParam(value = "track_id",defaultValue = "") String trackId, + @RequestParam(value = "os",defaultValue = "") String os, + @RequestParam(value = "ua",defaultValue = "") String ua, + @RequestParam(value = "geo",defaultValue = "") String geo, + @RequestParam(value = "ts",defaultValue = "") String ts, + @RequestParam(value = "model",defaultValue = "") String model, + @RequestParam(value = "imei",defaultValue = "") String imei, + @RequestParam(value = "idfa",defaultValue = "") String idfa, + @RequestParam(value = "idfa_md5",defaultValue = "") String idfaMD5, + @RequestParam(value = "oaid",defaultValue = "") String oaid, + @RequestParam(value = "oaid_md5",defaultValue = "") String oaidMD5, + @RequestParam(value = "mac",defaultValue = "") String mac, + @RequestParam(value = "callback_param",defaultValue = "") String callbackParam, + @RequestParam(value = "callback_url",defaultValue = "") String callbackUrl, + @RequestParam(value = "advertiser_id",defaultValue = "") String advertiserId, + @RequestParam(value = "tag",defaultValue = "") String tag, + @RequestParam(value = "vpoint",defaultValue = "") Integer vpoint + ){ + // 映射 + JuliangMobileMonitorCallbackRequestNewV1VO vo = new JuliangMobileMonitorCallbackRequestNewV1VO( + aid,aidName,cid,cidName,campaignId,campaignName,ctype, + csite,convertId,requestId,trackId,os,ua,geo,ts,model, + imei,idfa,idfaMD5,oaid,oaidMD5,mac, + callbackParam,callbackUrl,advertiserId + ); + + // 映射 - Base 参数 + if (StrUtil.isNotBlank(tag) && vpoint >= 0){ + vo.setTag(tag); + vo.setVpoint(vpoint); + } + + // 重点参数校验规则 - 通过则入监控回流Source库 - 较完整字段 + if (CheckPlatPointParamsUtil.checkJLPlatPointV2Param(vo.getOs(), vo.getImei(), vo.getIdfa(), vo.getIdfaMD5())) { + originalityManageService.handleNewJLV1MonitorUrlCallbackDataThenSave(vo); + } + + // 校验以下参数是否存在 - 入投放包库 - 部分字段 + if (CheckPlatPointParamsUtil.checkMainParamForPut(vo.getOaid(), vo.getOaidMD5(), vo.getImei(), null,vo.getIdfa(), vo.getIdfaMD5(), vo.getMac())){ + adTFPackageService.loadJLTFV1PackageData(vo); + } + + return CommonResponse.createBySuccess(); + } + + /** + * 快手连接监测 + * + * https://developers.e.kuaishou.com/docs?docType=DSP&documentId=1938 + */ + @RequestMapping(value = "/ks/new/monitor") + public CommonResponse ksMonitorUrlCallbackReqUrl( + @RequestParam(value = "accountid", defaultValue = "") String accountId, + @RequestParam(value = "aid", defaultValue = "") String aid, + @RequestParam(value = "cid", defaultValue = "") String cid, + @RequestParam(value = "did", defaultValue = "") String did, + @RequestParam(value = "dname", defaultValue = "") String dName, + @RequestParam(value = "photoid", defaultValue = "")String photoId, + @RequestParam(value = "oaid", defaultValue = "") String oaid, + @RequestParam(value = "imei", defaultValue = "") String imei, + @RequestParam(value = "imeiHash", defaultValue = "") String imeiHash, + @RequestParam(value = "idfa", defaultValue = "") String idfa, + @RequestParam(value = "idfaHash", defaultValue = "") String idfaHash, + @RequestParam(value = "macBak", defaultValue = "") String macBak, + @RequestParam(value = "mac", defaultValue = "") String mac, + @RequestParam(value = "ts", defaultValue = "") String ts, + @RequestParam(value = "ua", defaultValue = "") String ua, + @RequestParam(value = "os", defaultValue = "") String os, + @RequestParam(value = "model", defaultValue = "") String model, + @RequestParam(value = "callback", defaultValue = "") String callBack, + @RequestParam(value = "ip", defaultValue = "") String ip, + @RequestParam(value = "csite", defaultValue = "") String csite, + @RequestParam(value = "ac_creative", defaultValue = "") String acCreative, + @RequestParam(value = "win_for_id", defaultValue = "") String winForId, + @RequestParam(value = "vpoint", defaultValue = "") int vpoint, + @RequestParam(value = "tag", defaultValue = "") String tag + ){ + KSNewMobileMonitorCallbackRequestVO vo = new KSNewMobileMonitorCallbackRequestVO( + accountId,aid,cid,did,dName,photoId, + oaid,imei,imeiHash,idfa,idfaHash,macBak,mac, + ts,ua,os,model,callBack,ip,csite,acCreative,winForId + ); + + // 映射 - Base 参数 + if (StrUtil.isNotBlank(tag) && vpoint >= 0){ + vo.setTag(tag); + vo.setVpoint(vpoint); + } + + // 重点参数校验规则 - 通过则入监控回流Source库 - 较完整字段 + if (CheckPlatPointParamsUtil.checkKSPlatPointParam(vo.getOs(), vo.getOaid(), vo.getImei(), vo.getImeiHash(), vo.getIdfa(),vo.getIdfaHash())) { + originalityManageService.handleNewKSMonitorUrlCallbackDataThenSave(vo); + } + + // 校验以下参数是否存在 - 入投放包库 - 部分字段 + if (CheckPlatPointParamsUtil.checkMainParamForPut(vo.getOaid(), null, vo.getImei(), null,vo.getIdfa(), null, vo.getMac())){ + adTFPackageService.loadKSTFPackageData(vo); + } + + return CommonResponse.createBySuccess(); + } + + /** + * 百度链接监测 + * + * http://www.test.com/notice?tag=test123&imei_md5={{IMEI_MD5}}&os={{OS}}&ip={{IP}}&ua={{UA}}&ts={{TS}}&userid={{USER_ID}}&pid={{PLAN_ID}}&uid={{UNIT_ID}}&aid={{IDEA_ID}}&click_id={{CLICK_ID}}&callback_url={{CALLBACK_URL}} + */ + @RequestMapping(value = "/bd/new/monitor") + public CommonResponse bdMonitorUrlCallbackReqUrl( + @RequestParam(value = "akey", defaultValue = "") String akey, + @RequestParam(value = "sign", defaultValue = "") String sign, + @RequestParam(value = "userid", defaultValue = "") String userId, + @RequestParam(value = "aid", defaultValue = "") String aid, + @RequestParam(value = "pid", defaultValue = "") String pid, + @RequestParam(value = "uid", defaultValue = "") String uid, + @RequestParam(value = "callback_url", defaultValue = "") String callbackUrl, + @RequestParam(value = "click_id", defaultValue = "") String clickId, + @RequestParam(value = "idfa", defaultValue = "") String idfa, + @RequestParam(value = "imei", defaultValue = "") String imei, + @RequestParam(value = "oaidMD5", defaultValue = "") String oaidMD5, + @RequestParam(value = "oaid", defaultValue = "") String oaid, + @RequestParam(value = "mac", defaultValue = "") String mac, + @RequestParam(value = "ip", defaultValue = "") String ip, + @RequestParam(value = "ua", defaultValue = "") String ua, + @RequestParam(value = "os_type", defaultValue = "") String osType, + @RequestParam(value = "ts", defaultValue = "") Long ts, + @RequestParam(value = "interactionsType", defaultValue = "") String interactionsType, + @RequestParam(value = "ext_info", defaultValue = "") String extInfo, + @RequestParam(value = "vpoint", defaultValue = "") int vpoint, + @RequestParam(value = "tag", defaultValue = "") String tag + ){ + BDMobileMonitorCallbackRequestNewVO vo = new BDMobileMonitorCallbackRequestNewVO( + akey,sign, + userId,aid,pid,uid,callbackUrl,extInfo,clickId, + idfa,imei,oaidMD5,oaid,mac, + ip,ua,osType,ts,null,interactionsType + ); + + // 映射 - Base 参数 + if (StrUtil.isNotBlank(tag) && vpoint >= 0){ + vo.setTag(tag); + vo.setVpoint(vpoint); + } + + // 重点参数校验规则 - 通过则入监控回流Source库 + if (CheckPlatPointParamsUtil.checkBDPlatPointParam(vo.getOsType(), vo.getIdfa(), vo.getImei(), vo.getOaidMD5(), vo.getOaid())) { + originalityManageService.handleNewBDTMonitorUrlCallbackDataThenSave(vo); + } + + // 校验以下参数是否存在 - 入投放包库 - 部分字段 + if (CheckPlatPointParamsUtil.checkMainParamForPut(vo.getOaid(), vo.getOaidMD5(), null, vo.getImei(),vo.getIdfa(), null, vo.getMac())){ + adTFPackageService.loadBDPackageData(vo); + } + + return CommonResponse.createBySuccess(); + } + + + /** + * 广电通链接监测 + * + * API文档地址 : https://developers.e.qq.com/docs/guide/conversion/new_version/dianjijiance + */ + @RequestMapping(value = "/gdt/new/monitor") + public CommonResponse gdtMonitorUrlCallbackReqUrl( + @RequestParam(value = "account_id", defaultValue = "") String accountId, + @RequestParam(value = "click_id", defaultValue = "") String clickId, + @RequestParam(value = "click_time", defaultValue = "") String clickTime, + @RequestParam(value = "impression_time", defaultValue = "") String impressionTime, + @RequestParam(value = "campaign_id", defaultValue = "") String campaignId, + @RequestParam(value = "adgroup_id", defaultValue = "") String adgroupId, + @RequestParam(value = "ad_id", defaultValue = "") String adId, + @RequestParam(value = "ad_platform_type", defaultValue = "") String adPlatformType, + @RequestParam(value = "ad_type", defaultValue = "") String adType, + @RequestParam(value = "agency_id", defaultValue = "") String agencyId, + @RequestParam(value = "click_sku_id", defaultValue = "") String clickSkuId, + @RequestParam(value = "billing_event", defaultValue = "") String billingEvent, + @RequestParam(value = "deeplink_url", defaultValue = "") String deeplinkUrl, + @RequestParam(value = "universal_link", defaultValue = "") String universalLink, + @RequestParam(value = "page_url", defaultValue = "") String pageUrl, + @RequestParam(value = "device_os_type", defaultValue = "") String deviceOsType, + @RequestParam(value = "process_time", defaultValue = "") String processTime, + @RequestParam(value = "promoted_object_id", defaultValue = "") String promotedObjectId, + @RequestParam(value = "promoted_object_type", defaultValue = "") String promotedObjectType, + @RequestParam(value = "real_cost", defaultValue = "") String realCost, + @RequestParam(value = "request_id", defaultValue = "") String requestId, + @RequestParam(value = "impression_id", defaultValue = "") String impressionId, + @RequestParam(value = "muid", defaultValue = "") String muid, + @RequestParam(value = "hash_mac", defaultValue = "") String mac, + @RequestParam(value = "hash_android_id", defaultValue = "") String hashAndroidId, + @RequestParam(value = "ip", defaultValue = "") String ip, + @RequestParam(value = "user_agent", defaultValue = "") String userAgent, + @RequestParam(value = "callback", defaultValue = "") String callback, + @RequestParam(value = "encrypted_position_id", defaultValue = "") String encryptedPositionId, + @RequestParam(value = "hash_oaid", defaultValue = "") String oaid, + @RequestParam(value = "caid", defaultValue = "") String caid, + @RequestParam(value = "adgroup_name", defaultValue = "") String adgroupName, + @RequestParam(value = "site_set_name", defaultValue = "") String siteSetName, + @RequestParam(value = "campaign_name", defaultValue = "") String campaignName, + @RequestParam(value = "ad_name", defaultValue = "") String adName, + @RequestParam(value = "model", defaultValue = "") String model, + @RequestParam(value = "vpoint", defaultValue = "") int vpoint, + @RequestParam(value = "tag", defaultValue = "") String tag + ){ + GdtMobileMonitorCallbackRequestNewVO vo = new GdtMobileMonitorCallbackRequestNewVO( + accountId,clickId,clickTime,deviceOsType, + muid,oaid,mac, + campaignId,adgroupId,adId,promotedObjectId,ip,userAgent,callback,promotedObjectType + ); + + // 映射 - Base 参数 + if (StrUtil.isNotBlank(tag) && vpoint >= 0){ + vo.setTag(tag); + vo.setVpoint(vpoint); + } + + // 重点参数校验规则 - 通过则入监控回流Source库 + if (CheckPlatPointParamsUtil.checkGDTPlatPointParam(vo.getDeviceOsType(), vo.getMuid(), vo.getOaid())) { + originalityManageService.handleNewGDTMonitorUrlCallbackDataThenSave(vo); + } + + // 校验以下参数是否存在 - 入投放包库 - 部分字段 + if (CheckPlatPointParamsUtil.checkMainParamForPut(vo.getOaid(), null, vo.getMuid(), null,vo.getMuid(), null, vo.getMac())){ + adTFPackageService.loadGDTPackageData(vo); + } + + return CommonResponse.createBySuccess(); + } + + +} diff --git a/src/main/java/com/baiyee/adcallback/api/constants/SpecialCheckParmConstant.java b/src/main/java/com/baiyee/adcallback/api/constants/SpecialCheckParmConstant.java new file mode 100644 index 0000000..1e3778d --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/api/constants/SpecialCheckParmConstant.java @@ -0,0 +1,18 @@ +package com.baiyee.adcallback.api.constants; + +public class SpecialCheckParmConstant { + + + /* + * 巨量特殊的字符标识 + */ + public static final String ZERO_JL_IMEI = "000000000000000"; + + public static final String ZERO_JL_IMEI_MD5 = "5284047f4ffb4e04824a2fd1d1f0cd62"; + + public static final String ZERO_JL_IDFA = "00000000-0000-0000-0000-000000000000"; + + public static final String ZERO_JL_IDFA_MD5 = "9f89c84a559f573636a47ff8daed0d33"; + + +} diff --git a/src/main/java/com/baiyee/adcallback/api/constants/TagTypeConstant.java b/src/main/java/com/baiyee/adcallback/api/constants/TagTypeConstant.java index 2ca0604..607138e 100644 --- a/src/main/java/com/baiyee/adcallback/api/constants/TagTypeConstant.java +++ b/src/main/java/com/baiyee/adcallback/api/constants/TagTypeConstant.java @@ -8,6 +8,9 @@ public class TagTypeConstant { } + /** + * 每个平台的数字标识 + */ public static final int JL = 0; public static final int BD = 1; @@ -19,4 +22,22 @@ public class TagTypeConstant { public static final int VIVO = 4; public static final int GDT = 5; + + /** + * 每个平台的字符串标识 + */ + + public static final String JL_V1_STR = "jl_v1"; + + public static final String JL_V2_STR = "jl_v2"; + + public static final String BD_STR = "bd"; + + public static final String KS_STR = "ks"; + + public static final String UC_STR = "uc"; + + public static final String VIVO_STR = "vivo"; + + public static final String GDT_STR = "gdt"; } diff --git a/src/main/java/com/baiyee/adcallback/api/constants/VpointEnum.java b/src/main/java/com/baiyee/adcallback/api/constants/VpointEnum.java new file mode 100644 index 0000000..c60f259 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/api/constants/VpointEnum.java @@ -0,0 +1,59 @@ +package com.baiyee.adcallback.api.constants; + +/** + * Vpoint 枚举类 + */ +public enum VpointEnum { + + + /** + * 视频类广告相关参数 + */ + SHOW("展示"),EFFECTIVE_POINT("有效触点"),VIDEO_PLAY("视频播放"),VIDEO_FINISH("完播"), EFFECTIVE_PLAY("有效播放"), + /** + * 广告位展示广告 + */ + EFFECTIVE_WEBSITE_POINT("平台有效点击"), WEBSITE_SHOW("平台有效曝光") + ; + + + private final String status; + VpointEnum(String status) { + this.status = status; + } + + public String getStatus() { + return status; + } + + public static String vPointCodeConvertStatus(int vPointCode){ + String backStatus = ""; + switch (vPointCode){ + case 1: + backStatus = SHOW.status; + break; + case 2: + backStatus = EFFECTIVE_POINT.status; + break; + case 3: + backStatus = VIDEO_PLAY.status; + break; + case 4: + backStatus = VIDEO_FINISH.status; + break; + case 5: + backStatus = EFFECTIVE_PLAY.status; + break; + case 6: + backStatus = EFFECTIVE_WEBSITE_POINT.status; + break; + case 7: + backStatus = WEBSITE_SHOW.status; + break; + default: + System.out.println("wrong number!"); + } + return backStatus; + } + +} diff --git a/src/main/java/com/baiyee/adcallback/api/vo/BDMobileMonitorCallbackRequestNewVO.java b/src/main/java/com/baiyee/adcallback/api/vo/BDMobileMonitorCallbackRequestNewVO.java new file mode 100644 index 0000000..b9c4a6f --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/api/vo/BDMobileMonitorCallbackRequestNewVO.java @@ -0,0 +1,142 @@ +package com.baiyee.adcallback.api.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 百度移动监控调请求VO + * + * @author q + * @date 2022/02/10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BDMobileMonitorCallbackRequestNewVO extends MobileMonitorCallbackRequestBase implements Serializable { + + /** + * 双方加密密钥,业务端创建转化时自动生成,同一广告主 akey 唯一 + * 监测URL签名:替换通配符后的完整监测URL(不包含&sign=)+akey 进行标准32位md5,生成签名值,在监测URL后添加&sign=签名值; + * Callback_URL签名:替换通配符后的完整回调URL(不包含&sign=)+akey 进行标准32位md5,生成签名值,在回调URL后添加&sign=签名值,在百度投放后台获取。 + */ + private String akey; + + /** + * 加密后的回值, 没必要保存 + */ + private String sign; + + /** + * 账户ID + */ + private String userid; + + /** + * 创意ID + */ + private String aid; + + /** + * 计划ID + */ + private String pid; + + /** + * 单元ID + */ + private String uid; + + /** + * 效果数据回传URL + */ + private String callbackUrl; + + /** + * 点击信息/曝光信息, v2 版本, callType=v2用户使用 + */ + private String extInfo; + + /** + * 点击或曝光唯一标识 + */ + private String clickId; + + /** + * IOS设备标识, IOS设备标识:原值 + */ + private String idfa; + + /** + * imei_md5, Android设备标识 , Android设备标识 + * 编码方式:标准32位md5当无IMEI传递时为空 + * (此处imei使用从客户端获取的原始值进行md5加密,不需要做大小写转换) + * 例:imei[10bc955ac2a675d3] + * imei_md5[f703b39228c8c5cf8069051d86a20747] + */ + private String imei; + + /** + * __OAID_MD5__或{{OAID_MD5}} + * oaid:编码方式:标准32位md5 + * 说明:当无oaid时这个字段传null + * 例:oaid[dd8fbeef-3dce-287a-feef-e7ffbb77d495] + * oaid_md5[b4ad78e2adb010c4dbbd82cc1652337d] + */ + private String oaidMD5; + + /** + * 原文oaid, 例:oaid[dd8fbeef-3dce-287a-feef-e7ffbb77d495] + * 说明:当无oaid时这个字段传null + */ + private String oaid; + + /** + * __MAC1__或{{MAC_MD5}} + * mac地址:编码方式:标准32位md5当无mac传递时为空 + * 例:mac[00:0C:18:EF:FF:ED] + * mac_md5[21baa000f63c7d0f0b2cd9af8bd0eb24] + */ + private String mac; + + /** + * IP地址 + */ + private String ip; + + /** + * 数据上报终端设备,UserAgent + */ + private String ua; + + /** + * 安卓:0;iOS:1;其他:3 + */ + private String osType; + + /** + * 时间戳 + */ + private Long ts; + + /** + * 已废弃, (2023.3.15已下线) + */ + @Deprecated + private String deviceInfo; + + /** + * 1:表示点击 + * 2:标识有效播放 + * 6:标识曝光归因 + * 用户对广告进行的所有交互操作,我们皆将其定义为互动,主要类型包括点击互动和观看互动。示例:1 + */ + private String interactionsType; + + + +} diff --git a/src/main/java/com/baiyee/adcallback/api/vo/GdtMobileMonitorCallbackRequestNewVO.java b/src/main/java/com/baiyee/adcallback/api/vo/GdtMobileMonitorCallbackRequestNewVO.java new file mode 100644 index 0000000..f230ec8 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/api/vo/GdtMobileMonitorCallbackRequestNewVO.java @@ -0,0 +1,252 @@ +package com.baiyee.adcallback.api.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 广点通 移动监控 点击 请求 VO + * + * @author q + * @date 2022/02/19 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class GdtMobileMonitorCallbackRequestNewVO extends MobileMonitorCallbackRequestBase implements Serializable { + + /* + == 特殊参数 == + */ + + /** + * 广告主id:9471147 + * + * 安卓, IOS - 必选 + * (网页, 小城西, 公众号, 企微) - 必选 + */ + private String accountId; + + /** + * 点击id:24oi6xq2aaakvagnqu7a + * + * 安卓, IOS - 必选 + * (网页, 小城西, 公众号, 企微) - 必选 + */ + private String clickId; + + /** + * 点击时间:1586437362 + * + * 安卓, IOS - 必选 + * (网页, 小城西, 公众号, 企微) - 必选 + */ + private String clickTime; + + /** + * 设备类型: ios, android + * + * 安卓, IOS - 必选 + */ + private String deviceOsType; + + /** + * 设备id(imei或idfa的加密值) + * 对IMEI设备号转成小写,再进行md5编码,再小写,32位 + * 对IDFA 设备号保持大写,进行 md5 编码,再小写,32位 d4b8f3898515056278ccf78a7a2cca2d + * + * 安卓, IOS - 必选 + */ + private String muid; + + + /** + * 安卓系统移动终端补充设备标识 + * + * OAID介绍以及最新覆盖厂商范围请详见MSA官网。网站链接:http://msalliance.icoc.bz/col.jsp?id=120 + */ + private String oaid; + + /** + * mac 地址去掉':'md5 加密值 + */ + private String mac; + + + /** + * (自归因api场景必填,其他场景不需要填写) + * 直接提供上报信息回传接口的 url,示例为url encode编码原值,广告主需要decode作为post请求url回传至AMS + * http%3A%2F%2Ftracking.e.qq.com%2Fconv%3Fcb%3DxXx%252BxXx%253D%26conv_id%3D123 + * + * (网页, 小城西, 公众号, 企微) - 必选 + */ + private String callback; + + + + /* + == 广告基础参数 == + */ + + /** + * 计划id:102043154 + */ + private String campaignId; + + /** + * 广告组id(实际为广告id):228691429 + */ + private String adgroupId; + + /** + * 广告id(实际为创意id):251986746 + */ + private String adId; + + + /** + * 应用id:1101072624, wx69618ae091cf2c76 + * 安卓, IOS - 必选 + */ + private String promotedObjectId; + + + + /* + 扩展参数 + */ + + + /** + * 媒体投放系统获取的用户终端的公共IPV4地址:183.226.102.120 + */ + private String ip; + + /** + * 用户代理(user_agent) + * + * Dalvik%2F2.1.0+%28Linux%3B+U%3B+Android+8.0.0%3B+PIC-AL00+Build%2FHUAWEIPIC-AL00%29 + */ + private String userAgent; + + /** + * 推广类型 + * 12: Android应用推广 PROMOTED_OBJECT_TYPE_APP_ANDROID + * 19: iOS应用推广 PROMOTED_OBJECT_TYPE_APP_IOS + * 20: 应用宝换量应用推广 PROMOTED_OBJECT_TYPE_EXCHANGE_APP_ANDROID_MYAPP + * 23: 微信公众号推广 + * 25: 京东商品推广 + * 29: 微信品牌活动推广 + * 30: 商品推广 PROMOTED_OBJECT_TYPE_ECOMMERCE + * 31: 品牌活动推广 + * 35: Android应用推广(应用宝)PROMOTED_OBJECT_TYPE_APP_ANDROID_MYAPP + * 36: 优惠券推广 + * 37: QQ消息推广 PROMOTED_OBJECT_TYPE_QQ_MESSAGE + * 39: 微信门店推广 PROMOTED_OBJECT_TYPE_LOCAL_ADS_WECHAT + * 41: QQ门店推广 PROMOTED_OBJECT_TYPE_LOCAL_ADS + * 43: 销售线索收集 PROMOTED_OBJECT_TYPE_LEAD_AD + * 45: QQ浏览器小程序 PROMOTED_OBJECT_TYPE_QQ_BROWSER_MINI_PROGRAM + * 46: 微信小游戏推广 PROMOTED_OBJECT_TYPE_MINI_GAME_WECHAT + * 47: 微信支付代金券推广 PRODUCT_TYPE_WECHAT_PAY_COUPON + * 49: QQ小游戏推广 PRODUCT_TYPE_WECHAT_PAY_COUPON + * 1000: 网页推广 PROMOTED_OBJECT_TYPE_LINK + */ + private String promotedObjectType; + + /** + * Android & IOS 必备参数 + */ + public GdtMobileMonitorCallbackRequestNewVO(String accountId, String clickId, String clickTime, String deviceOsType, + String muid,String oaid, String mac, String campaignId, String adgroupId, String adId, String promotedObjectId, + String ip, String userAgent, String callback, String promotedObjectType) { + this.accountId = accountId; + this.clickId = clickId; + this.clickTime = clickTime; + this.deviceOsType = deviceOsType; + this.muid = muid; + this.oaid = oaid; + this.mac =mac; + this.campaignId = campaignId; + this.adgroupId = adgroupId; + this.adId = adId; + this.promotedObjectId = promotedObjectId; + this.ip = ip; + this.userAgent = userAgent; + this.callback = callback; + this.promotedObjectType = promotedObjectType; + } + + /** + * (网页, 小城西, 公众号, 企微) + * todo 暂时不知道需要什么 main 字段进行 + */ + public GdtMobileMonitorCallbackRequestNewVO(String accountId, String clickId, String clickTime, String callback) { + this.accountId = accountId; + this.clickId = clickId; + this.clickTime = clickTime; + this.callback = callback; + } + + + /* + fixme 以下都为暂无意义参数 + */ + + + private String impressionTime; + + private String adPlatformType; + + private String adType; + + + + private String agencyId; + + private String clickSkuId; + + private String billingEvent; + + private String deeplinkUrl; + + private String universalLink; + + private String pageUrl; + + + + private String processTime; + + + + + + private String realCost; + + private String requestId; + + private String impressionId; + + + + private String imei; + + + private String encryptedPositionId; + + + private String caid; + + private String adgroupName; + + private String siteSetName; + + private String campaignName; + + private String adName; + + private String model; + +} diff --git a/src/main/java/com/baiyee/adcallback/api/vo/JuliangMobileMonitorCallbackRequestNewV1VO.java b/src/main/java/com/baiyee/adcallback/api/vo/JuliangMobileMonitorCallbackRequestNewV1VO.java new file mode 100644 index 0000000..89403e7 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/api/vo/JuliangMobileMonitorCallbackRequestNewV1VO.java @@ -0,0 +1,82 @@ +package com.baiyee.adcallback.api.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 巨量 v1.0 移动监控调请求 vo + * + * @author q + * @date 2022/01/07 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class JuliangMobileMonitorCallbackRequestNewV1VO extends MobileMonitorCallbackRequestBase implements Serializable { + + /** + * 可兼容支持(未来仅巨量广告1.0支持) + * 广告计划id + * 有效触点、展示均支持 + */ + private String aid; + + /** + * 可兼容支持(未来仅巨量广告1.0支持) + * 广告计划名称 + * 有效触点、展示均支持 + */ + private String aidName; + + /** + * 可兼容支持(未来仅巨量广告1.0支持) + * 广告创意 id,长整型 + * 有效触点、展示均支持 + */ + private String cid; + + /** + * 可兼容支持(未来仅巨量广告1.0支持) + * 广告创意名称 + * 有效触点、展示均支持 + */ + private String cidName; + + /** + * 可兼容支持(未来仅巨量广告1.0支持) + * 广告组 id + * 有效触点、展示均支持 + */ + private String campaignId; + + /** + * 可兼容支持(未来仅巨量广告1.0支持) + * 广告组名称 + * 有效触点、展示均支持 + */ + private String campaignName; + private String ctype; + private String csite; + private String convertId; + private String requestId; + private String trackId; + private String os; + private String ua; + private String geo; + private String ts; + private String model; + private String imei; + private String idfa; + private String idfaMD5; + private String oaid; + private String oaidMD5; + private String mac; + private String callbackParam; + private String callbackUrl; + private String advertiserId; +} diff --git a/src/main/java/com/baiyee/adcallback/api/vo/JuliangMobileMonitorCallbackRequestNewV2VO.java b/src/main/java/com/baiyee/adcallback/api/vo/JuliangMobileMonitorCallbackRequestNewV2VO.java new file mode 100644 index 0000000..f2e6670 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/api/vo/JuliangMobileMonitorCallbackRequestNewV2VO.java @@ -0,0 +1,209 @@ +package com.baiyee.adcallback.api.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * juliang移动监控调请求 vo + * + * @link {https://open.oceanengine.com/labels/7/docs/1696710655781900} + * + * @author q + * @date 2022/01/07 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class JuliangMobileMonitorCallbackRequestNewV2VO extends MobileMonitorCallbackRequestBase implements Serializable { + + /** + * 仅巨量广告体验版支持 + * 代表巨量广告体验版的广告ID + * 有效触点、展示均支持 + */ + private String promotionId; + + /** + * 仅巨量广告体验版支持 + * 代表巨量广告体验版的项目ID + * 有效触点、展示均支持 + */ + private String projectId; + + /** + * 仅巨量广告体验版支持 + * 巨量广告体验版中的广告名称 + * 有效触点、展示均支持 + */ + private String promotionName; + + /** + * 仅巨量广告体验版支持 + * 巨量广告体验版中的项目名称 + * 有效触点、展示均支持 + */ + private String projectName; + + /** + * 仅巨量广告体验版支持 + * 图片素材宏参数(下发原始素材id) + * 有效触点、展示均支持 + */ + private String mid1; + + /** + * 仅巨量广告体验版支持 + * 标题素材宏参数(下发原始素材id) + * 有效触点、展示均支持 + */ + private String mid2; + + /** + * 仅巨量广告体验版支持 + * 视频素材宏参数(下发原始素材id) + * 有效触点、展示均支持 + */ + private String mid3; + + /** + * 仅巨量广告体验版支持 + * 搭配试玩素材宏参数(下发原始素材id) + * 有效触点、展示均支持 + */ + private String mid4; + + /** + * 仅巨量广告体验版支持 + * 落地页素材宏参数(下发原始素材id) + * 有效触点、展示均支持 + */ + private String mid5; + + /** + * 仅巨量广告体验版支持 + * 安卓下载详情页素材宏参数(下发原始素材id) + * 有效触点、展示均支持 + */ + private String mid6; + + /** + * 广告投放位置 + */ + private String csite; + + /** + * 转化id + * 今日头条:1-10000,80000-110001 + * 西瓜视频:10001-10099 + * 火山小视频:30001-30099 + * 抖音:40001-40099 + * 番茄小说:26001-26099 + * 穿山甲开屏广告:800000000 + * 穿山甲网盟非开屏广告:900000000 + * 通投广告位:33013 + * 搜索:38016 + */ + private String convertId; + + /** + * 请求下发的id + */ + private String requestId; + + /** + * 请求下发的id&创意id的md5,16位 + */ + private String trackId; + + /** + * 操作系统平台, + * 安卓:0 + * IOS:1 + * 其他:3 + */ + private String os; + + /** + * 用户代理 (User Agent) + */ + private String ua; + + /** + * 位置信息 + * 包含三部分:latitude(纬度),longitude(经度)以及precise(确切信息,精度) + * 十进制保留1位小数,西经南纬保留负数,用字母 x 分 割纬度与精度 (先纬后经,最后精度),如:35.7x122.4x100.0 + */ + private String geo; + + /** + * 客户端发生广告点击事件的时间,以毫秒为单位时间戳 + */ + private String ts; + + /** + * 手机型号 + * + * 包含多种格式,如iPhone12,2 (urlencode之后为iPhone12%2c2),iPhone X (urlencode之后为iPhone+X),SM-A750GN (urlencode之后为SM-A750GN) + */ + private String model; + + /** + * 安卓的设备 ID 的 md5 摘要,32位 + * 假设原始的 imei 是 868823031739689我们最终发送的是 imei 的 md5 摘要:0c2bd03c39f19845bf54ea0abafae70e,会存在部分无法获取imei的情况,则imei会回传空字符串或者0的md5摘要 + */ + private String imei; + + /** + * IOS 6+的设备id字段,32位 + * 样例:4FCFEFA1-096D-4176-B352-1870ED6DB777注意,一些例外00000000-0000-0000-0000-000000000000如果用户关闭里读取idfa的权限,会导致idfa全部是0 + */ + private String idfa; + + /** + * IOS 6+的设备id的md5摘要,32位 + * 样例:09c593c62a6074ae5f859e97a222c0e8 + * 注意,用户关闭读取idfa权限,0值也会进行MD5加密 + */ + private String idfaMD5; + + /** + * Android Q及更高版本的设备号,32位 + * 样例:97e7ef3f-e5f2-d0b8-ccfc-f79bbeaf4841注意,一些例外如果无法获取oaid,oaid会传空字符串 + */ + private String oaid; + + /** + * Android Q及更高版本的设备号的md5摘要,32位 + * 样例:87f8274c36eb73fabcbf143a10eca6a4,会存在部分无法获取oaid的情况,则该字段会回传空字符串 + * 有效触点 + */ + private String oaidMD5; + + /** + * 移动设备mac地址,转换成大写字母,去掉“:”,并且取md5摘要后的结果 + * 假设原始的mac地址是34:d7:12:9b:3a:89去掉“:”后变成 34d7129b3a89变成大写字母34D7129B3A89取MD5摘要,最后变成如下结果:df97bc5021e14256e141b2f036df5a3c + */ + private String mac; + + /** + * 一些跟广告信息相关的回调参数,内容是一个加密字符串,在调用事件回传接口的时候会用到 + */ + private String callbackParam; + + /** + * 直接把调用事件回传接口的url生成出来,广告主可以直接使用 + * + */ + private String callbackUrl; + + /** + * 广告主id + * 有效触点 + */ + private String advertiserId; +} diff --git a/src/main/java/com/baiyee/adcallback/api/vo/KSNewMobileMonitorCallbackRequestVO.java b/src/main/java/com/baiyee/adcallback/api/vo/KSNewMobileMonitorCallbackRequestVO.java new file mode 100644 index 0000000..75d4732 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/api/vo/KSNewMobileMonitorCallbackRequestVO.java @@ -0,0 +1,138 @@ +package com.baiyee.adcallback.api.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 百度移动监控调请求VO + * + * @author q + * @date 2022/02/10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class KSNewMobileMonitorCallbackRequestVO extends MobileMonitorCallbackRequestBase implements Serializable { + + /** + * 原值,广告账户ID, 12345 + */ + private String accountId; + + /** + * 原值,广告组ID, 2656338 + */ + private String aid; + + /** + * 原值,广告创意ID, 2233720321234150创意ID已经超过了int32的最大值,请广告主一定按照int64来存储,否则会导致广告主存储失败无法正常归因 + */ + private String cid; + + /** + * 原值,广告计划ID, 223372036854775000 + */ + private String did; + + /** + * 原值,广告计划名称, 游戏-男-18岁 + */ + private String dName; + + /** + * 原值,素材ID + */ + private String photoId; + + + /** + * __OAID2__ Android设备标识计算MD5(强烈建议使用) + */ + private String oaid; + + /** + * __IMEI2__ / __IMEI4__ 对15位数字的 IMEI (比如860576038225452)进行 MD5(备注:安卓广告唯一标示,imei双卡手机可能有两个,取默认的一个) + */ + private String imei; + + /** + * __IMEI3__ Android下的IMEI,原文计算SHA1 BF776E787C360D5B031BF1C877BCDF42BEFF456D (格式样例) + */ + private String imeiHash; + + /** + * __IDFA2__ iOS下的idfa计算MD5,规则为32位十六进制数字+4位连接符“-”的原文(比如:32ED3EE5-9968-4F25-A015-DE3CFF569568),再计算MD5,再转大写。 + */ + private String idfa; + + /** + * __IDFA3__ iOS下的idfa计算SHA1,规则是原文带“-”,计算SHA1 + */ + private String idfaHash; + + /** + * __MAC2__, 对 MAC 进行 MD5 + */ + private String macBak; + + /** + * __MAC3__ , 对 MAC 去除分隔符之后进行 MD5 + */ + private String mac; + + /** + * UTC时间戳,自1970年起的毫秒数,取当前设备返回的系统时间,可能和实际时间有误差 , 1545973272000 + */ + private String ts; + + /** + * (7.6.10及以后版本支持)客户端UA + */ + private String ua; + + /** + * OS系统 1-iOS,0-安卓 + */ + private String os; + + /** + * 手机型号 + */ + private String model; + + /** + * __CALLBACK__ 回调信息,编码一次的URL,长度小于10k http%3a%2f%2fad.partner.gifshow.com%2ftrack%2factivate%3fcallback%3dDHAJASALKFyk1uCKBYCyXp-iIDS-uHDd_a5SJ9Dbwkqv46dahahd87TW7hhkJkd + */ + private String callBack; + + /** + * 用户IP地址(IPV4), 123.89.234.34 + */ + private String ip; + + /** + * 广告投放场景, + * 1-优选广告,2-信息流广告(旧投放场景,含上下滑大屏广告),3-视频播放页广告,5-联盟广告,6-上下滑大屏广告,7-信息流广告(不含上下滑大屏广告)27-开屏位置 39-搜索广告 24-激励视频 + */ + private String csite; + + /** + * 是否为高级创意 1:是 + */ + private String acCreative; + + + /** + * 仅支持搜索流量,winfoid可通过marketing api 中关键词接口获得,对应word_info_id,如果为非搜索流量或智能扩词流量,则winfoid不替换 + * 16015060 + */ + private String winForId; + + + +} diff --git a/src/main/java/com/baiyee/adcallback/api/vo/MobileMonitorCallbackRequestBase.java b/src/main/java/com/baiyee/adcallback/api/vo/MobileMonitorCallbackRequestBase.java index 80b792a..216763d 100644 --- a/src/main/java/com/baiyee/adcallback/api/vo/MobileMonitorCallbackRequestBase.java +++ b/src/main/java/com/baiyee/adcallback/api/vo/MobileMonitorCallbackRequestBase.java @@ -14,7 +14,21 @@ import lombok.Data; public class MobileMonitorCallbackRequestBase{ /** - * 用于监测链接的自定义带参格式 + * 用于监测链接的自定义带参格式 - 一个公司一个业务一个 tag */ private String tag; + + + /** + * 用于区分广告配置的地方 + * + * 巨量 + * + * 展示 - 1 + * 有效触点 - 2 + * 视频播放 - 3 + * 完播 - 4 + * 有效播放 - 5 + */ + private Integer vpoint; } diff --git a/src/main/java/com/baiyee/adcallback/repository/TbBDNewBackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbBDNewBackdataEntityRepository.java new file mode 100644 index 0000000..e827608 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/repository/TbBDNewBackdataEntityRepository.java @@ -0,0 +1,32 @@ +package com.baiyee.adcallback.repository; + +import cn.hutool.core.date.DateTime; +import com.baiyee.adcallback.api.dto.PlateFormDTO; +import com.baiyee.adcallback.repository.entity.TbBdBackdataEntity; +import com.baiyee.adcallback.repository.entity.TbBdNewBackdataEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface TbBDNewBackdataEntityRepository extends JpaRepository { + + + + /** + * 查询数据 + * @param imeiStrFirst + * @param imeiSecond + * @param startDate + * @param endDate + * @param tag + * @return + */ + @Query("select new com.baiyee.adcallback.api.dto.PlateFormDTO(imei as imei,tag as tag) from " + + " TbBdBackdataEntity where imei != :imeiStrFirst and imei != :imeiSecond " + + "and gmtCreate >= :startDate and gmtCreate < :endDate and tag in :tag group by imei,tag") + List queryPlateFormDTO(@Param("imeiStrFirst") String imeiStrFirst, @Param("imeiSecond") String imeiSecond, @Param("startDate") DateTime startDate, @Param("endDate") DateTime endDate, @Param("tag") List tag); +} diff --git a/src/main/java/com/baiyee/adcallback/repository/TbGdtNewBackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbGdtNewBackdataEntityRepository.java new file mode 100644 index 0000000..e4d6e0a --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/repository/TbGdtNewBackdataEntityRepository.java @@ -0,0 +1,32 @@ +package com.baiyee.adcallback.repository; + +import cn.hutool.core.date.DateTime; +import com.baiyee.adcallback.api.dto.PlateFormDTO; +import com.baiyee.adcallback.repository.entity.TbGdtBackdataEntity; +import com.baiyee.adcallback.repository.entity.TbGdtNewBackdataEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface TbGdtNewBackdataEntityRepository extends JpaRepository { + + + /** + * 查询数据 + * @param imeiStrFirst + * @param imeiSecond + * @param startDate + * @param endDate + * @param models + * @param tag + * @return + */ + @Query("select new com.baiyee.adcallback.api.dto.PlateFormDTO(muid as imei,tag as tag) from " + + " TbGdtBackdataEntity where muid != :imeiStrFirst and muid != :imeiSecond " + + "and gmtCreate >= :startDate and gmtCreate < :endDate and tag in :tag and deviceOsType = :models group by muid,tag") + List queryPlateFormDTO(@Param("imeiStrFirst") String imeiStrFirst, @Param("imeiSecond") String imeiSecond, @Param("startDate") DateTime startDate, @Param("endDate") DateTime endDate, @Param("tag") List tag,@Param("models") String models); +} diff --git a/src/main/java/com/baiyee/adcallback/repository/TbJLV1BackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbJLV1BackdataEntityRepository.java new file mode 100644 index 0000000..03e13f9 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/repository/TbJLV1BackdataEntityRepository.java @@ -0,0 +1,39 @@ +package com.baiyee.adcallback.repository; + +import cn.hutool.core.date.DateTime; +import com.baiyee.adcallback.api.dto.PlateFormDTO; +import com.baiyee.adcallback.repository.entity.TbJLBackDataV1Entity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.Date; +import java.util.List; + +@Repository +public interface TbJLV1BackdataEntityRepository extends JpaRepository { + + + @Query(value = "SELECT imei FROM tb_jl_v1_backdata WHERE imei != '' AND imei != '__IMEI__'", nativeQuery = true) + List queryAllImeis(); + + + @Query(value = "SELECT imei FROM tb_jl_v1backdata WHERE imei != '' AND imei != '__IMEI__' AND gmt_create > :startDate AND gmt_create < :endDate", nativeQuery = true) + List queryAllImeiByDate(Date startDate, Date endDate); + + /** + * 查询数据 + * @param imeiStrFirst + * @param imeiSecond + * @param startDate + * @param endDate + * @param tag + * @return + */ + @Query("select new com.baiyee.adcallback.api.dto.PlateFormDTO(imei as imei,tag as tag) from " + + " TbJlBackdataEntity where imei != :imeiStrFirst and imei != :imeiSecond " + + "and gmtCreate >= :startDate and gmtCreate < :endDate and tag in :tag group by imei,tag") + List queryPlateFormDTO(@Param("imeiStrFirst") String imeiStrFirst, @Param("imeiSecond") String imeiSecond, @Param("startDate") DateTime startDate, @Param("endDate") DateTime endDate, @Param("tag") List tag); + +} diff --git a/src/main/java/com/baiyee/adcallback/repository/TbJLV2BackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbJLV2BackdataEntityRepository.java new file mode 100644 index 0000000..4f68d50 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/repository/TbJLV2BackdataEntityRepository.java @@ -0,0 +1,33 @@ +package com.baiyee.adcallback.repository; + +import cn.hutool.core.date.DateTime; +import com.baiyee.adcallback.api.dto.PlateFormDTO; +import com.baiyee.adcallback.repository.entity.TbJLBackDataV2Entity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.Date; +import java.util.List; + +@Repository +public interface TbJLV2BackdataEntityRepository extends JpaRepository { + + @Query(value = "SELECT imei FROM tb_jl_v2_backdata WHERE imei != '' AND imei != '__IMEI__'", nativeQuery = true) + List queryAllImeis(); + + + @Query(value = "SELECT imei FROM tb_jl_v2_backdata WHERE imei != '' AND imei != '__IMEI__' AND gmt_create > :startDate AND gmt_create < :endDate", nativeQuery = true) + List queryAllImeiByDate(Date startDate, Date endDate); + + + /** + * 查询数据 + */ + @Query("select new com.baiyee.adcallback.api.dto.PlateFormDTO(imei as imei,tag as tag) from " + + " TbJlBackdataEntity where imei != :imeiStrFirst and imei != :imeiSecond " + + "and gmtCreate >= :startDate and gmtCreate < :endDate and tag in :tag group by imei,tag") + List queryPlateFormDTO(@Param("imeiStrFirst") String imeiStrFirst, @Param("imeiSecond") String imeiSecond, @Param("startDate") DateTime startDate, @Param("endDate") DateTime endDate, @Param("tag") List tag); + +} diff --git a/src/main/java/com/baiyee/adcallback/repository/TbKSNewBackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbKSNewBackdataEntityRepository.java new file mode 100644 index 0000000..dfbd381 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/repository/TbKSNewBackdataEntityRepository.java @@ -0,0 +1,31 @@ +package com.baiyee.adcallback.repository; + +import cn.hutool.core.date.DateTime; +import com.baiyee.adcallback.api.dto.PlateFormDTO; +import com.baiyee.adcallback.repository.entity.TbKSNewBackdataEntity; +import com.baiyee.adcallback.repository.entity.TbKsBackdataEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface TbKSNewBackdataEntityRepository extends JpaRepository { + + + /** + * 查询数据 + * @param imeiStrFirst + * @param imeiSecond + * @param startDate + * @param endDate + * @param tag + * @return + */ + @Query("select new com.baiyee.adcallback.api.dto.PlateFormDTO(imei as imei,tag as tag) from " + + " TbKsBackdataEntity where imei != :imeiStrFirst and imei != :imeiSecond " + + "and gmtCreate >= :startDate and gmtCreate < :endDate and tag in :tag group by imei,tag") + List queryPlateFormDTO(@Param("imeiStrFirst") String imeiStrFirst, @Param("imeiSecond") String imeiSecond, @Param("startDate") DateTime startDate, @Param("endDate") DateTime endDate, @Param("tag") List tag); +} diff --git a/src/main/java/com/baiyee/adcallback/repository/entity/TbBdNewBackdataEntity.java b/src/main/java/com/baiyee/adcallback/repository/entity/TbBdNewBackdataEntity.java new file mode 100644 index 0000000..c34e459 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/repository/entity/TbBdNewBackdataEntity.java @@ -0,0 +1,114 @@ +package com.baiyee.adcallback.repository.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.*; +import java.sql.Timestamp; + +@Data +@Entity +@Table(name = "tb_bd_new_backdata", schema = "db_ad", catalog = "") +@EntityListeners(AuditingEntityListener.class) +public class TbBdNewBackdataEntity { + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Id + @Column(name = "id", nullable = false) + private long id; + + @CreatedDate + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Column(name = "gmt_create", nullable = false) + private Timestamp gmtCreate; + + @LastModifiedDate + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Column(name = "gmt_modify", nullable = false) + private Timestamp gmtModify; + + @LastModifiedBy + @Column(name = "operator", nullable = false, length = 255) + private String operator; + @Basic + @Column(name = "userid", nullable = false, length = 255) + private String userid; + @Basic + @Column(name = "aid", nullable = false, length = 255) + private String aid; + @Basic + @Column(name = "pid", nullable = false, length = 255) + private String pid; + @Basic + @Column(name = "uid", nullable = false, length = 255) + private String uid; + @Basic + @Column(name = "callback_url", nullable = false, length = -1) + private String callbackUrl; + + @Basic + @Column(name = "ext_info", nullable = false, length = -1) + private String extInfo; + + @Basic + @Column(name = "click_id", nullable = false, length = 255) + private String clickId; + @Basic + @Column(name = "idfa", nullable = false, length = 255) + private String idfa; + @Basic + @Column(name = "imei", nullable = false, length = 255) + private String imei; + + @Basic + @Column(name = "oaid_MD5", nullable = false, length = 255) + private String oaidMD5; + @Basic + @Column(name = "oaid", nullable = false, length = 255) + private String oaid; + @Basic + @Column(name = "mac", nullable = false, length = 255) + private String mac; + @Basic + @Column(name = "ip", nullable = false, length = 255) + private String ip; + + @Basic + @Column(name = "ua", nullable = false, length = 255) + private String ua; + @Basic + @Column(name = "os_type", nullable = false, length = 255) + private String osType; + @Basic + @Column(name = "ts", nullable = false) + private long ts; + @Basic + @Column(name = "device_info", nullable = false, length = 255) + private String deviceInfo; + @Basic + @Column(name = "interactions_type", nullable = false, length = 255) + private String interactionsType; + + @Basic + @Column(name = "tag", nullable = false, length = 255) + private String tag; + + /** + * 用于区分广告配置的地方 + * 巨量 + * 展示 - 1 + * 有效触点 - 2 + * 视频播放 - 3 + * 完播 - 4 + * 有效播放 - 5 + */ + @Basic + @Column(name = "vpoint", nullable = false) + private Integer vpoint; +} diff --git a/src/main/java/com/baiyee/adcallback/repository/entity/TbGdtNewBackdataEntity.java b/src/main/java/com/baiyee/adcallback/repository/entity/TbGdtNewBackdataEntity.java new file mode 100644 index 0000000..6c66698 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/repository/entity/TbGdtNewBackdataEntity.java @@ -0,0 +1,126 @@ +package com.baiyee.adcallback.repository.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.*; +import java.sql.Timestamp; + +@Entity +@Table(name = "tb_gdt_new_backdata", schema = "db_ad", catalog = "") +@EntityListeners(AuditingEntityListener.class) +@Data +public class TbGdtNewBackdataEntity { + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Id + @Column(name = "id", nullable = false) + private long id; + + @CreatedDate + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Basic + @Column(name = "gmt_create", nullable = false) + private Timestamp gmtCreate; + + @LastModifiedDate + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Basic + @Column(name = "gmt_modify", nullable = false) + private Timestamp gmtModify; + + @LastModifiedBy + @Basic + @Column(name = "operator", nullable = false, length = 255) + private String operator; + + @Basic + @Column(name = "account_id", nullable = false, length = 255) + private String accountId; + + @Basic + @Column(name = "click_id", nullable = false, length = 255) + private String clickId; + @Basic + @Column(name = "click_time", nullable = false, length = 255) + private String clickTime; + + @Basic + @Column(name = "campaign_id", nullable = false, length = 255) + private String campaignId; + + @Basic + @Column(name = "adgroup_id", nullable = false, length = 255) + private String adgroupId; + + @Basic + @Column(name = "ad_id", nullable = false, length = 255) + private String adId; + + @Basic + @Column(name = "device_os_type", nullable = false, length = 255) + private String deviceOsType; + + + @Basic + @Column(name = "promoted_object_id", nullable = false, length = 255) + private String promotedObjectId; + + @Basic + @Column(name = "promoted_object_type", nullable = false, length = 255) + private String promotedObjectType; + + @Basic + @Column(name = "imei", nullable = false, length = 255) + private String imei; + + + @Basic + @Column(name = "idfa", nullable = false, length = 255) + private String idfa; + + @Basic + @Column(name = "mac", nullable = false, length = 255) + private String mac; + + + @Basic + @Column(name = "ip", nullable = false, length = 255) + private String ip; + + @Basic + @Column(name = "user_agent", nullable = false, length = 512) + private String userAgent; + + @Basic + @Column(name = "callback", nullable = false, length = 255) + private String callback; + + @Basic + @Column(name = "oaid", nullable = false, length = 255) + private String oaid; + + + @Basic + @Column(name = "tag", nullable = false, length = 255) + private String tag; + + /** + * 用于区分广告配置的地方 + * 巨量 + * 展示 - 1 + * 有效触点 - 2 + * 视频播放 - 3 + * 完播 - 4 + * 有效播放 - 5 + */ + @Basic + @Column(name = "vpoint", nullable = false) + private Integer vpoint; +} diff --git a/src/main/java/com/baiyee/adcallback/repository/entity/TbJLBackDataV1Entity.java b/src/main/java/com/baiyee/adcallback/repository/entity/TbJLBackDataV1Entity.java new file mode 100644 index 0000000..61abadf --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/repository/entity/TbJLBackDataV1Entity.java @@ -0,0 +1,169 @@ +package com.baiyee.adcallback.repository.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.*; +import java.util.Date; + +/** + * 结核病jl backdata实体 + * + * @author q + * @date 2022/01/07 + */ +@Entity +@Table(name = "tb_jl_v1_backdata", schema = "db_ad", catalog = "") +@Data +@EntityListeners(AuditingEntityListener.class) +public class TbJLBackDataV1Entity { + + + @Id + @Column(name = "id", nullable = false) + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + @CreatedDate + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Column(name = "gmt_create", nullable = false) + private Date gmtCreate; + + @LastModifiedDate + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Column(name = "gmt_modify", nullable = false) + private Date gmtModify; + + @LastModifiedBy + @Column(name = "operator", nullable = false, length = 255) + private String operator; + + @Basic + @Column(name = "aid", nullable = false, length = 255) + private String aid; + + @Basic + @Column(name = "aid_name", nullable = false, length = 255) + private String aidName; + + @Basic + @Column(name = "cid", nullable = false, length = 255) + private String cid; + + @Basic + @Column(name = "cid_name", nullable = false, length = 255) + private String cidName; + + @Basic + @Column(name = "campaign_id", nullable = false, length = 255) + private String campaignId; + + @Basic + @Column(name = "campaign_name", nullable = false, length = 255) + private String campaignName; + + @Basic + @Column(name = "ctype", nullable = false, length = 255) + private String ctype; + @Basic + @Column(name = "csite", nullable = false, length = 255) + private String csite; + + @Basic + @Column(name = "convert_id", nullable = false, length = 255) + private String convertId; + + @Basic + @Column(name = "request_id", nullable = false, length = 255) + private String requestId; + + @Basic + @Column(name = "track_id", nullable = false, length = 255) + private String trackId; + + @Basic + @Column(name = "os", nullable = false, length = 255) + private String os; + + @Basic + @Column(name = "ua", nullable = false, length = 255) + private String ua; + + @Basic + @Column(name = "geo", nullable = false, length = 255) + private String geo; + + @Basic + @Column(name = "ts", nullable = false, length = 255) + private String ts; + + @Basic + @Column(name = "model", nullable = false, length = 255) + private String model; + + @Basic + @Column(name = "imei", nullable = false, length = 255) + private String imei; + + @Basic + @Column(name = "idfa", nullable = false, length = 255) + private String idfa; + + @Basic + @Column(name = "idfa_md5", nullable = false, length = 255) + private String idfaMD5; + + @Basic + @Column(name = "oaid", nullable = false, length = 255) + private String oaid; + + @Basic + @Column(name = "oaid_md5", nullable = false, length = 255) + private String oaidMD5; + + @Basic + @Column(name = "mac", nullable = false, length = 255) + private String mac; + + @Basic + @Column(name = "callback_param", nullable = false, length = 255) + private String callbackParam; + + @Basic + @Column(name = "callback_url", nullable = false, length = 255) + private String callbackUrl; + + @Basic + @Column(name = "advertiser_id", nullable = false, length = 255) + private String advertiserId; + + + /** + * 用于监测链接的自定义带参格式 - 一个公司一个业务一个 tag + */ + @Basic + @Column(name = "tag", nullable = false, length = 255) + private String tag; + + + /** + * 用于区分广告配置的地方 + * 巨量 + * 展示 - 1 + * 有效触点 - 2 + * 视频播放 - 3 + * 完播 - 4 + * 有效播放 - 5 + */ + @Basic + @Column(name = "vpoint", nullable = false) + private Integer vpoint; + +} diff --git a/src/main/java/com/baiyee/adcallback/repository/entity/TbJLBackDataV2Entity.java b/src/main/java/com/baiyee/adcallback/repository/entity/TbJLBackDataV2Entity.java new file mode 100644 index 0000000..988d13d --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/repository/entity/TbJLBackDataV2Entity.java @@ -0,0 +1,179 @@ +package com.baiyee.adcallback.repository.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.*; +import java.util.Date; + +/** + * + * @author q + */ +@Entity +@Table(name = "tb_jl_v2_backdata", schema = "db_ad", catalog = "") +@Data +@EntityListeners(AuditingEntityListener.class) +public class TbJLBackDataV2Entity { + + @Id + @Column(name = "id", nullable = false) + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + @CreatedDate + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Column(name = "gmt_create", nullable = false) + private Date gmtCreate; + + @LastModifiedDate + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Column(name = "gmt_modify", nullable = false) + private Date gmtModify; + + @LastModifiedBy + @Column(name = "operator", nullable = false, length = 255) + private String operator; + + @Basic + @Column(name = "promotion_id", nullable = false, length = 255) + private String promotionId; + + @Basic + @Column(name = "project_id", nullable = false, length = 255) + private String projectId; + + @Basic + @Column(name = "promotion_name", nullable = false, length = 255) + private String promotionName; + + @Basic + @Column(name = "project_name", nullable = false, length = 255) + private String projectName; + + @Basic + @Column(name = "mid1", nullable = false, length = 255) + private String mid1; + + @Basic + @Column(name = "mid2", nullable = false, length = 255) + private String mid2; + + @Basic + @Column(name = "mid3", nullable = false, length = 255) + private String mid3; + + @Basic + @Column(name = "mid4", nullable = false, length = 255) + private String mid4; + + @Basic + @Column(name = "mid5", nullable = false, length = 255) + private String mid5; + + @Basic + @Column(name = "mid6", nullable = false, length = 255) + private String mid6; + + @Basic + @Column(name = "csite", nullable = false, length = 255) + private String csite; + + @Basic + @Column(name = "convert_id", nullable = false, length = 255) + private String convertId; + + @Basic + @Column(name = "request_id", nullable = false, length = 255) + private String requestId; + + @Basic + @Column(name = "track_id", nullable = false, length = 255) + private String trackId; + + @Basic + @Column(name = "os", nullable = false, length = 255) + private String os; + + @Basic + @Column(name = "ua", nullable = false, length = 255) + private String ua; + + @Basic + @Column(name = "geo", nullable = false, length = 255) + private String geo; + + @Basic + @Column(name = "ts", nullable = false, length = 255) + private String ts; + + @Basic + @Column(name = "model", nullable = false, length = 255) + private String model; + + @Basic + @Column(name = "imei", nullable = false, length = 255) + private String imei; + + @Basic + @Column(name = "idfa", nullable = false, length = 255) + private String idfa; + + @Basic + @Column(name = "idfa_md5", nullable = false, length = 255) + private String idfaMD5; + + @Basic + @Column(name = "oaid", nullable = false, length = 255) + private String oaid; + + @Basic + @Column(name = "oaid_md5", nullable = false, length = 255) + private String oaidMD5; + + @Basic + @Column(name = "mac", nullable = false, length = 255) + private String mac; + + @Basic + @Column(name = "callback_param", nullable = false, length = 255) + private String callbackParam; + + @Basic + @Column(name = "callback_url", nullable = false, length = 255) + private String callbackUrl; + + @Basic + @Column(name = "advertiser_id", nullable = false, length = 255) + private String advertiserId; + + + /** + * 用于监测链接的自定义带参格式 - 一个公司一个业务一个 tag + */ + @Basic + @Column(name = "tag", nullable = false, length = 255) + private String tag; + + + /** + * 用于区分广告配置的地方 + * 巨量 + * 展示 - 1 + * 有效触点 - 2 + * 视频播放 - 3 + * 完播 - 4 + * 有效播放 - 5 + */ + @Basic + @Column(name = "vpoint", nullable = false) + private Integer vpoint; + +} diff --git a/src/main/java/com/baiyee/adcallback/repository/entity/TbKSNewBackdataEntity.java b/src/main/java/com/baiyee/adcallback/repository/entity/TbKSNewBackdataEntity.java new file mode 100644 index 0000000..7373dc9 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/repository/entity/TbKSNewBackdataEntity.java @@ -0,0 +1,141 @@ +package com.baiyee.adcallback.repository.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.*; +import java.sql.Timestamp; + +@Entity +@Table(name = "tb_ks_new_backdata", schema = "db_ad", catalog = "") +@EntityListeners(AuditingEntityListener.class) +@Data +public class TbKSNewBackdataEntity { + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Id + @Column(name = "id", nullable = false) + private long id; + + @CreatedDate + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Basic + @Column(name = "gmt_create", nullable = false) + private Timestamp gmtCreate; + + @LastModifiedDate + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Basic + @Column(name = "gmt_modify", nullable = false) + private Timestamp gmtModify; + + @LastModifiedBy + @Basic + @Column(name = "operation", nullable = false, length = 255) + private String operation; + @Basic + @Column(name = "account_id", nullable = false, length = 255) + private String accountId; + @Basic + @Column(name = "aid", nullable = false, length = 255) + private String aid; + @Basic + @Column(name = "cid", nullable = false, length = 255) + private String cid; + @Basic + @Column(name = "did", nullable = false, length = 255) + private String did; + @Basic + @Column(name = "dname", nullable = false, length = 255) + private String dName; + + @Basic + @Column(name = "photo_id", nullable = false, length = 255) + private String photoId; + + @Basic + @Column(name = "oaid", nullable = false, length = 255) + private String oaid; + @Basic + @Column(name = "imei", nullable = false, length = 255) + private String imei; + + @Basic + @Column(name = "imei_hash", nullable = false, length = 255) + private String imeiHash; + + @Basic + @Column(name = "idfa", nullable = false, length = 255) + private String idfa; + + @Basic + @Column(name = "idfa_hash", nullable = false, length = 255) + private String idfaHash; + + @Basic + @Column(name = "mac_bak", nullable = false, length = 255) + private String macBak; + + @Basic + @Column(name = "mac", nullable = false, length = 255) + private String mac; + + @Basic + @Column(name = "ts", nullable = false, length = 255) + private String ts; + + @Basic + @Column(name = "ua", nullable = false, length = 255) + private String ua; + + @Basic + @Column(name = "os", nullable = false, length = 255) + private String os; + + @Basic + @Column(name = "model", nullable = false, length = 255) + private String model; + + @Basic + @Column(name = "call_back", nullable = false, length = 255) + private String callBack; + + @Basic + @Column(name = "ip", nullable = false, length = 255) + private String ip; + + @Basic + @Column(name = "csite", nullable = false, length = 255) + private String csite; + + @Basic + @Column(name = "ac_creative", nullable = false, length = 255) + private String acCreative; + + @Basic + @Column(name = "win_for_id", nullable = false, length = 255) + private String winForId; + @Basic + @Column(name = "tag", nullable = false, length = 255) + private String tag; + + /** + * 用于区分广告配置的地方 + * 巨量 + * 展示 - 1 + * 有效触点 - 2 + * 视频播放 - 3 + * 完播 - 4 + * 有效播放 - 5 + */ + @Basic + @Column(name = "vpoint", nullable = false) + private Integer vpoint; + +} diff --git a/src/main/java/com/baiyee/adcallback/service/AdOriginalityManageService.java b/src/main/java/com/baiyee/adcallback/service/AdOriginalityManageService.java index dbb90de..6dab0bb 100644 --- a/src/main/java/com/baiyee/adcallback/service/AdOriginalityManageService.java +++ b/src/main/java/com/baiyee/adcallback/service/AdOriginalityManageService.java @@ -1,12 +1,30 @@ package com.baiyee.adcallback.service; +import com.baiyee.adcallback.api.vo.*; + /** - * 广告创意管理服务 + * 广告回传类实现 * * @author q * @date 2022/01/07 */ public interface AdOriginalityManageService { + + void handleNewBDTMonitorUrlCallbackDataThenSave(BDMobileMonitorCallbackRequestNewVO vo); + + void handleNewKSMonitorUrlCallbackDataThenSave(KSNewMobileMonitorCallbackRequestVO vo); + + void handleNewGDTMonitorUrlCallbackDataThenSave(GdtMobileMonitorCallbackRequestNewVO vo); + + + void handleNewJLV2MonitorUrlCallbackDataThenSave(JuliangMobileMonitorCallbackRequestNewV2VO vo); + + + + void handleNewJLV1MonitorUrlCallbackDataThenSave(JuliangMobileMonitorCallbackRequestNewV1VO vo); + + + /** * 处理监测数据然后保存回调 */ diff --git a/src/main/java/com/baiyee/adcallback/service/AdTFPackageService.java b/src/main/java/com/baiyee/adcallback/service/AdTFPackageService.java new file mode 100644 index 0000000..2c8dcbd --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/AdTFPackageService.java @@ -0,0 +1,17 @@ +package com.baiyee.adcallback.service; + +import com.baiyee.adcallback.api.vo.*; + +public interface AdTFPackageService { + + void loadBDPackageData(BDMobileMonitorCallbackRequestNewVO vo); + + void loadGDTPackageData(GdtMobileMonitorCallbackRequestNewVO vo); + + void loadJLTFV1PackageData(JuliangMobileMonitorCallbackRequestNewV1VO vo); + + + void loadJLTFV2PackageData(JuliangMobileMonitorCallbackRequestNewV2VO vo); + + void loadKSTFPackageData(KSNewMobileMonitorCallbackRequestVO vo); +} diff --git a/src/main/java/com/baiyee/adcallback/service/impl/AdJLTFPackageServiceImpl.java b/src/main/java/com/baiyee/adcallback/service/impl/AdJLTFPackageServiceImpl.java new file mode 100644 index 0000000..49e5728 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/impl/AdJLTFPackageServiceImpl.java @@ -0,0 +1,54 @@ +package com.baiyee.adcallback.service.impl; + +import com.baiyee.adcallback.api.constants.VpointEnum; +import com.baiyee.adcallback.api.vo.*; +import com.baiyee.adcallback.service.AdTFPackageService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class AdJLTFPackageServiceImpl implements AdTFPackageService { + + @Override + public void loadBDPackageData(BDMobileMonitorCallbackRequestNewVO vo) { + // log - 埋点 + log.info("================================= [finish check, do data loading, AdJLTFPackageServiceImpl|loadBDPackageData, tag is {} , vpoint is {}] =================================", + vo.getTag(), VpointEnum.vPointCodeConvertStatus(vo.getVpoint())); + // TODO: 2023/5/26 0026 + } + @Override + public void loadKSTFPackageData(KSNewMobileMonitorCallbackRequestVO vo) { + // log - 埋点 + log.info("================================= [finish check, do data loading, AdJLTFPackageServiceImpl|loadKSTFPackageData, tag is {} , vpoint is {}] =================================", + vo.getTag(), VpointEnum.vPointCodeConvertStatus(vo.getVpoint())); + // TODO: 2023/5/26 0026 + } + + + @Override + public void loadGDTPackageData(GdtMobileMonitorCallbackRequestNewVO vo) { + // log - 埋点 + log.info("================================= [finish check, do data loading, AdJLTFPackageServiceImpl|loadGDTPackageData, tag is {} , vpoint is {}] =================================", + vo.getTag(), VpointEnum.vPointCodeConvertStatus(vo.getVpoint())); + // TODO: 2023/5/26 0026 + } + + @Override + public void loadJLTFV1PackageData(JuliangMobileMonitorCallbackRequestNewV1VO vo) { + // log - 埋点 + log.info("================================= [finish check, do data loading, AdJLTFPackageServiceImpl|loadJLTFV1PackageData, tag is {} , vpoint is {}] =================================", + vo.getTag(), VpointEnum.vPointCodeConvertStatus(vo.getVpoint())); + // TODO: 2023/5/18 0018 + } + + @Override + public void loadJLTFV2PackageData(JuliangMobileMonitorCallbackRequestNewV2VO vo) { + // log - 埋点 + log.info("================================= [finish check, do data loading, AdJLTFPackageServiceImpl|loadJLTFV2PackageData, tag is {} , vpoint is {}] =================================", + vo.getTag(), VpointEnum.vPointCodeConvertStatus(vo.getVpoint())); + // TODO: 2023/5/18 0018 + } + + +} diff --git a/src/main/java/com/baiyee/adcallback/service/impl/AdOriginalityManageServiceImpl.java b/src/main/java/com/baiyee/adcallback/service/impl/AdOriginalityManageServiceImpl.java index 88082cf..f55cfa8 100644 --- a/src/main/java/com/baiyee/adcallback/service/impl/AdOriginalityManageServiceImpl.java +++ b/src/main/java/com/baiyee/adcallback/service/impl/AdOriginalityManageServiceImpl.java @@ -1,6 +1,10 @@ package com.baiyee.adcallback.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baiyee.adcallback.api.constants.VpointEnum; +import com.baiyee.adcallback.api.vo.*; import com.baiyee.adcallback.config.pojo.convert.*; import com.baiyee.adcallback.repository.*; import com.baiyee.adcallback.repository.entity.*; @@ -31,15 +35,117 @@ public class AdOriginalityManageServiceImpl implements AdOriginalityManageServic private final TbGdtBackdataEntityRepository gdtBackdataEntityRepository; - public AdOriginalityManageServiceImpl(TbJlBackdataEntityRepository repository, TbBdBackdataEntityRepository bdBackdataEntityRepository, TbUcBackdataEntityRepository tbUcBackdataEntityRepository, TbKsBackdataEntityRepository ksBackdataEntityRepository, TbVivoBackdataEntityRepository vivoBackdataEntityRepository, TbGdtBackdataEntityRepository gdtBackdataEntityRepository) { + private final TbJLV2BackdataEntityRepository jlv2BackdataEntityRepository; + + private final TbJLV1BackdataEntityRepository jlv1BackdataEntityRepository; + + private final TbGdtNewBackdataEntityRepository tbGdtNewBackdataEntityRepository; + + private final TbKSNewBackdataEntityRepository tbKSNewBackdataEntityRepository; + + private final TbBDNewBackdataEntityRepository tbBDNewBackdataEntityRepository; + + public AdOriginalityManageServiceImpl(TbJlBackdataEntityRepository repository, TbBdBackdataEntityRepository bdBackdataEntityRepository, TbUcBackdataEntityRepository tbUcBackdataEntityRepository, TbKsBackdataEntityRepository ksBackdataEntityRepository, TbVivoBackdataEntityRepository vivoBackdataEntityRepository, TbGdtBackdataEntityRepository gdtBackdataEntityRepository, TbJLV2BackdataEntityRepository jlv2BackdataEntityRepository, TbJLV1BackdataEntityRepository jlv1BackdataEntityRepository, TbGdtNewBackdataEntityRepository tbGdtNewBackdataEntityRepository, TbKSNewBackdataEntityRepository tbKSNewBackdataEntityRepository, TbBDNewBackdataEntityRepository tbBDNewBackdataEntityRepository) { this.repository = repository; this.bdBackdataEntityRepository = bdBackdataEntityRepository; this.tbUcBackdataEntityRepository = tbUcBackdataEntityRepository; this.ksBackdataEntityRepository = ksBackdataEntityRepository; this.vivoBackdataEntityRepository = vivoBackdataEntityRepository; this.gdtBackdataEntityRepository = gdtBackdataEntityRepository; + this.jlv2BackdataEntityRepository = jlv2BackdataEntityRepository; + this.jlv1BackdataEntityRepository = jlv1BackdataEntityRepository; + this.tbGdtNewBackdataEntityRepository = tbGdtNewBackdataEntityRepository; + this.tbKSNewBackdataEntityRepository = tbKSNewBackdataEntityRepository; + this.tbBDNewBackdataEntityRepository = tbBDNewBackdataEntityRepository; + } + + @Override + public void handleNewBDTMonitorUrlCallbackDataThenSave(BDMobileMonitorCallbackRequestNewVO vo) { + // log - 埋点 + log.info("================================= [finish check, do data loading, AdOriginalityManageServiceImpl|handleNewBDTMonitorUrlCallbackDataThenSave, tag is {} , vpoint is {}] =================================", + vo.getTag(), VpointEnum.vPointCodeConvertStatus(vo.getVpoint())); + + TbBdNewBackdataEntity backDataEntity = new TbBdNewBackdataEntity(); + + // 数据入库 + BeanUtil.copyProperties(vo, backDataEntity); + + tbBDNewBackdataEntityRepository.save(backDataEntity); } + @Override + public void handleNewKSMonitorUrlCallbackDataThenSave(KSNewMobileMonitorCallbackRequestVO vo) { + // log - 埋点 + log.info("================================= [finish check, do data loading, AdOriginalityManageServiceImpl|handleNewKSMonitorUrlCallbackDataThenSave, tag is {} , vpoint is {}] =================================", + vo.getTag(), VpointEnum.vPointCodeConvertStatus(vo.getVpoint())); + + TbKSNewBackdataEntity backDataEntity = new TbKSNewBackdataEntity(); + + // 数据入库 + BeanUtil.copyProperties(vo, backDataEntity); + + tbKSNewBackdataEntityRepository.save(backDataEntity); + } + + @Override + public void handleNewGDTMonitorUrlCallbackDataThenSave(GdtMobileMonitorCallbackRequestNewVO vo) { + // log - 埋点 + log.info("================================= [finish check, do data loading, AdOriginalityManageServiceImpl|handleNewGDTMonitorUrlCallbackDataThenSave, tag is {} , vpoint is {}] =================================", + vo.getTag(), VpointEnum.vPointCodeConvertStatus(vo.getVpoint())); + + TbGdtNewBackdataEntity backDataEntity = new TbGdtNewBackdataEntity(); + + // 区分 安卓 还是 IOS ios, android + if (StrUtil.isNotBlank(vo.getDeviceOsType()) && StrUtil.equalsIgnoreCase("android", vo.getDeviceOsType())){ + backDataEntity.setImei(vo.getMuid()); + } + + if (StrUtil.isNotBlank(vo.getDeviceOsType()) && StrUtil.equalsIgnoreCase("ios", vo.getDeviceOsType())){ + backDataEntity.setIdfa(vo.getMuid()); + } + + // 数据入库 + BeanUtil.copyProperties(vo, backDataEntity); + + tbGdtNewBackdataEntityRepository.save(backDataEntity); + + } + + /** + * JL - v2 source 入库 + */ + @Override + public void handleNewJLV2MonitorUrlCallbackDataThenSave(JuliangMobileMonitorCallbackRequestNewV2VO vo) { + // log - 埋点 + log.info("================================= [finish check, do data loading, AdOriginalityManageServiceImpl|handleNewJLV2MonitorUrlCallbackDataThenSave, tag is {} , vpoint is {}] =================================", + vo.getTag(), VpointEnum.vPointCodeConvertStatus(vo.getVpoint())); + + + TbJLBackDataV2Entity dataV2Entity = new TbJLBackDataV2Entity(); + // 数据入库 + BeanUtil.copyProperties(vo, dataV2Entity); + + jlv2BackdataEntityRepository.save(dataV2Entity); + } + + /** + * JL - v1 source 入库 + */ + @Override + public void handleNewJLV1MonitorUrlCallbackDataThenSave(JuliangMobileMonitorCallbackRequestNewV1VO vo) { + // log - 埋点 + log.info("================================= [finish check, do data loading, AdOriginalityManageServiceImpl|handleNewJLV1MonitorUrlCallbackDataThenSave, tag is {} , vpoint is {}] =================================", + vo.getTag(), VpointEnum.vPointCodeConvertStatus(vo.getVpoint())); + + TbJLBackDataV1Entity dataV1Entity = new TbJLBackDataV1Entity(); + // 数据入库 + BeanUtil.copyProperties(vo, dataV1Entity); + + jlv1BackdataEntityRepository.save(dataV1Entity); + + } + + @Override public void handleMonitorUrlCallbackDataThenSave() { diff --git a/src/main/java/com/baiyee/adcallback/tools/CheckPlatPointParamsUtil.java b/src/main/java/com/baiyee/adcallback/tools/CheckPlatPointParamsUtil.java new file mode 100644 index 0000000..e2419f7 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/tools/CheckPlatPointParamsUtil.java @@ -0,0 +1,151 @@ +package com.baiyee.adcallback.tools; + +import cn.hutool.core.util.StrUtil; +import com.baiyee.adcallback.api.constants.SpecialCheckParmConstant; +import com.baiyee.adcallback.api.vo.JuliangMobileMonitorCallbackRequestNewV2VO; +import lombok.extern.slf4j.Slf4j; + +/** + * 检查各个平台的重点参数的规则 + */ +@Slf4j +public class CheckPlatPointParamsUtil { + + private CheckPlatPointParamsUtil(){} + + /** + * 检测百度相关参数 + */ + public static boolean checkBDPlatPointParam(String os, String idfa, String imei, String oaidMD5, String oaid) { + + // 安卓 + if (StrUtil.equalsIgnoreCase("0", os) && (StrUtil.isBlank(imei) || StrUtil.isBlank(oaid) || StrUtil.isBlank(oaidMD5))){ + return Boolean.FALSE; + } + + // ios + if (StrUtil.equalsIgnoreCase("1", os) && StrUtil.isBlank(idfa)){ + return Boolean.FALSE; + } + + return Boolean.TRUE; + + } + + /** + * 检测快手的相关参数 + */ + public static boolean checkKSPlatPointParam(String os, String oaid, String imei, String imeiHash, String idfa, String idfaHash) { + // 安卓的 + // FIXME: 2023/5/26 0026 imeiHash 目前不是很通用还是不存了 + if (StrUtil.equalsIgnoreCase("0", os) && (StrUtil.isBlank(imei) || StrUtil.isBlank(oaid))){ + return Boolean.FALSE; + } + + // ios + if (StrUtil.equalsIgnoreCase("1", os) && StrUtil.isBlank(idfa)){ + return Boolean.FALSE; + } + + return Boolean.TRUE; + } + + + /** + * 检测广点通的参数 + */ + public static boolean checkGDTPlatPointParam(String os, String muid, String oaid){ + + // 安卓的 + if (StrUtil.equalsIgnoreCase("android", os) && (StrUtil.isBlank(muid) || StrUtil.isBlank(oaid))){ + return Boolean.FALSE; + } + + // ios + if (StrUtil.equalsIgnoreCase("ios", os) && StrUtil.isBlank(muid)){ + return Boolean.FALSE; + } + + return Boolean.TRUE; + } + + /** + * 检查JL重点参数 + * + * @return 直接返回校验是否通过 + */ + public static boolean checkJLPlatPointV2Param(String os1, String imei, String idfa, String idfaMD5){ + + //安卓:0 + //IOS:1 + //其他:3 + int os = Integer.parseInt(os1); + + log.info("================================= [pre check model, os is {} ] =================================", os); + + /* + imei 默认是 回传 MD5 摘要, 排除全0的md5摘要和空串的情况 000000000000000 + idfa / idfaMD5 可能有存在一个或者都不存在的情况, 排除 00000000-0000-0000-0000-000000000000, 0值也会进行MD5加密,和空串 + + */ + + // 安卓 + if (os == 0 && + (StrUtil.equals(SpecialCheckParmConstant.ZERO_JL_IMEI, imei) || + StrUtil.equals(SpecialCheckParmConstant.ZERO_JL_IMEI_MD5, imei) || + StrUtil.isBlank(imei)) + ){ + return Boolean.FALSE; + } + + // IOS + if (os == 1 && + (StrUtil.equals(SpecialCheckParmConstant.ZERO_JL_IDFA, idfa) || + StrUtil.equals(SpecialCheckParmConstant.ZERO_JL_IMEI_MD5, idfaMD5) || + StrUtil.isBlank(idfa) || + StrUtil.isBlank(idfaMD5)) + + ){ + return Boolean.FALSE; + } + + // 其他 + if (os == 3 && (StrUtil.isBlank(imei) || StrUtil.isBlank(idfa) || StrUtil.isBlank(idfaMD5))){ + return Boolean.FALSE; + } + + return Boolean.TRUE; + } + + /** + * 通用的检查核心参数的工具方法 + * + * @return 校验结果 + */ + public static boolean checkMainParamForPut(String oaid,String oaidMD5, + String imei, String imeiMD5, + String idfa, String idfaMD5, + String mac){ + /* + 判断逻辑和思路: + main参数可能存在MD5值和原值其中一个为空的情况, 只要有一个存在即可 + 当且仅当, 所有参数都为无意义值的时候不进行保存 + + oaid / oaidMD5 空值判断 + mac 去冒号,全转成大写, 再MD5摘要 可能为空串 + */ + + if ((StrUtil.isBlank(oaid) || StrUtil.isBlank(oaidMD5)) + && (StrUtil.isBlank(imei) || StrUtil.isBlank(imeiMD5)) + && (StrUtil.isBlank(idfa) || StrUtil.isBlank(idfaMD5)) + && StrUtil.isBlank(mac) + ){ + return Boolean.FALSE; + } + + return Boolean.TRUE; + } + + + +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 6a41b6b..0936e22 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -6,9 +6,9 @@ spring: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://8.130.96.163/db_ad?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&rewriteBatchedStatements=true + url: jdbc:mysql://localhost/db_ad?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&rewriteBatchedStatements=true username: root - password: y7z7noq2 + password: root # 初始连接数 initial-size: 5 # 最小连接数 diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 243ae84..b2afbbb 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -4,7 +4,7 @@ spring: application: name: ad-callback profiles: - active: prod + active: dev jackson: time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss