|
|
|
@ -1,8 +1,6 @@
|
|
|
|
|
package com.baiye.modules.distribute.service.impl;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
|
import cn.hutool.core.text.StrPool;
|
|
|
|
|
import cn.hutool.core.util.URLUtil;
|
|
|
|
|
import cn.hutool.http.HttpRequest;
|
|
|
|
|
|
|
|
|
@ -12,6 +10,7 @@ import cn.hutool.json.JSONUtil;
|
|
|
|
|
import com.baiye.constant.DefaultNumberConstants;
|
|
|
|
|
import com.baiye.constant.UrlConstant;
|
|
|
|
|
import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl;
|
|
|
|
|
import com.baiye.modules.distribute.dto.OceanEngineResponseDTO;
|
|
|
|
|
import com.baiye.modules.distribute.entity.DirectClueEntity;
|
|
|
|
|
import com.baiye.modules.distribute.entity.OceanEngineSourceEntity;
|
|
|
|
|
import com.baiye.modules.distribute.entity.OceanEngineToken;
|
|
|
|
@ -19,14 +18,10 @@ import com.baiye.modules.distribute.mapper.OceanEngineSourceMapper;
|
|
|
|
|
import com.baiye.modules.distribute.service.DirectClueService;
|
|
|
|
|
import com.baiye.modules.distribute.service.OceanEngineClueService;
|
|
|
|
|
import com.baiye.modules.distribute.service.OceanEngineService;
|
|
|
|
|
import com.baiye.system.constant.DateConst;
|
|
|
|
|
import com.baiye.system.constant.LetterConst;
|
|
|
|
|
import com.baiye.util.AESUtils;
|
|
|
|
|
import com.baiye.util.MobileUtil;
|
|
|
|
|
import com.baiye.utils.SerialCode;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.ballcat.security.properties.SecurityProperties;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
@ -36,8 +31,6 @@ import java.time.LocalDateTime;
|
|
|
|
|
import java.time.ZoneId;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
|
|
import java.util.regex.Matcher;
|
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @author wjt
|
|
|
|
@ -62,12 +55,10 @@ public class OceanEngineClueServiceImpl extends ExtendServiceImpl<OceanEngineSou
|
|
|
|
|
if (CollUtil.isEmpty(oceanEngineTokens)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (OceanEngineToken oceanEngineToken : oceanEngineTokens) {
|
|
|
|
|
String accessToken = oceanEngineToken.getAccessToken();
|
|
|
|
|
//管家ids
|
|
|
|
|
List<String> advertiserIds = oceanEngineToken.getAdvertiserIds();
|
|
|
|
|
log.info("=================== 获取到的广告主ids {} ===================", JSONUtil.toJsonStr(advertiserIds));
|
|
|
|
|
CompletableFuture.runAsync(() -> getAdvertiser(oceanEngineToken.getUserId(), accessToken, advertiserIds, startTime, endTime));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -79,24 +70,25 @@ public class OceanEngineClueServiceImpl extends ExtendServiceImpl<OceanEngineSou
|
|
|
|
|
* @param advertisers 管家id
|
|
|
|
|
*/
|
|
|
|
|
private void getAdvertiser(Long userId, String accessToken, List<String> advertisers, Date startTime, Date endTime) {
|
|
|
|
|
|
|
|
|
|
log.info("=================== 巨量飞鱼,拉取用户{} ===================", userId);
|
|
|
|
|
if (CollUtil.isEmpty(advertisers)) {
|
|
|
|
|
log.info("=================== 巨量飞鱼,拉取用户{} 无管家 ===================", userId);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
List<String> advertiseList = getAdvertiseIds(accessToken, advertisers);
|
|
|
|
|
if (CollUtil.isEmpty(advertiseList)) {
|
|
|
|
|
log.info("=================== 巨量飞鱼,拉取用户{} 无广告商 ===================", userId);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Map<String, Object> map = new HashMap<>(5);
|
|
|
|
|
map.put("advertiser_ids", advertiseList.toString());
|
|
|
|
|
map.put("start_time", startTime);
|
|
|
|
|
map.put("end_time", endTime);
|
|
|
|
|
log.info("=================== 巨量飞鱼请求 {} ===================", JSONUtil.toJsonStr(map));
|
|
|
|
|
JSONArray array = reqOceanEngineClue(accessToken, map);
|
|
|
|
|
log.info("=================== 巨量飞鱼,线索数量{} ===================", array.size());
|
|
|
|
|
if (CollUtil.isEmpty(array)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
log.info("=================== 巨量飞鱼返回{} ===================", array.size());
|
|
|
|
|
parseAndSaveData(userId, array);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -115,18 +107,21 @@ public class OceanEngineClueServiceImpl extends ExtendServiceImpl<OceanEngineSou
|
|
|
|
|
header("Access-Token", accessToken).
|
|
|
|
|
execute().
|
|
|
|
|
body();
|
|
|
|
|
JSONObject response = JSONUtil.parseObj(body);
|
|
|
|
|
if (response.getInt("code") == 0 && response.getStr("data") != null) {
|
|
|
|
|
JSONObject json = JSONUtil.parseObj(response.getStr("data"));
|
|
|
|
|
JSONArray results = json.getJSONArray("list");
|
|
|
|
|
for (int i = 0; i < results.size(); i++) {
|
|
|
|
|
JSONObject jsonObject = results.getJSONObject(i);
|
|
|
|
|
String advertiserId = jsonObject.getStr("advertiser_id");
|
|
|
|
|
advertiseList.add(advertiserId);
|
|
|
|
|
OceanEngineResponseDTO response = JSONUtil.toBean(body, OceanEngineResponseDTO.class);
|
|
|
|
|
if (response.getCode() == 0) {
|
|
|
|
|
if (response.getData() != null) {
|
|
|
|
|
JSONObject json = JSONUtil.parseObj(response.getData());
|
|
|
|
|
JSONArray results = json.getJSONArray("list");
|
|
|
|
|
for (int i = 0; i < results.size(); i++) {
|
|
|
|
|
JSONObject jsonObject = results.getJSONObject(i);
|
|
|
|
|
String advertiserId = jsonObject.getStr("advertiser_id");
|
|
|
|
|
advertiseList.add(advertiserId);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
log.error("管家号:{},获取广告主失败 {}", id, response);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
log.info("advertiseList===={}", advertiseList.size());
|
|
|
|
|
return advertiseList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -158,9 +153,13 @@ public class OceanEngineClueServiceImpl extends ExtendServiceImpl<OceanEngineSou
|
|
|
|
|
|
|
|
|
|
public static JSONObject getClueList(Map<String, Object> map, String accessToken) {
|
|
|
|
|
String body = HttpRequest.get(UrlConstant.SYNC_CLUE_URL + "?" + URLUtil.buildQuery(map, Charset.defaultCharset())).header("Access-Token", accessToken).execute().body();
|
|
|
|
|
JSONObject response = JSONUtil.parseObj(body);
|
|
|
|
|
if (response.getInt("code") == 0 && response.getStr("data") != null) {
|
|
|
|
|
return JSONUtil.parseObj(response.getStr("data"));
|
|
|
|
|
OceanEngineResponseDTO response = JSONUtil.toBean(body, OceanEngineResponseDTO.class);
|
|
|
|
|
if (response.getCode() == 0) {
|
|
|
|
|
if (response.getData() != null) {
|
|
|
|
|
return JSONUtil.parseObj(response.getData());
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
log.error("获取飞鱼线索失败 {}", response);
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
@ -168,8 +167,8 @@ public class OceanEngineClueServiceImpl extends ExtendServiceImpl<OceanEngineSou
|
|
|
|
|
/**
|
|
|
|
|
* 解析线索
|
|
|
|
|
*
|
|
|
|
|
* @param userId
|
|
|
|
|
* @param array
|
|
|
|
|
* @param userId 用户id
|
|
|
|
|
* @param array 线索
|
|
|
|
|
*/
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public void parseAndSaveData(Long userId, JSONArray array) {
|
|
|
|
@ -198,7 +197,7 @@ public class OceanEngineClueServiceImpl extends ExtendServiceImpl<OceanEngineSou
|
|
|
|
|
oceanEngineSources.add(oceanEngineSource);
|
|
|
|
|
//传递线索
|
|
|
|
|
boolean bool = MobileUtil.checkPhone(phone);
|
|
|
|
|
if (bool){
|
|
|
|
|
if (bool) {
|
|
|
|
|
Date date = new Date();
|
|
|
|
|
LocalDateTime dateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
|
|
|
|
String nid = AESUtils.encrypt(phone, securityProperties.getPasswordSecretKey());
|
|
|
|
@ -212,15 +211,4 @@ public class OceanEngineClueServiceImpl extends ExtendServiceImpl<OceanEngineSou
|
|
|
|
|
directClueService.allocationClue(userId, directClueEntityList);
|
|
|
|
|
baseMapper.insertBatchSomeColumn(oceanEngineSources);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 判断是否含中文
|
|
|
|
|
*
|
|
|
|
|
* @param countName 检查的字段
|
|
|
|
|
*/
|
|
|
|
|
private boolean checkCountName(String countName) {
|
|
|
|
|
Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
|
|
|
|
|
Matcher m = p.matcher(countName);
|
|
|
|
|
return m.find();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|