From 9ea0a1fad84d2fc9ddd945f7628f7d2339301170 Mon Sep 17 00:00:00 2001 From: qyx <565485304@qq.com> Date: Tue, 30 May 2023 16:00:02 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BB=A3=E7=A0=81=E9=87=8D=E6=9E=84](master):?= =?UTF-8?q?=20DMP=E5=BA=95=E5=B1=82=E7=9B=91=E6=8E=A7=E9=80=BB=E8=BE=91v2.?= =?UTF-8?q?0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2023-5-30 15:59:16 更新底层监测代码,准备测试 --- README.md | 19 +- TODO-list.md | 71 ++++ file/参数对应表.xlsx | Bin 0 -> 12787 bytes sql/initDB.sql | 266 +++++++++++++ .../callback/MobileMonitorCallbackNewAPI.java | 357 ++++++++++++++++++ .../constants/SpecialCheckParmConstant.java | 18 + .../api/constants/TagTypeConstant.java | 21 ++ .../adcallback/api/constants/VpointEnum.java | 59 +++ .../BDMobileMonitorCallbackRequestNewVO.java | 142 +++++++ .../GdtMobileMonitorCallbackRequestNewVO.java | 252 +++++++++++++ ...ngMobileMonitorCallbackRequestNewV1VO.java | 82 ++++ ...ngMobileMonitorCallbackRequestNewV2VO.java | 209 ++++++++++ .../KSNewMobileMonitorCallbackRequestVO.java | 138 +++++++ .../vo/MobileMonitorCallbackRequestBase.java | 16 +- .../TbBDNewBackdataEntityRepository.java | 32 ++ .../TbGdtNewBackdataEntityRepository.java | 32 ++ .../TbJLV1BackdataEntityRepository.java | 39 ++ .../TbJLV2BackdataEntityRepository.java | 33 ++ .../TbKSNewBackdataEntityRepository.java | 31 ++ .../entity/TbBdNewBackdataEntity.java | 114 ++++++ .../entity/TbGdtNewBackdataEntity.java | 126 +++++++ .../entity/TbJLBackDataV1Entity.java | 169 +++++++++ .../entity/TbJLBackDataV2Entity.java | 179 +++++++++ .../entity/TbKSNewBackdataEntity.java | 141 +++++++ .../service/AdOriginalityManageService.java | 20 +- .../service/AdTFPackageService.java | 17 + .../impl/AdJLTFPackageServiceImpl.java | 54 +++ .../impl/AdOriginalityManageServiceImpl.java | 108 +++++- .../tools/CheckPlatPointParamsUtil.java | 151 ++++++++ src/main/resources/application-dev.yml | 4 +- src/main/resources/application.yml | 2 +- 31 files changed, 2895 insertions(+), 7 deletions(-) create mode 100644 TODO-list.md create mode 100644 file/参数对应表.xlsx create mode 100644 sql/initDB.sql create mode 100644 src/main/java/com/baiyee/adcallback/api/callback/MobileMonitorCallbackNewAPI.java create mode 100644 src/main/java/com/baiyee/adcallback/api/constants/SpecialCheckParmConstant.java create mode 100644 src/main/java/com/baiyee/adcallback/api/constants/VpointEnum.java create mode 100644 src/main/java/com/baiyee/adcallback/api/vo/BDMobileMonitorCallbackRequestNewVO.java create mode 100644 src/main/java/com/baiyee/adcallback/api/vo/GdtMobileMonitorCallbackRequestNewVO.java create mode 100644 src/main/java/com/baiyee/adcallback/api/vo/JuliangMobileMonitorCallbackRequestNewV1VO.java create mode 100644 src/main/java/com/baiyee/adcallback/api/vo/JuliangMobileMonitorCallbackRequestNewV2VO.java create mode 100644 src/main/java/com/baiyee/adcallback/api/vo/KSNewMobileMonitorCallbackRequestVO.java create mode 100644 src/main/java/com/baiyee/adcallback/repository/TbBDNewBackdataEntityRepository.java create mode 100644 src/main/java/com/baiyee/adcallback/repository/TbGdtNewBackdataEntityRepository.java create mode 100644 src/main/java/com/baiyee/adcallback/repository/TbJLV1BackdataEntityRepository.java create mode 100644 src/main/java/com/baiyee/adcallback/repository/TbJLV2BackdataEntityRepository.java create mode 100644 src/main/java/com/baiyee/adcallback/repository/TbKSNewBackdataEntityRepository.java create mode 100644 src/main/java/com/baiyee/adcallback/repository/entity/TbBdNewBackdataEntity.java create mode 100644 src/main/java/com/baiyee/adcallback/repository/entity/TbGdtNewBackdataEntity.java create mode 100644 src/main/java/com/baiyee/adcallback/repository/entity/TbJLBackDataV1Entity.java create mode 100644 src/main/java/com/baiyee/adcallback/repository/entity/TbJLBackDataV2Entity.java create mode 100644 src/main/java/com/baiyee/adcallback/repository/entity/TbKSNewBackdataEntity.java create mode 100644 src/main/java/com/baiyee/adcallback/service/AdTFPackageService.java create mode 100644 src/main/java/com/baiyee/adcallback/service/impl/AdJLTFPackageServiceImpl.java create mode 100644 src/main/java/com/baiyee/adcallback/tools/CheckPlatPointParamsUtil.java 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 0000000000000000000000000000000000000000..6c62c91d14559698ce7e72339f939f66b53eb87f GIT binary patch literal 12787 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 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