|
@@ -1,5 +1,6 @@
|
|
|
package com.fs.app.facade;
|
|
package com.fs.app.facade;
|
|
|
|
|
|
|
|
|
|
+import cn.hutool.core.util.IdUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.json.JSONArray;
|
|
import cn.hutool.json.JSONArray;
|
|
@@ -8,6 +9,7 @@ import cn.hutool.json.JSONUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.fs.common.exception.base.BusinessException;
|
|
import com.fs.common.exception.base.BusinessException;
|
|
|
import com.fs.common.utils.RedisUtil;
|
|
import com.fs.common.utils.RedisUtil;
|
|
|
|
|
+import com.fs.common.utils.SnowflakeUtil;
|
|
|
import com.fs.newAdv.domain.LandingPageTemplate;
|
|
import com.fs.newAdv.domain.LandingPageTemplate;
|
|
|
import com.fs.newAdv.domain.Lead;
|
|
import com.fs.newAdv.domain.Lead;
|
|
|
import com.fs.newAdv.domain.Site;
|
|
import com.fs.newAdv.domain.Site;
|
|
@@ -72,47 +74,48 @@ public class CallbackProcessingFacadeServiceImpl implements CallbackProcessingFa
|
|
|
public void saveClickTrace(Long advertiserCode, Map<String, String> allParams) {
|
|
public void saveClickTrace(Long advertiserCode, Map<String, String> allParams) {
|
|
|
IAdvertiserAdapter advertiserAdapter = handlerFactory.getAdapter(AdvertiserTypeEnum.getByCode(advertiserCode));
|
|
IAdvertiserAdapter advertiserAdapter = handlerFactory.getAdapter(AdvertiserTypeEnum.getByCode(advertiserCode));
|
|
|
Lead lead = advertiserAdapter.adaptCallbackData(allParams);
|
|
Lead lead = advertiserAdapter.adaptCallbackData(allParams);
|
|
|
- Lead byTraceId = leadService.getByTraceId(lead.getTraceId());
|
|
|
|
|
- if (ObjectUtil.isNotEmpty(byTraceId)) {
|
|
|
|
|
- throw new BusinessException("监测信息已存在: " + lead.getTraceId());
|
|
|
|
|
|
|
+ Lead byClickId = leadService.getByClickId(lead.getTraceId());
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(byClickId)) {
|
|
|
|
|
+ log.info("线索已存在:{}", lead.getTraceId());
|
|
|
|
|
+ return;
|
|
|
}
|
|
}
|
|
|
lead.setStatus(0);
|
|
lead.setStatus(0);
|
|
|
lead.setClickTrigger(1);
|
|
lead.setClickTrigger(1);
|
|
|
lead.setTraceRawParams(JSONUtil.toJsonStr(allParams));
|
|
lead.setTraceRawParams(JSONUtil.toJsonStr(allParams));
|
|
|
|
|
+ lead.setTraceId(SnowflakeUtil.randomUUID());
|
|
|
boolean saved = leadService.save(lead);
|
|
boolean saved = leadService.save(lead);
|
|
|
if (!saved) {
|
|
if (!saved) {
|
|
|
log.error("线索保存失败:{}", lead);
|
|
log.error("线索保存失败:{}", lead);
|
|
|
- throw new RuntimeException("线索保存失败");
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private String getTraceIdByAdvertiser(AdvertiserTypeEnum byCode, Map<String, String> allParams) {
|
|
private String getTraceIdByAdvertiser(AdvertiserTypeEnum byCode, Map<String, String> allParams) {
|
|
|
- String traceId;
|
|
|
|
|
|
|
+ String clickId;
|
|
|
switch (byCode) {
|
|
switch (byCode) {
|
|
|
case OCEANENGINE:
|
|
case OCEANENGINE:
|
|
|
case TENCENT:
|
|
case TENCENT:
|
|
|
- traceId = allParams.get("clickid");
|
|
|
|
|
|
|
+ clickId = allParams.get("clickid");
|
|
|
break;
|
|
break;
|
|
|
case OPPO:
|
|
case OPPO:
|
|
|
- traceId = allParams.get("tid");
|
|
|
|
|
|
|
+ clickId = allParams.get("tid");
|
|
|
break;
|
|
break;
|
|
|
case BAIDU:
|
|
case BAIDU:
|
|
|
- traceId = allParams.get("bd_vid");
|
|
|
|
|
|
|
+ clickId = allParams.get("bd_vid");
|
|
|
break;
|
|
break;
|
|
|
case VIVO:
|
|
case VIVO:
|
|
|
- traceId = allParams.get("requestId");
|
|
|
|
|
|
|
+ clickId = allParams.get("requestId");
|
|
|
break;
|
|
break;
|
|
|
case IQIYI:
|
|
case IQIYI:
|
|
|
- traceId = allParams.get("traceId");
|
|
|
|
|
|
|
+ clickId = allParams.get("traceId");
|
|
|
break;
|
|
break;
|
|
|
default:
|
|
default:
|
|
|
- traceId = "ylrz_test";
|
|
|
|
|
|
|
+ clickId = "ylrz_test";
|
|
|
}
|
|
}
|
|
|
- if (StrUtil.isEmpty(traceId)) {
|
|
|
|
|
- traceId = "ylrz_test";
|
|
|
|
|
|
|
+ if (StrUtil.isEmpty(clickId)) {
|
|
|
|
|
+ clickId = "ylrz_test"+ IdUtil.randomUUID();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return traceId;
|
|
|
|
|
|
|
+ return clickId;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -133,25 +136,25 @@ public class CallbackProcessingFacadeServiceImpl implements CallbackProcessingFa
|
|
|
// 广告商信息
|
|
// 广告商信息
|
|
|
Long advertiserId = byId.getAdvertiserId();
|
|
Long advertiserId = byId.getAdvertiserId();
|
|
|
// 访问链路id
|
|
// 访问链路id
|
|
|
- String traceId = getTraceIdByAdvertiser(Objects.requireNonNull(AdvertiserTypeEnum.getByCode(advertiserId)), allParams);
|
|
|
|
|
|
|
+ String clickId = getTraceIdByAdvertiser(Objects.requireNonNull(AdvertiserTypeEnum.getByCode(advertiserId)), allParams);
|
|
|
// 线索信息
|
|
// 线索信息
|
|
|
- Lead byTraceId = leadService.getByTraceId(traceId);
|
|
|
|
|
- boolean isNewLead = ObjectUtil.isEmpty(byTraceId);
|
|
|
|
|
|
|
+ Lead lead = leadService.getByClickId(clickId);
|
|
|
|
|
+ boolean isNewLead = ObjectUtil.isEmpty(lead);
|
|
|
if (isNewLead) {
|
|
if (isNewLead) {
|
|
|
IAdvertiserAdapter advertiserAdapter = handlerFactory.getAdapter(AdvertiserTypeEnum.getByCode(advertiserId));
|
|
IAdvertiserAdapter advertiserAdapter = handlerFactory.getAdapter(AdvertiserTypeEnum.getByCode(advertiserId));
|
|
|
- byTraceId = advertiserAdapter.adaptCallbackData(allParams);
|
|
|
|
|
- byTraceId.setAdvertiserId(advertiserId);
|
|
|
|
|
- byTraceId.setSiteId(siteId);
|
|
|
|
|
- byTraceId.setTraceId(traceId);
|
|
|
|
|
|
|
+ lead = advertiserAdapter.adaptCallbackData(allParams);
|
|
|
|
|
+ lead.setAdvertiserId(advertiserId);
|
|
|
|
|
+ lead.setSiteId(siteId);
|
|
|
|
|
+ lead.setClickId(clickId);
|
|
|
// 设置站点和落地页的关联
|
|
// 设置站点和落地页的关联
|
|
|
- setSiteByIdeaId(siteId, byTraceId.getIdeaId());
|
|
|
|
|
|
|
+ setSiteByIdeaId(siteId, lead.getIdeaId());
|
|
|
} else {
|
|
} else {
|
|
|
// 检查站点和广告商信息是否异常
|
|
// 检查站点和广告商信息是否异常
|
|
|
- if (!Objects.equals(byTraceId.getSiteId(), siteId)) {
|
|
|
|
|
- log.info("落地页站点信息异常:{}---{}", byTraceId.getSiteId(), siteId);
|
|
|
|
|
|
|
+ if (!Objects.equals(lead.getSiteId(), siteId)) {
|
|
|
|
|
+ log.info("落地页站点信息异常:{}---{}", lead.getSiteId(), siteId);
|
|
|
}
|
|
}
|
|
|
- if (!Objects.equals(byTraceId.getAdvertiserId(), advertiserId)) {
|
|
|
|
|
- log.info("落地页广告商信息异常:{}---{}", byTraceId.getAdvertiserId(), advertiserId);
|
|
|
|
|
|
|
+ if (!Objects.equals(lead.getAdvertiserId(), advertiserId)) {
|
|
|
|
|
+ log.info("落地页广告商信息异常:{}---{}", lead.getAdvertiserId(), advertiserId);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
// 模板缓存
|
|
// 模板缓存
|
|
@@ -172,27 +175,28 @@ public class CallbackProcessingFacadeServiceImpl implements CallbackProcessingFa
|
|
|
LandingPageTemplate landingPageTemplate = landingPageTemplateService.getById(byId.getLaunchPageId());
|
|
LandingPageTemplate landingPageTemplate = landingPageTemplateService.getById(byId.getLaunchPageId());
|
|
|
JSONObject jsonObject = JSONUtil.parseObj(landingPageTemplate.getTemplateData());
|
|
JSONObject jsonObject = JSONUtil.parseObj(landingPageTemplate.getTemplateData());
|
|
|
// 替换二维码链接
|
|
// 替换二维码链接
|
|
|
- updateQrCodeInTemplate(jsonObject, traceId, byId, byTraceId);
|
|
|
|
|
|
|
+ updateQrCodeInTemplate(jsonObject, byId, lead);
|
|
|
String templateData = JSONUtil.toJsonStr(jsonObject);
|
|
String templateData = JSONUtil.toJsonStr(jsonObject);
|
|
|
|
|
|
|
|
// 保存或更新 线索信息
|
|
// 保存或更新 线索信息
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
- byTraceId.setLandingPageRawParams(JSONUtil.toJsonStr(allParams));
|
|
|
|
|
- byTraceId.setLandingPageTrigger(1);
|
|
|
|
|
- byTraceId.setLandingPageTs(now);
|
|
|
|
|
- byTraceId.setUpdateTime(now);
|
|
|
|
|
- byTraceId.setViewUrl(viewUrl);
|
|
|
|
|
|
|
+ lead.setLandingPageRawParams(JSONUtil.toJsonStr(allParams));
|
|
|
|
|
+ lead.setLandingPageTrigger(1);
|
|
|
|
|
+ lead.setLandingPageTs(now);
|
|
|
|
|
+ lead.setUpdateTime(now);
|
|
|
|
|
+ lead.setViewUrl(viewUrl);
|
|
|
if (isNewLead) {
|
|
if (isNewLead) {
|
|
|
- leadService.save(byTraceId);
|
|
|
|
|
|
|
+ lead.setTraceId(SnowflakeUtil.randomUUID());
|
|
|
|
|
+ leadService.save(lead);
|
|
|
} else {
|
|
} else {
|
|
|
- leadService.updateById(byTraceId);
|
|
|
|
|
|
|
+ leadService.updateById(lead);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 封装返回结果
|
|
// 封装返回结果
|
|
|
LandingIndexRes res = new LandingIndexRes();
|
|
LandingIndexRes res = new LandingIndexRes();
|
|
|
- redisUtil.set(TEMPLATE_DATA + traceId, templateData, 24, TimeUnit.HOURS);
|
|
|
|
|
|
|
+ redisUtil.set(TEMPLATE_DATA + lead.getTraceId(), templateData, 24, TimeUnit.HOURS);
|
|
|
res.setTemplateData(templateData);
|
|
res.setTemplateData(templateData);
|
|
|
- res.setTraceId(byTraceId.getTraceId());
|
|
|
|
|
|
|
+ res.setTraceId(lead.getTraceId());
|
|
|
return res;
|
|
return res;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -205,7 +209,7 @@ public class CallbackProcessingFacadeServiceImpl implements CallbackProcessingFa
|
|
|
/**
|
|
/**
|
|
|
* 更新模板中的二维码信息
|
|
* 更新模板中的二维码信息
|
|
|
*/
|
|
*/
|
|
|
- private void updateQrCodeInTemplate(JSONObject templateData, String traceId, Site site, Lead lead) {
|
|
|
|
|
|
|
+ private void updateQrCodeInTemplate(JSONObject templateData, Site site, Lead lead) {
|
|
|
JSONArray configList = templateData.getJSONArray("configList");
|
|
JSONArray configList = templateData.getJSONArray("configList");
|
|
|
if (configList == null || configList.isEmpty()) {
|
|
if (configList == null || configList.isEmpty()) {
|
|
|
return;
|
|
return;
|