From 3ef0d821e926f5d242e6584b365a378e388963a1 Mon Sep 17 00:00:00 2001 From: qyx <565485304@qq.com> Date: Thu, 10 Feb 2022 19:04:15 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=96=B0=E5=A2=9E=E5=8A=9F=E8=83=BD](master):?= =?UTF-8?q?=20=E7=99=BE=E5=BA=A6=E6=8A=95=E6=94=BE=E6=96=B0=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 如题 --- README.md | 2 +- .../BaiduMobileMonitorCallbackAPI.java | 114 ++++++++++++++++++ .../JuliangMobileMonitorCallbackAPI.java | 4 +- .../BaiduMobileMonitorCallbackRequestVO.java | 55 +++++++++ .../adcallback/config/pojo/BdBackdataDTO.java | 37 ++++++ .../pojo/JlBackdataDTO.java | 5 +- .../pojo/convert/BdBackdataConvert.java | 41 +++++++ .../pojo/convert/JlBackdataConvert.java | 4 +- .../TbBdBackdataEntityRepository.java | 7 ++ .../repository/entity/TbBdBackdataEntity.java | 91 ++++++++++++++ .../service/AdOriginalityManageService.java | 6 + .../impl/AdOriginalityManageServiceImpl.java | 22 +++- 12 files changed, 377 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/baiyee/adcallback/api/callback/BaiduMobileMonitorCallbackAPI.java create mode 100644 src/main/java/com/baiyee/adcallback/api/vo/BaiduMobileMonitorCallbackRequestVO.java create mode 100644 src/main/java/com/baiyee/adcallback/config/pojo/BdBackdataDTO.java rename src/main/java/com/baiyee/adcallback/{common => config}/pojo/JlBackdataDTO.java (75%) create mode 100644 src/main/java/com/baiyee/adcallback/config/pojo/convert/BdBackdataConvert.java rename src/main/java/com/baiyee/adcallback/{common => config}/pojo/convert/JlBackdataConvert.java (91%) create mode 100644 src/main/java/com/baiyee/adcallback/repository/TbBdBackdataEntityRepository.java create mode 100644 src/main/java/com/baiyee/adcallback/repository/entity/TbBdBackdataEntity.java diff --git a/README.md b/README.md index 7f096ee..304e1ff 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ## 巨量引擎开放平台 - 巨量引擎 https://open.oceanengine.com/doc/index.html?key=ad&type=api&id=1696710655781900#item-link-%E7%A4%BA%E4%BE%8B ## 百度广告投放平台检测 - 百度营销 - https://dev2.baidu.com/content?sceneType=0&pageId=101214&nodeId=662&subhead= + https://dev2.baidu.com/content?sceneType=0&pageId=101214&nodeId=15&subhead= ## 广电通 - 腾讯广告 https://developers.e.qq.com/docs/guide/conversion/new_version/dianjijiance \ No newline at end of file diff --git a/src/main/java/com/baiyee/adcallback/api/callback/BaiduMobileMonitorCallbackAPI.java b/src/main/java/com/baiyee/adcallback/api/callback/BaiduMobileMonitorCallbackAPI.java new file mode 100644 index 0000000..bf187c3 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/api/callback/BaiduMobileMonitorCallbackAPI.java @@ -0,0 +1,114 @@ +package com.baiyee.adcallback.api.callback; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baiyee.adcallback.api.common.CommonResponse; +import com.baiyee.adcallback.api.common.ResponseCode; +import com.baiyee.adcallback.api.vo.BaiduMobileMonitorCallbackRequestVO; +import com.baiyee.adcallback.config.pojo.BdBackdataDTO; +import com.baiyee.adcallback.config.pojo.JlBackdataDTO; +import com.baiyee.adcallback.config.pojo.convert.BdBackdataConvert; +import com.baiyee.adcallback.service.AdOriginalityManageService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import static com.baiyee.adcallback.common.constant.JuliangConstant.IMEI_TAG; + +/** + * baidu 移动监控回调的api + * + * @author q + * @date 2022/01/06 + * @see + */ +@RestController +@RequestMapping(value = ("/bd")) +@Slf4j +public class BaiduMobileMonitorCallbackAPI { + + + + private final AdOriginalityManageService adOriginalityManageService; + + public BaiduMobileMonitorCallbackAPI(AdOriginalityManageService adOriginalityManageService) { + this.adOriginalityManageService = adOriginalityManageService; + } + + + /** + * 百度链接监测 + * + * 监测示例 URL - 广告主填写: + * http://www.test.com/notice?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 = "/monitor") + public CommonResponse baiduMonitorUrlCallbackReqUrl( + @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_md5", defaultValue = "") String imei, + @RequestParam(value = "oaid", defaultValue = "") String oaid, + @RequestParam(value = "mac", defaultValue = "") String mac, + @RequestParam(value = "ip", defaultValue = "") String ip, + @RequestParam(value = "os", defaultValue = "") String os, + @RequestParam(value = "TIMESTAMP", defaultValue = "") Long ts, + @RequestParam(value = "device_info", defaultValue = "") String deviceInfo, + @RequestParam(value = "interactionsType", defaultValue = "") String interactionsType, + @RequestParam(value = "ext_info", defaultValue = "") String extInfo, + @RequestParam(value = "callType", defaultValue = "") String callType + + ) { + BaiduMobileMonitorCallbackRequestVO vo = new BaiduMobileMonitorCallbackRequestVO( + userId,aid,pid,uid,callbackUrl,clickId,idfa,imei,oaid,mac,ip,os,ts,deviceInfo,interactionsType,extInfo,callType + ); + + if (ObjectUtil.isNull(vo)) { + return CommonResponse.createByErrorMessage(ResponseCode.EMPTY_ARGUMENT.getDesc()); + } + // 请求过滤规则,过滤掉不用的数据 + if (preRuleForReq(vo)){ + log.error("================================= [not right imei data ,{} ] =================================",vo); + return CommonResponse.createBySuccess(); + } + + log.info("================================= [one request comming, BaiduMobileMonitorCallbackAPI|baiduMonitorUrlCallbackReqUrl, vo is {} ] =================================", vo); + + BdBackdataDTO bdBackdataDTO = new BdBackdataDTO(); + BdBackdataConvert.voCovertToDTO(vo, bdBackdataDTO); + + adOriginalityManageService.handleMonitorUrlCallbackDataThenSave(); + + return CommonResponse.createBySuccess(); + } + + /** + * 之前的规则要求 + * + * @return boolean + */ + private boolean preRuleForReq(BaiduMobileMonitorCallbackRequestVO vo) { + + String imei = vo.getImeiMd5(); + if (StrUtil.isBlank(imei)){ + return Boolean.TRUE; + } + + if (StrUtil.isNotBlank(imei) && StrUtil.equalsIgnoreCase(IMEI_TAG,imei)){ + return Boolean.TRUE; + } + + return Boolean.FALSE; + + } + + + + +} diff --git a/src/main/java/com/baiyee/adcallback/api/callback/JuliangMobileMonitorCallbackAPI.java b/src/main/java/com/baiyee/adcallback/api/callback/JuliangMobileMonitorCallbackAPI.java index c785f27..7d02237 100644 --- a/src/main/java/com/baiyee/adcallback/api/callback/JuliangMobileMonitorCallbackAPI.java +++ b/src/main/java/com/baiyee/adcallback/api/callback/JuliangMobileMonitorCallbackAPI.java @@ -5,8 +5,8 @@ import cn.hutool.core.util.StrUtil; import com.baiyee.adcallback.api.common.CommonResponse; import com.baiyee.adcallback.api.common.ResponseCode; import com.baiyee.adcallback.api.vo.JuliangMobileMonitorCallbackRequestVO; -import com.baiyee.adcallback.common.pojo.JlBackdataDTO; -import com.baiyee.adcallback.common.pojo.convert.JlBackdataConvert; +import com.baiyee.adcallback.config.pojo.JlBackdataDTO; +import com.baiyee.adcallback.config.pojo.convert.JlBackdataConvert; import com.baiyee.adcallback.service.AdOriginalityManageService; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/src/main/java/com/baiyee/adcallback/api/vo/BaiduMobileMonitorCallbackRequestVO.java b/src/main/java/com/baiyee/adcallback/api/vo/BaiduMobileMonitorCallbackRequestVO.java new file mode 100644 index 0000000..79a9f2f --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/api/vo/BaiduMobileMonitorCallbackRequestVO.java @@ -0,0 +1,55 @@ +package com.baiyee.adcallback.api.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + +/** + * 百度移动监控调请求VO + * + * @author q + * @date 2022/02/10 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BaiduMobileMonitorCallbackRequestVO implements Serializable { + + private String userid; + + private String aid; + + private String pid; + + private String uid; + + private String callbackUrl; + + private String clickId; + + private String idfa; + + private String imeiMd5; + + private String oaid; + + private String mac; + + private String ip; + + private String os; + + private Long ts; + + private String deviceInfo; + + private String interactionsType; + + private String extInfo; + + private String callType; + +} diff --git a/src/main/java/com/baiyee/adcallback/config/pojo/BdBackdataDTO.java b/src/main/java/com/baiyee/adcallback/config/pojo/BdBackdataDTO.java new file mode 100644 index 0000000..79c0dcf --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/config/pojo/BdBackdataDTO.java @@ -0,0 +1,37 @@ +package com.baiyee.adcallback.config.pojo; + +public class BdBackdataDTO { + private String userid; + + private String aid; + + private String pid; + + private String uid; + + private String callbackUrl; + + private String clickId; + + private String idfa; + + private String imeiMd5; + + private String oaid; + + private String mac; + + private String ip; + + private String os; + + private Long ts; + + private String deviceInfo; + + private String interactionsType; + + private String extInfo; + + private String callType; +} diff --git a/src/main/java/com/baiyee/adcallback/common/pojo/JlBackdataDTO.java b/src/main/java/com/baiyee/adcallback/config/pojo/JlBackdataDTO.java similarity index 75% rename from src/main/java/com/baiyee/adcallback/common/pojo/JlBackdataDTO.java rename to src/main/java/com/baiyee/adcallback/config/pojo/JlBackdataDTO.java index e695c50..0837754 100644 --- a/src/main/java/com/baiyee/adcallback/common/pojo/JlBackdataDTO.java +++ b/src/main/java/com/baiyee/adcallback/config/pojo/JlBackdataDTO.java @@ -1,8 +1,5 @@ -package com.baiyee.adcallback.common.pojo; +package com.baiyee.adcallback.config.pojo; -import cn.hutool.core.bean.BeanUtil; -import com.baiyee.adcallback.api.vo.JuliangMobileMonitorCallbackRequestVO; -import com.baiyee.adcallback.repository.entity.TbJlBackdataEntity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/src/main/java/com/baiyee/adcallback/config/pojo/convert/BdBackdataConvert.java b/src/main/java/com/baiyee/adcallback/config/pojo/convert/BdBackdataConvert.java new file mode 100644 index 0000000..da40648 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/config/pojo/convert/BdBackdataConvert.java @@ -0,0 +1,41 @@ +package com.baiyee.adcallback.config.pojo.convert; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baiyee.adcallback.api.vo.BaiduMobileMonitorCallbackRequestVO; +import com.baiyee.adcallback.config.pojo.BdBackdataDTO; +import com.baiyee.adcallback.repository.entity.TbBdBackdataEntity; + +public class BdBackdataConvert { + + /** + * 私有化构造 + */ + private BdBackdataConvert(){} + + private static final ThreadLocal context = new ThreadLocal<>(); + + /** + * vo 转换为 dto -> 存放在当前线程上下文中 + * + * @param vo 对象 + */ + public static void voCovertToDTO(BaiduMobileMonitorCallbackRequestVO vo, BdBackdataDTO dto) { + BeanUtil.copyProperties(vo, dto, true); + context.set(dto); + } + + /** + * 转换为实体 + * + * @return {@link TbBdBackdataEntity} + */ + public static TbBdBackdataEntity covertToEntity(TbBdBackdataEntity entity) { + BdBackdataDTO bdBackdataDTO = context.get(); + if (ObjectUtil.isNotNull(bdBackdataDTO)){ + BeanUtil.copyProperties(bdBackdataDTO, entity, true); + } + context.remove(); + return entity; + } +} diff --git a/src/main/java/com/baiyee/adcallback/common/pojo/convert/JlBackdataConvert.java b/src/main/java/com/baiyee/adcallback/config/pojo/convert/JlBackdataConvert.java similarity index 91% rename from src/main/java/com/baiyee/adcallback/common/pojo/convert/JlBackdataConvert.java rename to src/main/java/com/baiyee/adcallback/config/pojo/convert/JlBackdataConvert.java index 119a35e..76f891c 100644 --- a/src/main/java/com/baiyee/adcallback/common/pojo/convert/JlBackdataConvert.java +++ b/src/main/java/com/baiyee/adcallback/config/pojo/convert/JlBackdataConvert.java @@ -1,9 +1,9 @@ -package com.baiyee.adcallback.common.pojo.convert; +package com.baiyee.adcallback.config.pojo.convert; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import com.baiyee.adcallback.api.vo.JuliangMobileMonitorCallbackRequestVO; -import com.baiyee.adcallback.common.pojo.JlBackdataDTO; +import com.baiyee.adcallback.config.pojo.JlBackdataDTO; import com.baiyee.adcallback.repository.entity.TbJlBackdataEntity; public class JlBackdataConvert { diff --git a/src/main/java/com/baiyee/adcallback/repository/TbBdBackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbBdBackdataEntityRepository.java new file mode 100644 index 0000000..06dc05f --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/repository/TbBdBackdataEntityRepository.java @@ -0,0 +1,7 @@ +package com.baiyee.adcallback.repository; + +import com.baiyee.adcallback.repository.entity.TbBdBackdataEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface TbBdBackdataEntityRepository extends JpaRepository { +} \ No newline at end of file diff --git a/src/main/java/com/baiyee/adcallback/repository/entity/TbBdBackdataEntity.java b/src/main/java/com/baiyee/adcallback/repository/entity/TbBdBackdataEntity.java new file mode 100644 index 0000000..1422169 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/repository/entity/TbBdBackdataEntity.java @@ -0,0 +1,91 @@ +package com.baiyee.adcallback.repository.entity; + +import lombok.Data; + +import javax.persistence.*; +import java.sql.Timestamp; +import java.util.Objects; + +@Data +@Entity +@Table(name = "tb_bd_backdata", schema = "db_ad", catalog = "") +public class TbBdBackdataEntity { + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Id + @Column(name = "id", nullable = false) + private long id; + @Basic + @Column(name = "gmt_create", nullable = false) + private Timestamp gmtCreate; + @Basic + @Column(name = "gmt_modify", nullable = false) + private Timestamp gmtModify; + @Basic + @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 = "click_id", nullable = false, length = 255) + private String clickId; + @Basic + @Column(name = "idfa", nullable = false, length = 255) + private String idfa; + @Basic + @Column(name = "imei_md5", nullable = false, length = 255) + private String imeiMd5; + @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 = "os", nullable = false, length = 255) + private String os; + @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 = "ext_info", nullable = false, length = 255) + private String extInfo; + @Basic + @Column(name = "call_type", nullable = false, length = 255) + private String callType; + + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + TbBdBackdataEntity that = (TbBdBackdataEntity) o; + return id == that.id && ts == that.ts && Objects.equals(gmtCreate, that.gmtCreate) && Objects.equals(gmtModify, that.gmtModify) && Objects.equals(operator, that.operator) && Objects.equals(userid, that.userid) && Objects.equals(aid, that.aid) && Objects.equals(pid, that.pid) && Objects.equals(uid, that.uid) && Objects.equals(callbackUrl, that.callbackUrl) && Objects.equals(clickId, that.clickId) && Objects.equals(idfa, that.idfa) && Objects.equals(imeiMd5, that.imeiMd5) && Objects.equals(oaid, that.oaid) && Objects.equals(mac, that.mac) && Objects.equals(ip, that.ip) && Objects.equals(os, that.os) && Objects.equals(deviceInfo, that.deviceInfo) && Objects.equals(interactionsType, that.interactionsType) && Objects.equals(extInfo, that.extInfo) && Objects.equals(callType, that.callType); + } + + @Override + public int hashCode() { + return Objects.hash(id, gmtCreate, gmtModify, operator, userid, aid, pid, uid, callbackUrl, clickId, idfa, imeiMd5, oaid, mac, ip, os, ts, deviceInfo, interactionsType, extInfo, callType); + } +} diff --git a/src/main/java/com/baiyee/adcallback/service/AdOriginalityManageService.java b/src/main/java/com/baiyee/adcallback/service/AdOriginalityManageService.java index 5433e51..317173b 100644 --- a/src/main/java/com/baiyee/adcallback/service/AdOriginalityManageService.java +++ b/src/main/java/com/baiyee/adcallback/service/AdOriginalityManageService.java @@ -11,4 +11,10 @@ public interface AdOriginalityManageService { * 处理监测数据然后保存回调 */ void handleMonitorUrlCallbackDataThenSave(); + + + /** + * 处理监测数据然后保存回调 + */ + void handleMonitorUrlCallbackDataThenSave1(); } 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 82f3af1..badbc5b 100644 --- a/src/main/java/com/baiyee/adcallback/service/impl/AdOriginalityManageServiceImpl.java +++ b/src/main/java/com/baiyee/adcallback/service/impl/AdOriginalityManageServiceImpl.java @@ -1,11 +1,15 @@ package com.baiyee.adcallback.service.impl; import cn.hutool.core.util.ObjectUtil; -import com.baiyee.adcallback.common.pojo.convert.JlBackdataConvert; +import com.baiyee.adcallback.config.pojo.convert.BdBackdataConvert; +import com.baiyee.adcallback.config.pojo.convert.JlBackdataConvert; +import com.baiyee.adcallback.repository.TbBdBackdataEntityRepository; import com.baiyee.adcallback.repository.TbJlBackdataEntityRepository; +import com.baiyee.adcallback.repository.entity.TbBdBackdataEntity; import com.baiyee.adcallback.repository.entity.TbJlBackdataEntity; import com.baiyee.adcallback.service.AdOriginalityManageService; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** @@ -20,8 +24,11 @@ public class AdOriginalityManageServiceImpl implements AdOriginalityManageServic private final TbJlBackdataEntityRepository repository; - public AdOriginalityManageServiceImpl(TbJlBackdataEntityRepository repository) { + private final TbBdBackdataEntityRepository bdBackdataEntityRepository; + + public AdOriginalityManageServiceImpl(TbJlBackdataEntityRepository repository, TbBdBackdataEntityRepository bdBackdataEntityRepository) { this.repository = repository; + this.bdBackdataEntityRepository = bdBackdataEntityRepository; } @Override @@ -35,4 +42,15 @@ public class AdOriginalityManageServiceImpl implements AdOriginalityManageServic log.error("============================= [save a data fail save is {} ] =============================", save); } } + + @Override + public void handleMonitorUrlCallbackDataThenSave1() { + TbBdBackdataEntity entity = new TbBdBackdataEntity(); + TbBdBackdataEntity backEntity = BdBackdataConvert.covertToEntity(entity); + + TbBdBackdataEntity save = bdBackdataEntityRepository.save(backEntity); + if (ObjectUtil.isNull(save)){ + log.error("============================= [save a data fail save is {} ] =============================", save); + } + } }