|
|
@@ -2,27 +2,39 @@ package com.fs.app.facade;
|
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.json.JSONArray;
|
|
|
+import cn.hutool.json.JSONObject;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import com.fs.app.integration.adapter.IAdvertiserAdapter;
|
|
|
-import com.fs.app.integration.client.IAccessTokenClient;
|
|
|
-import com.fs.app.integration.client.IApiClient;
|
|
|
import com.fs.app.integration.factory.AdvertiserHandlerFactory;
|
|
|
import com.fs.common.exception.base.BusinessException;
|
|
|
+import com.fs.common.utils.RedisUtil;
|
|
|
import com.fs.newAdv.domain.LandingPageTemplate;
|
|
|
import com.fs.newAdv.domain.Lead;
|
|
|
-import com.fs.newAdv.domain.PromotionAccount;
|
|
|
import com.fs.newAdv.domain.Site;
|
|
|
import com.fs.newAdv.dto.res.LandingIndexRes;
|
|
|
import com.fs.newAdv.enums.AdvertiserTypeEnum;
|
|
|
import com.fs.newAdv.service.ILandingPageTemplateService;
|
|
|
import com.fs.newAdv.service.ILeadService;
|
|
|
-import com.fs.newAdv.service.IPromotionAccountService;
|
|
|
import com.fs.newAdv.service.ISiteService;
|
|
|
+import com.fs.qw.domain.QwAssignRule;
|
|
|
+import com.fs.qw.domain.QwAssignRuleUser;
|
|
|
+import com.fs.qw.domain.QwContactWay;
|
|
|
+import com.fs.qw.domain.QwGroupActual;
|
|
|
+import com.fs.qw.service.IQwAssignRuleService;
|
|
|
+import com.fs.qw.service.IQwAssignRuleUserService;
|
|
|
+import com.fs.qw.service.IQwContactWayService;
|
|
|
+import com.fs.qw.service.IQwGroupActualService;
|
|
|
+import com.fs.qwApi.Result.QwAddContactWayResult;
|
|
|
+import com.fs.qwApi.param.QwAddContactWayParam;
|
|
|
+import com.fs.qwApi.service.QwApiService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Objects;
|
|
|
|
|
|
@@ -36,9 +48,22 @@ public class CallbackProcessingFacadeServiceImpl implements CallbackProcessingFa
|
|
|
@Autowired
|
|
|
private ISiteService siteService;
|
|
|
@Autowired
|
|
|
+ private IQwAssignRuleUserService assignRuleUserService;
|
|
|
+ @Autowired
|
|
|
+ private IQwAssignRuleService assignRuleService;
|
|
|
+ @Autowired
|
|
|
private ILandingPageTemplateService landingPageTemplateService;
|
|
|
@Autowired
|
|
|
- private IPromotionAccountService promotionAccountService;
|
|
|
+ private IQwGroupActualService actualService;
|
|
|
+ @Autowired
|
|
|
+ private QwApiService qwApiService;
|
|
|
+ @Autowired
|
|
|
+ private IQwContactWayService contactWayService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RedisUtil redisUtil;
|
|
|
+
|
|
|
+ private static final String QR_CODE_KEY = "new-adv:qr-code:";
|
|
|
|
|
|
@Override
|
|
|
public void saveClickTrace(Long advertiserCode, Map<String, String> allParams) {
|
|
|
@@ -58,11 +83,43 @@ public class CallbackProcessingFacadeServiceImpl implements CallbackProcessingFa
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private String getTraceIdByAdvertiser(AdvertiserTypeEnum byCode, Map<String, String> allParams) {
|
|
|
+ switch (byCode) {
|
|
|
+ case OCEANENGINE:
|
|
|
+ return allParams.get("click_id");
|
|
|
+ case TENCENT:
|
|
|
+ return allParams.get("click_id");
|
|
|
+ case OPPO:
|
|
|
+ return allParams.get("traceId");
|
|
|
+ case BAIDU:
|
|
|
+ return allParams.get("bd_vid");
|
|
|
+ case VIVO:
|
|
|
+ return allParams.get("requestId");
|
|
|
+ case IQIYI:
|
|
|
+ return allParams.get("traceId");
|
|
|
+ default:
|
|
|
+ return "ylrz_test";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
- public void saveLandingIndexTrace(Long siteId, Map<String, String> allParams) {
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public LandingIndexRes getLandingIndexBySiteId(Map<String, String> allParams) {
|
|
|
+ String paramsSiteId = allParams.get("siteId");
|
|
|
+ if (ObjectUtil.isEmpty(paramsSiteId)) {
|
|
|
+ log.error("站点id不存在:{}", paramsSiteId);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ Long siteId = Long.valueOf(paramsSiteId);
|
|
|
Site byId = siteService.getById(siteId);
|
|
|
+ if (ObjectUtil.isEmpty(byId)) {
|
|
|
+ log.error("站点信息不存在:{}", siteId);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
Long advertiserId = byId.getAdvertiserId();
|
|
|
+ // 访问链路id
|
|
|
String traceId = getTraceIdByAdvertiser(Objects.requireNonNull(AdvertiserTypeEnum.getByCode(advertiserId)), allParams);
|
|
|
+ // 保存落地页访问记录
|
|
|
Lead byTraceId = leadService.getByTraceId(traceId);
|
|
|
if (ObjectUtil.isEmpty(byTraceId)) {
|
|
|
byTraceId = new Lead();
|
|
|
@@ -74,48 +131,80 @@ public class CallbackProcessingFacadeServiceImpl implements CallbackProcessingFa
|
|
|
log.info("落地页站点信息异常:{}---{}", byTraceId.getSiteId(), siteId);
|
|
|
}
|
|
|
if (!Objects.equals(byTraceId.getAdvertiserId(), advertiserId)) {
|
|
|
- log.info("落地页站点信息异常:{}---{}", byTraceId.getAdvertiserId(), advertiserId);
|
|
|
+ log.info("落地页广告商信息异常:{}---{}", byTraceId.getAdvertiserId(), advertiserId);
|
|
|
}
|
|
|
byTraceId.setLandingPageRawParams(JSONUtil.toJsonStr(allParams));
|
|
|
byTraceId.setLandingPageTrigger(1);
|
|
|
byTraceId.setLandingPageTs(LocalDateTime.now());
|
|
|
byTraceId.setUpdateTime(LocalDateTime.now());
|
|
|
- leadService.updateById(byTraceId);
|
|
|
- }
|
|
|
-
|
|
|
- private String getTraceIdByAdvertiser(AdvertiserTypeEnum byCode, Map<String, String> allParams) {
|
|
|
- switch (byCode) {
|
|
|
- case OCEANENGINE:
|
|
|
- return allParams.get("click_id");
|
|
|
- case TENCENT:
|
|
|
- return allParams.get("click_id");
|
|
|
- case OPPO:
|
|
|
- return allParams.get("traceId");
|
|
|
- case BAIDU:
|
|
|
- return allParams.get("bdVid");
|
|
|
- case VIVO:
|
|
|
- return allParams.get("requestId");
|
|
|
- case IQIYI:
|
|
|
- return allParams.get("traceId");
|
|
|
- default:
|
|
|
- return null;
|
|
|
+ if (ObjectUtil.isEmpty(byTraceId)) {
|
|
|
+ leadService.save(byTraceId);
|
|
|
+ } else {
|
|
|
+ leadService.updateById(byTraceId);
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public LandingIndexRes getLandingIndexBySiteId(Long siteId) {
|
|
|
- Site byId = siteService.getById(siteId);
|
|
|
- LandingPageTemplate byId1 = landingPageTemplateService.getById(byId.getLaunchPageId());
|
|
|
- String templateData = byId1.getTemplateData();
|
|
|
- // JSONArray objects = JSONUtil.parseArray(templateData);
|
|
|
-/* objects.jsonIter().forEach(o -> {
|
|
|
- o.getStr("h5-qrcode")
|
|
|
- });*/
|
|
|
+
|
|
|
+ // 查询模板数据
|
|
|
+ LandingPageTemplate landingPageTemplate = landingPageTemplateService.getById(byId.getLaunchPageId());
|
|
|
+ // 更新动态页面二维码数据
|
|
|
+ JSONObject jsonObject = JSONUtil.parseObj(landingPageTemplate.getTemplateData());
|
|
|
+ JSONArray jsonArray = jsonObject.getJSONArray("configList");
|
|
|
+ jsonArray.stream().iterator().forEachRemaining(item -> {
|
|
|
+ JSONObject itemObj = (JSONObject) item;
|
|
|
+ JSONArray moduleList = itemObj.getJSONArray("moduleList");
|
|
|
+ moduleList.stream().iterator().forEachRemaining(module -> {
|
|
|
+ JSONObject moduleObj = (JSONObject) module;
|
|
|
+ String type = moduleObj.getStr("type");
|
|
|
+ // 判断是否有二维码控件
|
|
|
+ if ("h5-qrcode".equals(type)) {
|
|
|
+ // 按照配置规则获取二维码链接
|
|
|
+ String qrCode = redisUtil.get(QR_CODE_KEY + traceId).toString();
|
|
|
+ if (qrCode == null) {
|
|
|
+ qrCode = getQrCodeByAllocationRuleId(byId.getLaunchType(), byId.getAllocationRuleId());
|
|
|
+ }
|
|
|
+ // 设置二维码
|
|
|
+ moduleObj.set("workUrl", qrCode);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ // 封装返回结果
|
|
|
LandingIndexRes res = new LandingIndexRes();
|
|
|
- res.setTemplateData(byId1.getTemplateData());
|
|
|
+ res.setTemplateData(JSONUtil.toJsonStr(jsonObject));
|
|
|
return res;
|
|
|
}
|
|
|
|
|
|
+ private String getQrCodeByAllocationRuleId(Integer launchType, Long allocationRuleId) {
|
|
|
+ // 二维码
|
|
|
+ String qrCode = "";
|
|
|
+ if (allocationRuleId == 1) {
|
|
|
+ // 个人分配规则
|
|
|
+ QwAssignRule byId1 = assignRuleService.getById(allocationRuleId);
|
|
|
+ QwAssignRuleUser qwAssignRuleUser = assignRuleUserService.getUserByAllocationRuleId(allocationRuleId, byId1.getAssignType());
|
|
|
+ if (byId1.getAssignType().equals(3)) {
|
|
|
+ List<String> users = Collections.singletonList(qwAssignRuleUser.getQwUserId());
|
|
|
+ QwAddContactWayParam qwAddContactWayParam = new QwAddContactWayParam();
|
|
|
+ qwAddContactWayParam.setType(1);
|
|
|
+ qwAddContactWayParam.setScene(2);
|
|
|
+ qwAddContactWayParam.setUser(users);
|
|
|
+ qwAddContactWayParam.setSkip_verify(true);
|
|
|
+ QwAddContactWayResult qwAddContactWayResult = qwApiService.addContactWay(qwAddContactWayParam, qwAssignRuleUser.getCorpId());
|
|
|
+ qrCode = qwAddContactWayResult.getQr_code();
|
|
|
+ }
|
|
|
+ } else if (allocationRuleId == 2) {
|
|
|
+ // 活码分配规则
|
|
|
+ if (launchType.equals(1)) {
|
|
|
+ // 线上规则--群活码
|
|
|
+ QwGroupActual qwGroupActual = actualService.getGroupActualByAllocationRuleId(allocationRuleId);
|
|
|
+ qrCode = qwGroupActual.getGroupUrl();
|
|
|
+ } else if (launchType.equals(2)) {
|
|
|
+ // 线下规则--个人活码
|
|
|
+ QwContactWay qwContactWay = contactWayService.selectQwContactWayById(allocationRuleId);
|
|
|
+ qrCode = qwContactWay.getQrCode();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return qrCode;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public void gdtGetAuthCode(Integer code, Long state) {
|
|
|
/* if (code == null || state == null) {
|