Merge remote-tracking branch 'origin/master' into master

master
土豆兄弟 3 years ago
commit 77323b098e

@ -32,14 +32,14 @@ public class SqlConstant {
" FROM" +
" `tabIndex` " +
" WHERE" +
" tabIndex.`gmt_create` >= :startTime " +
" tabIndex.`gmt_create` > :startTime " +
" AND gmt_create < :endTime " +
" AND tag = :tagStr" +
" GROUP BY" +
" DATE DESC " +
" ) _tmpAllTable " +
"GROUP BY" +
" `date` DESC";
" `date`";
}

@ -0,0 +1,22 @@
package com.baiyee.adcallback.api.constants;
/**
* 0: 1: 2: 3:UC 4:VIVO 5:广
*/
public class TagTypeConstant {
private TagTypeConstant(){
}
public static final int JL = 0;
public static final int BD = 1;
public static final int KS = 2;
public static final int UC = 3;
public static final int VIVO = 4;
public static final int GDT = 5;
}

@ -2,8 +2,6 @@ package com.baiyee.adcallback.api.dto;
import lombok.Data;
import java.util.Date;
/**
* @author wujingtao
* @date 2022/03/01
@ -12,5 +10,7 @@ import java.util.Date;
public class DmpMonitorJpaDto {
private String imei;
private Date gmtCreate;
private String gmtCreate;
private String tag;
private Long num;
}

@ -26,12 +26,17 @@ public enum DeliveryPlatformEnum {
/**
* VIVO
*/
VIVO("VIVO", 4),
VV("VV", 4),
/**
*
*/
BD("BD", 5);
BD("BD", 5),
/**
* 广
*/
GD("GD", 6);
/**
*

@ -26,12 +26,17 @@ public enum TableEnum {
/**
* VIVO
*/
VIVO("tb_vivo_backdata"),
VV("tb_vivo_backdata"),
/**
*
*/
BD("tb_bd_backdata");
BD("tb_bd_backdata"),
/**
* 广
*/
GD("tb_gdt_backdata");
/**
*

@ -1,7 +1,9 @@
package com.baiyee.adcallback.service;
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
import com.baiyee.adcallback.api.dto.DmpMonitorNumDto;
import java.util.List;
import java.util.Map;
/**
@ -11,5 +13,5 @@ import java.util.Map;
public interface DmpMonitorNumService {
Map<String, Object> queryNumByTags(DmpMonitorNumDto dmpMonitorNumDto);
Map<String, Object> getDmpImeiLink(DmpMonitorNumDto dmpMonitorNumDto);
Map<String, List<DmpMonitorJpaDto>> getDmpImeiLink(DmpMonitorNumDto dmpMonitorNumDto);
}

@ -52,11 +52,11 @@ public class AnalysisServiceImpl implements AnalysisService {
// 不传入结束时间默认今天
Date endTime = dto.getEndTime() != null ?
dto.getEndTime()
: DateUtil.beginOfDay(DateUtil.date());
: DateUtil.beginOfDay(DateUtil.date());
// 开始时间为空将往前一周
Date startTime = dto.getStartTime() != null ?
dto.getStartTime()
: DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.date(), 7));
: DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.date(), 7));
String formatDate = DateUtil.formatDate(startTime);
Integer deliveryQuantity = dto.getDeliveryQuantity();
Long between = DateUtil.between(startTime, endTime, DateUnit.DAY);
@ -91,7 +91,7 @@ public class AnalysisServiceImpl implements AnalysisService {
private List<QueryResultDTO> getQueryResults
(String tagStr, String formatDate, Date endTime, Date startTime) {
// 获取前缀判断来源
int value = tagStr.contains(StrPool.UNDERLINE) ? DeliveryPlatformEnum.getValue
int value = tagStr.contains(StrPool.DASHED) ? DeliveryPlatformEnum.getValue
(tagStr.substring(0, tagStr.indexOf(StrPool.DASHED))) : tagStr.equalsIgnoreCase(SqlConstant.TABLE_JU_QIAN) ? 1 : 999;
String sqlString = CharSequenceUtil.EMPTY;
@ -110,12 +110,16 @@ public class AnalysisServiceImpl implements AnalysisService {
break;
case 4:
// VIVO
sqlString = SqlConstant.PARSE_DATA_SQL.replaceAll(SqlConstant.TABLE_STR, TableEnum.VIVO.getTableName());
sqlString = SqlConstant.PARSE_DATA_SQL.replaceAll(SqlConstant.TABLE_STR, TableEnum.VV.getTableName());
break;
case 5:
//百度
sqlString = SqlConstant.PARSE_DATA_SQL.replaceAll(SqlConstant.TABLE_STR, TableEnum.BD.getTableName());
break;
case 6:
//广点通
sqlString = SqlConstant.PARSE_DATA_SQL.replaceAll(SqlConstant.TABLE_STR, TableEnum.GD.getTableName());
break;
default:
}
if (CharSequenceUtil.isNotBlank(sqlString)) {

@ -18,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.math.BigInteger;
import java.util.*;
import java.util.stream.Collectors;
@ -35,107 +36,168 @@ public class DmpMonitorNumServiceImpl implements DmpMonitorNumService {
@Override
public Map<String, Object> queryNumByTags(DmpMonitorNumDto dmpMonitorNumDto) {
HashMap<String, Object> map = new HashMap<>();
for (String tag : dmpMonitorNumDto.getTags()) {
List<DmpMonitorJpaDto> imel = getImeiNum(dmpMonitorNumDto.getStartTime(), dmpMonitorNumDto.getEndTime(), tag);
List<HashMap<String, Object>> groupByTime = getGroupByTime(dmpMonitorNumDto.getStartTime(), dmpMonitorNumDto.getEndTime(), imel);
map.put(tag, groupByTime);
List<DmpMonitorJpaDto> mapData = getMapData(dmpMonitorNumDto, 1);
HashMap<String, List<DmpMonitorJpaDto>> numMapGroupByTag = new HashMap<>(8);
mapData.stream().collect(Collectors.groupingBy(DmpMonitorJpaDto::getTag, Collectors.toList())).forEach(numMapGroupByTag::put);
for (String key : dmpMonitorNumDto.getTags()) {
if (!numMapGroupByTag.containsKey(key)) {
numMapGroupByTag.put(key, new ArrayList<>());
}
}
for (String key : numMapGroupByTag.keySet()) {
List<HashMap<String, Object>> groupByTime = getGroupByTime(dmpMonitorNumDto.getStartTime(), dmpMonitorNumDto.getEndTime(), numMapGroupByTag.get(key));
map.put(key, groupByTime);
}
return map;
}
@Override
public Map<String, Object> getDmpImeiLink(DmpMonitorNumDto dmpMonitorNumDto) {
HashMap<String, Object> map = new HashMap<>();
for (String tag : dmpMonitorNumDto.getTags()) {
List<DmpMonitorJpaDto> imel = getImeiNum(dmpMonitorNumDto.getStartTime(), dmpMonitorNumDto.getEndTime(), tag);
map.put(tag, imel);
}
return map;
public Map<String, List<DmpMonitorJpaDto>> getDmpImeiLink(DmpMonitorNumDto dmpMonitorNumDto) {
List<DmpMonitorJpaDto> mapData = getMapData(dmpMonitorNumDto, 2);
HashMap<String, List<DmpMonitorJpaDto>> mapGroupByTag = new HashMap<>();
mapData.stream().collect(Collectors.groupingBy(DmpMonitorJpaDto::getTag, Collectors.toList())).forEach(mapGroupByTag::put);
return mapGroupByTag;
}
private List<DmpMonitorJpaDto> getImeiNum(Date startDate, Date endDate, String tag) {
List<DmpMonitorJpaDto> imel = new ArrayList<>();
int value = tag.contains(StrPool.UNDERLINE) ? DeliveryPlatformEnum.getValue
(tag.substring(0, tag.indexOf(StrPool.DASHED))) : tag.equalsIgnoreCase(SqlConstant.TABLE_JU_QIAN) ? 1 : 999;
switch (value) {
case 1:
// 巨量
imel = getImeiNumJpa(TableEnum.JL.getTableName(), startDate, endDate, tag);
break;
case 2:
// 快手
imel = getImeiNumJpa(TableEnum.KS.getTableName(), startDate, endDate, tag);
break;
case 3:
// UC
imel = getImeiNumJpa(TableEnum.UC.getTableName(), startDate, endDate, tag);
break;
case 4:
// VIVO
imel = getImeiNumJpa(TableEnum.VIVO.getTableName(), startDate, endDate, tag);
break;
case 5:
//百度
imel = getImeiNumJpa(TableEnum.BD.getTableName(), startDate, endDate, tag);
break;
default:
break;
private List<DmpMonitorJpaDto> getMapData(DmpMonitorNumDto dmpMonitorNumDto, Integer flag) {
List<String> jlArray = new ArrayList<>();
List<String> ksArray = new ArrayList<>();
List<String> ucArray = new ArrayList<>();
List<String> vvArray = new ArrayList<>();
List<String> bdArray = new ArrayList<>();
List<String> gdArray = new ArrayList<>();
for (String tag : dmpMonitorNumDto.getTags()) {
int value = tag.contains(StrPool.DASHED) ? DeliveryPlatformEnum.getValue
(tag.substring(0, tag.indexOf(StrPool.DASHED))) : tag.equalsIgnoreCase(SqlConstant.TABLE_JU_QIAN) ? 1 : 999;
switch (value) {
case 1:
jlArray.add(tag);
break;
case 2:
// 快手
ksArray.add(tag);
break;
case 3:
// UC
ucArray.add(tag);
break;
case 4:
// VIVO
vvArray.add(tag);
break;
case 5:
//百度
bdArray.add(tag);
break;
case 6:
//广点通
gdArray.add(tag);
break;
default:
break;
}
}
return imel;
Date startTime = dmpMonitorNumDto.getStartTime();
Date endTime = dmpMonitorNumDto.getEndTime();
List<DmpMonitorJpaDto> listAll = new ArrayList<>();
if (jlArray.size() > 0) {
listAll.addAll(getImeiNumJpa(TableEnum.JL.getTableName(), startTime, endTime, jlArray, flag));
} else if (ksArray.size() > 0) {
listAll.addAll(getImeiNumJpa(TableEnum.KS.getTableName(), startTime, endTime, ksArray, flag));
} else if (ucArray.size() > 0) {
listAll.addAll(getImeiNumJpa(TableEnum.UC.getTableName(), startTime, endTime, ucArray, flag));
} else if (vvArray.size() > 0) {
listAll.addAll(getImeiNumJpa(TableEnum.VV.getTableName(), startTime, endTime, vvArray, flag));
} else if (bdArray.size() > 0) {
listAll.addAll(getImeiNumJpa(TableEnum.BD.getTableName(), startTime, endTime, bdArray, flag));
} else if (gdArray.size() > 0) {
listAll.addAll(getImeiNumJpa(TableEnum.GD.getTableName(), startTime, endTime, gdArray, flag));
}
return listAll;
}
//按时间分组
private List<HashMap<String, Object>> getGroupByTime(Date beginTime, Date endTime, List<DmpMonitorJpaDto> iemi) {
/**
*
*
* @param beginTime
* @param endTime
* @param dto
* @return
*/
private List<HashMap<String, Object>> getGroupByTime(Date beginTime, Date endTime, List<DmpMonitorJpaDto> dto) {
List<HashMap<String, Object>> list = new ArrayList<>();
int betweenDay = (int) DateUtil.between(beginTime, endTime, DateUnit.DAY);
for (int i = 0; i <= betweenDay; i++) {
HashMap<String, Object> map = new HashMap<>();
Date dateTime = DateUtil.offsetDay(beginTime, i);
List<DmpMonitorJpaDto> collect = iemi.stream().filter(c -> betweenByDay(dateTime, c.getGmtCreate())).collect(Collectors.toList());
map.put("date", dateTime);
map.put("num", collect.size());
list.add(map);
String dateTime = DateUtil.format(DateUtil.offsetDay(beginTime, i), "yyyy-MM-dd");
if (dto.size() > 0) {
List<DmpMonitorJpaDto> collect = dto.stream().filter(c -> DateUtil.between(DateUtil.parseDate(dateTime), DateUtil.parseDate(c.getGmtCreate()), DateUnit.DAY) == 0).collect(Collectors.toList());
if (collect.size() > 0) {
DmpMonitorJpaDto dmpMonitorJpaDto = collect.get(0);
map.put("date", dateTime);
map.put("num", dmpMonitorJpaDto.getNum());
} else {
map.put("date", dateTime);
map.put("num", 0);
}
list.add(map);
} else {
map.put("date", dateTime);
map.put("num", 0);
list.add(map);
}
}
return list;
}
private static Boolean betweenByDay(Date begin, Date end) {
begin = DateUtil.parse(DateUtil.format(begin, "yyyy-MM-dd"));
end = DateUtil.parse(DateUtil.format(end, "yyyy-MM-dd"));
long between = DateUtil.between(begin, end, DateUnit.DAY);
return between == 0;
}
@Transactional(rollbackFor = Exception.class)
public List<DmpMonitorJpaDto> getImeiNumJpa(String tableName, Date startDate, Date endDate, String tag) {
StringBuilder sql = new StringBuilder();
sql.append("select DISTINCT tb.gmt_create as gmtCreate ,tb.imei as imei from " + tableName + " as tb where 1=1");
sql.append(" and tb.imei != :imei1 ");
sql.append(" and tb.imei != :imei2 ");
sql.append(" and tb.gmt_create >= :startDate ");
sql.append(" and tb.gmt_create <= :endDate ");
sql.append(" and tb.tag = :tag ");
Query query = entityManager.createNativeQuery(sql.toString());
public List<DmpMonitorJpaDto> getImeiNumJpa(String tableName, Date startDate, Date endDate, List<String> tags, Integer flag) {
String sql = getSqlString(tableName, flag);
Query query = entityManager.createNativeQuery(sql);
query.setParameter("imei1", "");
query.setParameter("imei2", "__IMEI__");
query.setParameter("startDate", startDate);
query.setParameter("endDate", endDate);
query.setParameter("tag", tag);
query.setParameter("tag", tags);
query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List list = query.getResultList();
return getDmpMonitorJpaDto(list);
return getDmpMonitorJpaDto(list, flag);
}
private String getSqlString(String tableName, Integer flag) {
StringBuilder sql = new StringBuilder();
if (1 == flag) {
sql.append(" select a.tag,a.date as date ,COUNT(*) as num FROM ( SELECT DISTINCT(tb.imei),tb.tag ,DATE_FORMAT( tb.gmt_create, '%Y-%m-%d' ) AS date FROM ").append(tableName).append(" as tb where ");
sql.append(" tb.imei != :imei1 ");
sql.append(" and tb.imei != :imei2 ");
sql.append(" and tb.gmt_create >= :startDate ");
sql.append(" and tb.gmt_create < :endDate ");
sql.append(" and tb.tag in :tag ");
sql.append(" ) a group by a.tag,a.date");
} else {
sql.append("select DISTINCT DATE_FORMAT( tb.gmt_create, '%Y-%m-%d' ) as date ,tb.imei as imei ,tb.tag as tag from ").append(tableName).append(" as tb where");
sql.append(" tb.imei != :imei1 ");
sql.append(" and tb.imei != :imei2 ");
sql.append(" and tb.gmt_create >= :startDate ");
sql.append(" and tb.gmt_create < :endDate ");
sql.append(" and tb.tag in :tag ");
}
return sql.toString();
}
private List<DmpMonitorJpaDto> getDmpMonitorJpaDto(List list) {
private List<DmpMonitorJpaDto> getDmpMonitorJpaDto(List list, Integer flag) {
List<DmpMonitorJpaDto> tradeList = new ArrayList<>();
for (Object obj : list) {
Map row = (Map) obj;
DmpMonitorJpaDto trade = new DmpMonitorJpaDto();
trade.setImei((String) row.get("imei"));
trade.setGmtCreate((Date) row.get("gmtCreate"));
if (1 == flag) {
BigInteger num = (BigInteger) row.get("num");
trade.setNum(num.longValue());
} else {
trade.setImei(row.get("imei").toString());
}
trade.setGmtCreate(row.get("date").toString());
trade.setTag(row.get("tag").toString());
tradeList.add(trade);
}
return tradeList;

@ -1,5 +1,6 @@
package com.baiyee.adcallback.service.impl;
import com.baiyee.adcallback.api.constants.TagTypeConstant;
import com.baiyee.adcallback.service.GenerateService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@ -15,7 +16,7 @@ public class GenerateServiceImpl implements GenerateService {
/**
*
* @param tag
* @param type 0: 1: 2: 3:UC 4:VIVO
* @param type 0: 1: 2: 3:UC 4:VIVO 5:广
* @return
*/
@Override
@ -24,17 +25,29 @@ public class GenerateServiceImpl implements GenerateService {
String JL = "/api/jl/monitor?aid=__AID__&cid=__CID__&ctype=__CTYPE__&csite=__CSITE__&imei=__IMEI__&idfa=__IDFA__&oaid=__OAID__&os=__OS__&mac=__MAC__&mac1=__MAC1__&ip=__IP__&geo=__GEO__&TIMESTAMP=__TS__&callback_url=__CALLBACK_URL__&model=__MODEL__&caid1=__CAID1__&tag=";
String BD = "/api/bd/monitor?userid=__USER_ID__&aid=__IDEA_ID__&pid=__PLAN_ID__&uid=__UNIT_ID__&callback_url=__CALLBACK_URL__&click_id=__CLICK_ID__&idfa=__IDFA__&imei_md5=__IMEI__&oaid=__OAID__&mac=__MAC__&ip=__IP__&os=__OS__&ts=__TS__&device_info=__DEVICE_INFO__&tag=";
String UC = "/api/uc/monitor?imei={IMEI_SUM1}&oaid={OAID}&time={TS}&callback={CALLBACK_URL}&androidid={ANDROIDID_SUM1}&mac={MAC_SUM2}&ip={IP}&ua={UA}&acid={ACID}&gid={GID}&aid={AID}&cid={CID}&tag=";
String GDT = "/api/gdt/monitor?click_id=__CLICK__ID__&click_time=__CLICK__TIME__&impression_time=__IMPRESSION__TIME__&campaign_id=__CAMPAIGN__ID__&adgroup_id=__ADGROUP__ID__&ad_id=__AD__ID__&ad_platform_type=__AD__PLATFORM__TYPE__&ad_type=__AD__TYPE__&account_id=__ACCOUNT__ID__&agency_id=__AGENCY__ID__&click_sku_id=__CLICK__SKU__ID__&billing_event=__BILLING__EVENT__&deeplink_url=__DEEPLINK__URL__&universal_link=__UNIVERSAL__LINK__&page_url=__PAGE__URL__&device_os_type=__DEVICE__OS__TYPE__&process_time=__PROCESS__TIME__&promoted_object_id=__PROMOTED__OBJECT__ID__&promoted_object_type=__PROMOTED__OBJECT__TYPE__&real_cost=__REAL__COST__&request_id=__REQUEST__ID__&impression_id=__IMPRESSION__ID__&muid=__MUID__&hash_android_id=__HASH__ANDROID__ID__&ip=__IP__&user_agent=__USER__AGENT__&callback=__CALLBACK__&encrypted_position_id=__ENCRYPTED__POSITION__ID__&hash_oaid=__HASH__OAID__&caid=__CAID__&adgroup_name=__ADGROUP__NAME__&site_set_name=__SITE__SET__NAME__&campaign_name=__CAMPAIGN__NAME__&ad_name=__AD__NAME__&model=__MODEL__&tag=";
String KS = "/api/ks/monitor?&accountid=__ACCOUNTID__&aid=__AID__&cid=__CID__&did=__DID__&dname=__DNAME__&imeiMD5=__IMEI2__&oaid=__OAID__&mac=__MAC2__&androidid=__ANDROIDID2__&os=__OS__&ts=__TS__&ip=__IP__&ua=__UA__&csite=__CSITE__&model=__MODEL__&ac_creative=__AC_CREATIVE__&tag=";
String VIVO = "/api/vivo/monitor?os=__OS__&ip=__IP__&oaid=__OAID__&oaidplain=__OAIDPLAIN__&ua=__UA__&androidid=__ANDROIDID__&location=__LOCATION__&requestid=__REQUESTID__&requesttime=__REQUESTTIME__&advertiserid=__ADVERTISERID__&adname=__ADNAME__&creativeid=__CREATIVEID__&osversion=__OSVERSION__&model=__MODEL__&lang=__LANG__&resolution=__RESOLUTION__&nettype=__NETTYPE__&ts=__TS__&tag=";
String generateDmp;
switch (type){
case 0:
case TagTypeConstant.JL:
generateDmp = URL + JL + replaceTag;
break;
case 1:
case TagTypeConstant.BD:
generateDmp = URL + BD +replaceTag;
break;
case 3:
case TagTypeConstant.KS:
generateDmp = URL + KS +replaceTag;
break;
case TagTypeConstant.UC:
generateDmp = URL + UC + replaceTag;
break;
case TagTypeConstant.VIVO:
generateDmp = URL + VIVO + replaceTag;
break;
case TagTypeConstant.GDT:
generateDmp = URL + GDT + replaceTag;
break;
default:
generateDmp = null;
}

@ -4,7 +4,7 @@ spring:
application:
name: ad-callback
profiles:
active: prod
active: dev
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss

Loading…
Cancel
Save