|
|
|
@ -2,6 +2,7 @@ package com.baiyee.adcallback.service.impl;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.convert.Convert;
|
|
|
|
|
import cn.hutool.core.text.CharSequenceUtil;
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
|
import com.baiyee.adcallback.api.constants.SqlConstant;
|
|
|
|
|
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
|
|
|
|
import com.baiyee.adcallback.api.vo.QueryImeiVO;
|
|
|
|
@ -14,14 +15,12 @@ import com.baiyee.adcallback.service.GdtBackDateService;
|
|
|
|
|
import com.querydsl.core.Tuple;
|
|
|
|
|
import com.querydsl.core.types.Projections;
|
|
|
|
|
import com.querydsl.core.types.SubQueryExpression;
|
|
|
|
|
import com.querydsl.core.types.dsl.Expressions;
|
|
|
|
|
import com.querydsl.core.types.dsl.SimpleTemplate;
|
|
|
|
|
import com.querydsl.core.types.dsl.StringPath;
|
|
|
|
|
import com.querydsl.core.types.dsl.StringTemplate;
|
|
|
|
|
import com.querydsl.core.types.dsl.*;
|
|
|
|
|
import com.querydsl.sql.SQLExpressions;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
import java.sql.Timestamp;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
@ -32,16 +31,18 @@ import java.util.List;
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
|
public class GdtBackDataServiceImpl extends AbstractService<TbGdtNewBackdataEntity,Long> implements GdtBackDateService {
|
|
|
|
|
public class GdtBackDataServiceImpl extends AbstractService<TbGdtNewBackdataEntity, Long> implements GdtBackDateService {
|
|
|
|
|
QTbGdtNewBackdataEntity gdtNewBackdata = QTbGdtNewBackdataEntity.tbGdtNewBackdataEntity;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<DmpMonitorJpaDto> queryByTagAndTimeAndFlag
|
|
|
|
|
(Date startTime, Date endTime, List<String> tagList, Integer flag, Integer type) {
|
|
|
|
|
(Date startTime, Date endTime, List<String> tagList, Integer flag, Integer type, Integer vPoint) {
|
|
|
|
|
Timestamp endTimeStamp = new Timestamp(endTime.getTime());
|
|
|
|
|
Timestamp startTimeStamp = new Timestamp(startTime.getTime());
|
|
|
|
|
|
|
|
|
|
return this.applyJPA(query -> {
|
|
|
|
|
StringPath t3 = Expressions.stringPath("t3");
|
|
|
|
|
StringTemplate dateExpr;
|
|
|
|
|
QTbGdtNewBackdataEntity gdtNewBackdata = QTbGdtNewBackdataEntity.tbGdtNewBackdataEntity;
|
|
|
|
|
if (flag == 1) {
|
|
|
|
|
dateExpr = Expressions.stringTemplate(SqlConstant.DATE_EXPR, gdtNewBackdata.gmtCreate);
|
|
|
|
|
SimpleTemplate<String> t3Tag = Expressions.template(String.class, "t3.tag");
|
|
|
|
@ -49,13 +50,12 @@ public class GdtBackDataServiceImpl extends AbstractService<TbGdtNewBackdataEnti
|
|
|
|
|
SimpleTemplate<String> t3Oaid = Expressions.template(String.class, "t3.oaid");
|
|
|
|
|
SimpleTemplate<Date> t3Date = Expressions.template(Date.class, "t3.gmtCreate");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (type == 2){
|
|
|
|
|
if (type == 2) {
|
|
|
|
|
BooleanExpression expression = getOaidBooleanExpression(tagList, vPoint, startTimeStamp, endTimeStamp);
|
|
|
|
|
// 封装子查询
|
|
|
|
|
SubQueryExpression<Tuple> gmtCreate = SQLExpressions.select
|
|
|
|
|
(gdtNewBackdata.oaid, gdtNewBackdata.tag,gdtNewBackdata.gmtCreate.max().as(SqlConstant.CREATE_TIME)).from
|
|
|
|
|
(gdtNewBackdata).where(gdtNewBackdata.tag.in(tagList).and(gdtNewBackdata.oaid.ne(CharSequenceUtil.EMPTY).and
|
|
|
|
|
(gdtNewBackdata.oaid.ne(DataConstant.IMEI_NULL_TAG)).and(gdtNewBackdata.oaid.ne(DataConstant.IMEI_TAG)))).groupBy(gdtNewBackdata.oaid,gdtNewBackdata.tag);
|
|
|
|
|
(gdtNewBackdata.oaid, gdtNewBackdata.tag, gdtNewBackdata.gmtCreate.max().as(SqlConstant.CREATE_TIME)).from
|
|
|
|
|
(gdtNewBackdata).where(expression).groupBy(gdtNewBackdata.oaid, gdtNewBackdata.tag);
|
|
|
|
|
|
|
|
|
|
// 结果返回
|
|
|
|
|
List<QueryQuantityVO> voList = query.select(Projections.bean
|
|
|
|
@ -63,11 +63,11 @@ public class GdtBackDataServiceImpl extends AbstractService<TbGdtNewBackdataEnti
|
|
|
|
|
(gdtNewBackdata).innerJoin(gmtCreate, t3).on(gdtNewBackdata.oaid.eq(t3Oaid).and(gdtNewBackdata.gmtCreate.eq(t3Date).and(gdtNewBackdata.tag.eq(t3Tag)))).groupBy(dateExpr, gdtNewBackdata.tag).fetch();
|
|
|
|
|
return Convert.toList(DmpMonitorJpaDto.class, voList);
|
|
|
|
|
}
|
|
|
|
|
BooleanExpression expression = getImeiBooleanExpression(tagList, vPoint, startTimeStamp, endTimeStamp);
|
|
|
|
|
// 封装子查询
|
|
|
|
|
SubQueryExpression<Tuple> gmtCreate = SQLExpressions.select
|
|
|
|
|
(gdtNewBackdata.imei, gdtNewBackdata.tag,gdtNewBackdata.gmtCreate.max().as(SqlConstant.CREATE_TIME)).from
|
|
|
|
|
(gdtNewBackdata).where(gdtNewBackdata.tag.in(tagList).and(gdtNewBackdata.imei.ne(CharSequenceUtil.EMPTY).and
|
|
|
|
|
(gdtNewBackdata.imei.ne(DataConstant.IMEI_NULL_TAG)).and(gdtNewBackdata.imei.ne(DataConstant.IMEI_TAG)))).groupBy(gdtNewBackdata.imei,gdtNewBackdata.tag);
|
|
|
|
|
(gdtNewBackdata.imei, gdtNewBackdata.tag, gdtNewBackdata.gmtCreate.max().as(SqlConstant.CREATE_TIME)).from
|
|
|
|
|
(gdtNewBackdata).where(expression).groupBy(gdtNewBackdata.imei, gdtNewBackdata.tag);
|
|
|
|
|
|
|
|
|
|
// 结果返回
|
|
|
|
|
List<QueryQuantityVO> voList = query.select(Projections.bean
|
|
|
|
@ -80,17 +80,36 @@ public class GdtBackDataServiceImpl extends AbstractService<TbGdtNewBackdataEnti
|
|
|
|
|
dateExpr = Expressions.stringTemplate(SqlConstant.DATE_EXPR_V2, gdtNewBackdata.gmtCreate);
|
|
|
|
|
|
|
|
|
|
if (type == 2) {
|
|
|
|
|
BooleanExpression expression = getOaidBooleanExpression(tagList, vPoint, startTimeStamp, endTimeStamp);
|
|
|
|
|
List<QueryImeiVO> imeiVOList = query.select(Projections.bean
|
|
|
|
|
(QueryImeiVO.class, gdtNewBackdata.oaid.as("imei"), gdtNewBackdata.tag, dateExpr.as(SqlConstant.CREATE_TIME))).distinct().from(gdtNewBackdata).where
|
|
|
|
|
(gdtNewBackdata.tag.in(tagList).and(gdtNewBackdata.oaid.ne(CharSequenceUtil.EMPTY).and(gdtNewBackdata.oaid.ne(DataConstant.IMEI_NULL_TAG)).and(gdtNewBackdata.oaid.ne
|
|
|
|
|
(DataConstant.IDFA_NUM)))).groupBy(gdtNewBackdata.oaid,gdtNewBackdata.tag).fetch();
|
|
|
|
|
(expression).groupBy(gdtNewBackdata.oaid, gdtNewBackdata.tag).fetch();
|
|
|
|
|
return Convert.toList(DmpMonitorJpaDto.class, imeiVOList);
|
|
|
|
|
}
|
|
|
|
|
BooleanExpression expression = getImeiBooleanExpression(tagList, vPoint, startTimeStamp, endTimeStamp);
|
|
|
|
|
List<QueryImeiVO> imeiVOList = query.select(Projections.bean
|
|
|
|
|
(QueryImeiVO.class, gdtNewBackdata.imei, gdtNewBackdata.tag, dateExpr.as(SqlConstant.CREATE_TIME))).distinct().from(gdtNewBackdata).where
|
|
|
|
|
(gdtNewBackdata.tag.in(tagList).and(gdtNewBackdata.imei.ne(CharSequenceUtil.EMPTY).and(gdtNewBackdata.imei.ne(DataConstant.IMEI_NULL_TAG)).and(gdtNewBackdata.imei.ne
|
|
|
|
|
(DataConstant.IMEI_TAG)))).groupBy(gdtNewBackdata.imei,gdtNewBackdata.tag).fetch();
|
|
|
|
|
(expression).groupBy(gdtNewBackdata.imei, gdtNewBackdata.tag).fetch();
|
|
|
|
|
return Convert.toList(DmpMonitorJpaDto.class, imeiVOList);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private BooleanExpression getImeiBooleanExpression(List<String> tagList, Integer vPoint, Timestamp startTimeStamp, Timestamp endTimeStamp) {
|
|
|
|
|
BooleanExpression expression = gdtNewBackdata.tag.in(tagList).and(gdtNewBackdata.gmtCreate.gt(startTimeStamp)).and(gdtNewBackdata.gmtCreate.lt(endTimeStamp)).and
|
|
|
|
|
(gdtNewBackdata.imei.ne(CharSequenceUtil.EMPTY)).and(gdtNewBackdata.imei.ne(DataConstant.IMEI_NULL_TAG)).and(gdtNewBackdata.imei.ne(DataConstant.IMEI_TAG));
|
|
|
|
|
if (ObjectUtil.isNotNull(vPoint)) {
|
|
|
|
|
expression = expression.and(gdtNewBackdata.vpoint.eq(vPoint));
|
|
|
|
|
}
|
|
|
|
|
return expression;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private BooleanExpression getOaidBooleanExpression(List<String> tagList, Integer vPoint, Timestamp startTimeStamp, Timestamp endTimeStamp) {
|
|
|
|
|
BooleanExpression expression = gdtNewBackdata.tag.in(tagList).and(gdtNewBackdata.gmtCreate.gt(startTimeStamp)).and(gdtNewBackdata.gmtCreate.lt(endTimeStamp)).and(gdtNewBackdata.oaid.ne(CharSequenceUtil.EMPTY)).and
|
|
|
|
|
(gdtNewBackdata.oaid.ne(DataConstant.IDFA_NUM)).and(gdtNewBackdata.oaid.ne(DataConstant.IMEI_TAG));
|
|
|
|
|
if (ObjectUtil.isNotNull(vPoint)) {
|
|
|
|
|
expression = expression.and(gdtNewBackdata.vpoint.eq(vPoint));
|
|
|
|
|
}
|
|
|
|
|
return expression;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|