diff --git a/pom.xml b/pom.xml index 4fe05c8..207d624 100644 --- a/pom.xml +++ b/pom.xml @@ -72,7 +72,11 @@ guava 22.0 - + + net.lingala.zip4j + zip4j + 1.3.2 + diff --git a/src/main/java/com/baiyee/adcallback/api/callback/MobileMonitorCallbackNewAPI.java b/src/main/java/com/baiyee/adcallback/api/callback/MobileMonitorCallbackNewAPI.java index 8f31906..bc0992f 100644 --- a/src/main/java/com/baiyee/adcallback/api/callback/MobileMonitorCallbackNewAPI.java +++ b/src/main/java/com/baiyee/adcallback/api/callback/MobileMonitorCallbackNewAPI.java @@ -4,7 +4,6 @@ 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; @@ -13,11 +12,11 @@ import org.springframework.web.bind.annotation.RestController; /** * 更新时间 2023-5-18 - * + *

* 监测互联网回值的基本类 - * + *

* 涉及: - * 巨量广告, 广电通, 快手, 百度 + * 巨量广告, 广电通, 快手, 百度 * * @author q */ @@ -30,64 +29,61 @@ public class MobileMonitorCallbackNewAPI { private final AdOriginalityManageService originalityManageService; - private final AdTFPackageService adTFPackageService; - - public MobileMonitorCallbackNewAPI(AdOriginalityManageService originalityManageService, AdTFPackageService adTFPackageService) { + public MobileMonitorCallbackNewAPI(AdOriginalityManageService originalityManageService) { 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 - ){ + @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 + 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){ + if (StrUtil.isNotBlank(tag) && vpoint >= 0) { vo.setTag(tag); vo.setVpoint(vpoint); } @@ -97,61 +93,56 @@ public class MobileMonitorCallbackNewAPI { 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 - ){ + @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 + 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){ + if (StrUtil.isNotBlank(tag) && vpoint >= 0) { vo.setTag(tag); vo.setVpoint(vpoint); } @@ -161,17 +152,12 @@ public class MobileMonitorCallbackNewAPI { 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") @@ -181,7 +167,7 @@ public class MobileMonitorCallbackNewAPI { @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 = "photoid", defaultValue = "") String photoId, @RequestParam(value = "oaid", defaultValue = "") String oaid, @RequestParam(value = "imei", defaultValue = "") String imei, @RequestParam(value = "imeiHash", defaultValue = "") String imeiHash, @@ -190,7 +176,7 @@ public class MobileMonitorCallbackNewAPI { @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 = "ua", defaultValue = "") String ua, @RequestParam(value = "os", defaultValue = "") String os, @RequestParam(value = "model", defaultValue = "") String model, @RequestParam(value = "callback", defaultValue = "") String callBack, @@ -200,35 +186,30 @@ public class MobileMonitorCallbackNewAPI { @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 + 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){ + 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())) { + 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") @@ -254,16 +235,16 @@ public class MobileMonitorCallbackNewAPI { @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 + 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){ + if (StrUtil.isNotBlank(tag) && vpoint >= 0) { vo.setTag(tag); vo.setVpoint(vpoint); } @@ -273,18 +254,13 @@ public class MobileMonitorCallbackNewAPI { 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") @@ -327,15 +303,15 @@ public class MobileMonitorCallbackNewAPI { @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 + accountId, clickId, clickTime, deviceOsType, + muid, oaid, mac, + campaignId, adgroupId, adId, promotedObjectId, ip, userAgent, callback, promotedObjectType ); // 映射 - Base 参数 - if (StrUtil.isNotBlank(tag) && vpoint >= 0){ + if (StrUtil.isNotBlank(tag) && vpoint >= 0) { vo.setTag(tag); vo.setVpoint(vpoint); } @@ -345,11 +321,6 @@ public class MobileMonitorCallbackNewAPI { 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/dto/TfSourceDTO.java b/src/main/java/com/baiyee/adcallback/api/dto/TfSourceDTO.java new file mode 100644 index 0000000..70e59d0 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/api/dto/TfSourceDTO.java @@ -0,0 +1,46 @@ +package com.baiyee.adcallback.api.dto; + +import lombok.Data; + +/** + * @author wjt + * @date 2023/5/31 + */ +@Data +public class TfSourceDTO { + /** + * 点击时间 + */ + private String clickTime; + /** + * '广告名称' + */ + private String adName; + /** + * '安卓设备id' + */ + private String imei; + + /** + * '苹果设备id' + */ + private String idfa; + /** + * mac地址 + */ + private String mac; + /** + * '安卓系统移动终端补充设备标识' + */ + private String oaid; + /** + * '用于监测链接的自定义带参格式' + */ + private String tag; + + /** + * '用于区分广告配置的地方' + */ + private Integer vpoint; + +} diff --git a/src/main/java/com/baiyee/adcallback/common/enums/TableEnum.java b/src/main/java/com/baiyee/adcallback/common/enums/TableEnum.java index ebbdee6..cf21e12 100644 --- a/src/main/java/com/baiyee/adcallback/common/enums/TableEnum.java +++ b/src/main/java/com/baiyee/adcallback/common/enums/TableEnum.java @@ -36,8 +36,18 @@ public enum TableEnum { /** * 广点通 */ - GD("tb_gdt_backdata"); + GD("tb_gdt_backdata"), + JL1("tb_jl_v1_backdata"), + + JL2("tb_jl_v2_backdata"), + + GDT_NEW("tb_gdt_new_backdata"), + + KS_NEW("tb_ks_new_backdata"), + + BD_NEW("tb_bd_new_backdata"), + ; /** * 类型 */ diff --git a/src/main/java/com/baiyee/adcallback/repository/TbBDNewBackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbBDNewBackdataEntityRepository.java index e827608..81d727b 100644 --- a/src/main/java/com/baiyee/adcallback/repository/TbBDNewBackdataEntityRepository.java +++ b/src/main/java/com/baiyee/adcallback/repository/TbBDNewBackdataEntityRepository.java @@ -2,7 +2,6 @@ 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; @@ -29,4 +28,7 @@ public interface TbBDNewBackdataEntityRepository extends JpaRepository= :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); + + @Query(value = "SELECT * FROM tb_bd_new_backdata WHERE imei != '' AND imei != '__imei__' AND gmt_create > ?1 AND gmt_create < ?2", nativeQuery = true) + List queryByDate(String startDate, String endDate); } diff --git a/src/main/java/com/baiyee/adcallback/repository/TbGdtNewBackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbGdtNewBackdataEntityRepository.java index e4d6e0a..54f851d 100644 --- a/src/main/java/com/baiyee/adcallback/repository/TbGdtNewBackdataEntityRepository.java +++ b/src/main/java/com/baiyee/adcallback/repository/TbGdtNewBackdataEntityRepository.java @@ -2,7 +2,6 @@ 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; @@ -17,6 +16,7 @@ public interface TbGdtNewBackdataEntityRepository extends JpaRepository= :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); + 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); + + @Query(value = "SELECT * FROM tb_gdt_new_backdata WHERE imei != '' AND imei != '__imei__' AND gmt_create > ?1 AND gmt_create < ?2", nativeQuery = true) + List queryByDate(String startDate, String endDate); } diff --git a/src/main/java/com/baiyee/adcallback/repository/TbJLV1BackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbJLV1BackdataEntityRepository.java index 03e13f9..4ffb334 100644 --- a/src/main/java/com/baiyee/adcallback/repository/TbJLV1BackdataEntityRepository.java +++ b/src/main/java/com/baiyee/adcallback/repository/TbJLV1BackdataEntityRepository.java @@ -36,4 +36,6 @@ public interface TbJLV1BackdataEntityRepository extends JpaRepository= :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); + @Query(value = "SELECT * FROM tb_jl_v1_backdata WHERE imei != '' AND imei != '__IMEI__' AND gmt_create > ?1 AND gmt_create < ?2", nativeQuery = true) + List queryByDate(String startDate, String endDate); } diff --git a/src/main/java/com/baiyee/adcallback/repository/TbJLV2BackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbJLV2BackdataEntityRepository.java index 4f68d50..0cb8673 100644 --- a/src/main/java/com/baiyee/adcallback/repository/TbJLV2BackdataEntityRepository.java +++ b/src/main/java/com/baiyee/adcallback/repository/TbJLV2BackdataEntityRepository.java @@ -21,6 +21,8 @@ public interface TbJLV2BackdataEntityRepository extends JpaRepository queryAllImeiByDate(Date startDate, Date endDate); + @Query(value = "SELECT * FROM tb_jl_v2_backdata WHERE imei != '' AND imei != '__IMEI__' AND gmt_create > ?1 AND gmt_create < ?2", nativeQuery = true) + List queryByDate(String startDate, String endDate); /** * 查询数据 diff --git a/src/main/java/com/baiyee/adcallback/repository/TbKSNewBackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbKSNewBackdataEntityRepository.java index dfbd381..c54010e 100644 --- a/src/main/java/com/baiyee/adcallback/repository/TbKSNewBackdataEntityRepository.java +++ b/src/main/java/com/baiyee/adcallback/repository/TbKSNewBackdataEntityRepository.java @@ -3,7 +3,6 @@ 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; @@ -17,6 +16,7 @@ public interface TbKSNewBackdataEntityRepository extends JpaRepository= :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); + + @Query(value = "SELECT * FROM tb_ks_new_backdata WHERE imei != '' AND imei != '__imei__' AND gmt_create > ?1 AND gmt_create < ?2", nativeQuery = true) + List queryByDate(String startDate, String endDate); } diff --git a/src/main/java/com/baiyee/adcallback/repository/TbTfSourceEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbTfSourceEntityRepository.java new file mode 100644 index 0000000..1ab526d --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/repository/TbTfSourceEntityRepository.java @@ -0,0 +1,11 @@ +package com.baiyee.adcallback.repository; + +import com.baiyee.adcallback.repository.entity.TbTfSourceEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +/** + * @author wjt + * @date 2023/5/31 + */ +public interface TbTfSourceEntityRepository extends JpaRepository { +} diff --git a/src/main/java/com/baiyee/adcallback/repository/entity/TbTfSourceEntity.java b/src/main/java/com/baiyee/adcallback/repository/entity/TbTfSourceEntity.java new file mode 100644 index 0000000..82bf6e1 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/repository/entity/TbTfSourceEntity.java @@ -0,0 +1,89 @@ +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.io.Serializable; +import java.util.Date; + +/** + * @author wjt + * @date 2023/5/31 + */ +@Data +@Entity +@Table(name = "tb_tf_source", schema = "db_ad") +@EntityListeners(AuditingEntityListener.class) +public class TbTfSourceEntity implements Serializable { + + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "gmt_create") + @CreatedDate + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date gmtCreate; + + @Column(name = "gmt_modified") + @LastModifiedDate + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date gmtModified; + + @LastModifiedBy + @Column(name = "operator") + private String operator; + + @Column(name = "produce_time") + private String produceTime; + + @Column(name = "ad_name") + private String adName; + + @Column(name = "category") + private String category; + + @Column(name = "file_name") + private String fileName; + + @Column(name = "file_path") + private String filePath; + + @Column(name = "file_pwd") + private String filePwd; + + /** + * 文件状态, 1-正在生成 2-正常 3-禁用 4-删除 + */ + @Column(name = "file_status") + private Integer fileStatus; + + @Column(name = "last_operator_time") + @LastModifiedDate + private Date lastOperatorTime; + + @Column(name = "weight") + private Integer weight; + + + public TbTfSourceEntity addTbTfSourceEntity(String produceTime, String adName, String category, String fileName, String filePath, String filePwd) { + this.setProduceTime(produceTime); + this.setAdName(adName); + this.setCategory(category); + this.setFileName(fileName); + this.setFilePath(filePath); + this.setFilePwd(filePwd); + this.setFileStatus(2); + this.setWeight(0); + return this; + } +} diff --git a/src/main/java/com/baiyee/adcallback/service/AdTFPackageService.java b/src/main/java/com/baiyee/adcallback/service/AdTFPackageService.java deleted file mode 100644 index 2c8dcbd..0000000 --- a/src/main/java/com/baiyee/adcallback/service/AdTFPackageService.java +++ /dev/null @@ -1,17 +0,0 @@ -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 deleted file mode 100644 index 49e5728..0000000 --- a/src/main/java/com/baiyee/adcallback/service/impl/AdJLTFPackageServiceImpl.java +++ /dev/null @@ -1,54 +0,0 @@ -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/task/TfSourceTask.java b/src/main/java/com/baiyee/adcallback/task/TfSourceTask.java new file mode 100644 index 0000000..1a1023f --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/task/TfSourceTask.java @@ -0,0 +1,181 @@ +package com.baiyee.adcallback.task; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.text.csv.CsvWriter; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import com.baiyee.adcallback.api.dto.TfSourceDTO; +import com.baiyee.adcallback.common.util.FileUtil; +import com.baiyee.adcallback.repository.*; +import com.baiyee.adcallback.repository.entity.*; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.lingala.zip4j.core.ZipFile; +import net.lingala.zip4j.exception.ZipException; +import net.lingala.zip4j.model.ZipParameters; +import net.lingala.zip4j.util.Zip4jConstants; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author wjt + * @date 2023/5/31 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class TfSourceTask { + + private final TbJLV2BackdataEntityRepository tbJLV2BackdataEntityRepository; + private final TbJLV1BackdataEntityRepository tbJLV1BackdataEntityRepository; + private final TbGdtNewBackdataEntityRepository tbGdtNewBackdataEntityRepository; + private final TbKSNewBackdataEntityRepository tbKSNewBackdataEntityRepository; + private final TbBDNewBackdataEntityRepository tbBDNewBackdataEntityRepository; + private final TbTfSourceEntityRepository tbTfSourceEntityRepository; + + @Value("${tf.source.path}") + private String path; + + /** + * 每天晚上23点 30分 + *

+ * 所有今天的数据压缩成投放包 + */ + @Scheduled(cron = "0 30 23 * * ? ") + @Transactional(rollbackFor = Exception.class) + public void tfSource() { + log.info("++++++++++++++++++++++TfSource Sync start time {} ++++++++++++++++", DateUtil.now()); + String startTime = DateUtil.format(DateUtil.date(), "yyyy-MM-dd 00:00:00"); + String endTime = DateUtil.format(DateUtil.date(), "yyyy-MM-dd 23:59:59"); + List list = new ArrayList<>(); + //jlv2 + obtainDateByJlV2(startTime, endTime, list); + //jlv1 + obtainDateByJlv1(startTime, endTime, list); + //gdt + obtainDateByGdt(startTime, endTime, list); + //ks + obtainDateByKs(startTime, endTime, list); + //bd + obtainDateByBd(startTime, endTime, list); + + if (CollUtil.isEmpty(list)) { + return; + } + //tag分组 + HashMap> mapByTag = new HashMap<>(list.stream().collect(Collectors.groupingBy(TfSourceDTO::getTag, Collectors.toList()))); + + String format = DateUtil.format(DateUtil.date(), "yyyy-MM-dd"); + List saveList = new ArrayList<>(); + for (String tag : mapByTag.keySet()) { + String password = RandomUtil.randomString(6); + //压缩文件 + String filePath = generateFile(tag, format, password, mapByTag.get(tag)); + if (StrUtil.isNotBlank(filePath)) { + //保存文件记录 + TbTfSourceEntity tbTfSourceEntity = new TbTfSourceEntity().addTbTfSourceEntity(format, null, null, tag, filePath, password); + saveList.add(tbTfSourceEntity); + } + } + tbTfSourceEntityRepository.saveAll(saveList); + log.info("++++++++++++++++++++++TfSource Sync end time {} ++++++++++++++++", DateUtil.now()); + } + + /** + * 生成文件 + * + * @param tag + * @param list + */ + private String generateFile(String tag, String format, String password, List list) { + String filePath = path + format; + File file = new File(filePath + File.separator + tag + ".csv"); + CsvWriter writer = new CsvWriter(file, StandardCharsets.UTF_8); + writer.writeBeans(list); + writer.flush(); + writer.close(); + return zipFile(file, filePath + File.separator + tag + ".zip", password); + } + + /** + * 生成加密压缩包 + * + * @param srcFile + * @param newPath + * @param password + */ + private String zipFile(File srcFile, String newPath, String password) { + ZipParameters zipParameters = new ZipParameters(); + zipParameters.setEncryptionMethod(Zip4jConstants.COMP_DEFLATE); + zipParameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); + if (StrUtil.isNotBlank(password)) { + zipParameters.setEncryptFiles(true); + zipParameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD); + zipParameters.setPassword(password.toCharArray()); + } + try { + ZipFile zipFile = new ZipFile(newPath); + if (srcFile.isDirectory()) { + zipFile.addFolder(srcFile, zipParameters); + } else { + zipFile.addFile(srcFile, zipParameters); + } + FileUtil.del(srcFile); + return newPath; + } catch (ZipException e) { + e.printStackTrace(); + } + return null; + } + + private void obtainDateByJlV2(String startTime, String endTime, List list) { + List jlV2Data = tbJLV2BackdataEntityRepository.queryByDate(startTime, endTime); + if (CollUtil.isNotEmpty(jlV2Data)) { + List tfSourceDTOS = Convert.toList(TfSourceDTO.class, jlV2Data); + list.addAll(tfSourceDTOS); + } + } + + private void obtainDateByJlv1(String startTime, String endTime, List list) { + List jlV1Data = tbJLV1BackdataEntityRepository.queryByDate(startTime, endTime); + if (CollUtil.isNotEmpty(jlV1Data)) { + List tfSourceDTOS = Convert.toList(TfSourceDTO.class, jlV1Data); + list.addAll(tfSourceDTOS); + } + } + + private void obtainDateByGdt(String startTime, String endTime, List list) { + List jlV2Data = tbGdtNewBackdataEntityRepository.queryByDate(startTime, endTime); + if (CollUtil.isNotEmpty(jlV2Data)) { + List tfSourceDTOS = Convert.toList(TfSourceDTO.class, jlV2Data); + list.addAll(tfSourceDTOS); + } + } + + private void obtainDateByKs(String startTime, String endTime, List list) { + List jlV2Data = tbKSNewBackdataEntityRepository.queryByDate(startTime, endTime); + if (CollUtil.isNotEmpty(jlV2Data)) { + List tfSourceDTOS = Convert.toList(TfSourceDTO.class, jlV2Data); + list.addAll(tfSourceDTOS); + } + } + + private void obtainDateByBd(String startTime, String endTime, List list) { + List jlV2Data = tbBDNewBackdataEntityRepository.queryByDate(startTime, endTime); + if (CollUtil.isNotEmpty(jlV2Data)) { + List tfSourceDTOS = Convert.toList(TfSourceDTO.class, jlV2Data); + list.addAll(tfSourceDTOS); + } + } +} diff --git a/src/main/resources/application-online.yml b/src/main/resources/application-online.yml index 035700f..4932944 100644 --- a/src/main/resources/application-online.yml +++ b/src/main/resources/application-online.yml @@ -43,3 +43,6 @@ spring: wall: config: multi-statement-allow: true +tf: + source: + path: /home/www/ad-bak/source/ \ No newline at end of file diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 2e1617c..67e6af1 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -47,3 +47,7 @@ spring: platform: authToken: nqJpVSf3UcrEcVIH url: https://baiyee.vip/api/taskImei/callback/add + +tf: + source: + path: /home/www/ad-bak/source/ \ No newline at end of file