添加querydsl
parent
a4ba863c01
commit
9a548a08dc
@ -0,0 +1,25 @@
|
||||
package com.baiyee.adcallback.api.vo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/6/19
|
||||
*/
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class QueryImeiVO {
|
||||
|
||||
|
||||
private String imei;
|
||||
|
||||
private String tag;
|
||||
|
||||
private String gmtCreate;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.baiyee.adcallback.api.vo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2022/11/9
|
||||
*/
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class QueryQuantityVO {
|
||||
|
||||
|
||||
private Long num;
|
||||
|
||||
private String tag;
|
||||
|
||||
private String gmtCreate;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package com.baiyee.adcallback.config;
|
||||
|
||||
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/6/20
|
||||
*/
|
||||
@Configuration
|
||||
public class JpaConfig {
|
||||
|
||||
@Bean
|
||||
public JPAQueryFactory jpaQueryFactory(EntityManager entityManager){
|
||||
return new JPAQueryFactory(entityManager);
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package com.baiyee.adcallback.repository;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
import org.springframework.data.querydsl.QuerydslPredicateExecutor;
|
||||
import org.springframework.data.repository.NoRepositoryBean;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @param <T>
|
||||
* @param <ID>
|
||||
*/
|
||||
@NoRepositoryBean
|
||||
public interface BaseRepository<T, ID> extends JpaRepository<T, ID>, JpaSpecificationExecutor <T>, QuerydslPredicateExecutor<T> {
|
||||
|
||||
}
|
@ -0,0 +1,290 @@
|
||||
package com.baiyee.adcallback.service;
|
||||
|
||||
import com.baiyee.adcallback.repository.BaseRepository;
|
||||
import com.querydsl.core.types.OrderSpecifier;
|
||||
import com.querydsl.core.types.Predicate;
|
||||
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||
import com.querydsl.jpa.sql.JPASQLQuery;
|
||||
import com.querydsl.sql.DerbyTemplates;
|
||||
import com.querydsl.sql.SQLTemplates;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Example;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.PersistenceContext;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
|
||||
public class AbstractService<T, ID> implements BaseService <T, ID>{
|
||||
|
||||
@Autowired
|
||||
protected BaseRepository<T,ID> baseRepository;
|
||||
|
||||
@PersistenceContext
|
||||
protected EntityManager entityManager;
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public List<T> findAll() {
|
||||
return this.baseRepository.findAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public List<T> findAll(Sort sort) {
|
||||
return this.baseRepository.findAll(sort);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public List<T> findAllById(Iterable<ID> ids) {
|
||||
return this.baseRepository.findAllById(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Throwable.class)
|
||||
public <S extends T> List<S> saveAll(Iterable<S> entities) {
|
||||
return this.baseRepository.saveAll(entities);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Throwable.class)
|
||||
public void flush() {
|
||||
this.baseRepository.flush();
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Throwable.class)
|
||||
public <S extends T> S saveAndFlush(S entity) {
|
||||
return this.baseRepository.saveAndFlush(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Throwable.class)
|
||||
@Deprecated
|
||||
public void deleteInBatch(Iterable<T> entities) {
|
||||
this.baseRepository.deleteInBatch(entities);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Throwable.class)
|
||||
public void deleteAllInBatch() {
|
||||
this.baseRepository.deleteAllInBatch();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
@Deprecated
|
||||
public T getOne(ID id) {
|
||||
return this.baseRepository.getOne(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public <S extends T> List<S> findAll(Example<S> example) {
|
||||
return this.baseRepository.findAll(example);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public <S extends T> List<S> findAll(Example<S> example, Sort sort) {
|
||||
return this.baseRepository.findAll(example, sort);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public Page<T> findAll(Pageable pageable) {
|
||||
return this.baseRepository.findAll(pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Throwable.class)
|
||||
public <S extends T> S save(S entity) {
|
||||
return this.baseRepository.save(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public Optional<T> findById(ID id) {
|
||||
return this.baseRepository.findById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public boolean existsById(ID id) {
|
||||
return this.baseRepository.existsById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public long count() {
|
||||
return this.baseRepository.count();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Throwable.class)
|
||||
public void deleteById(ID id) {
|
||||
this.baseRepository.deleteById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Throwable.class)
|
||||
public void delete(T entity) {
|
||||
this.baseRepository.delete(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Throwable.class)
|
||||
public void deleteAll(Iterable<? extends T> entities) {
|
||||
this.baseRepository.deleteAll(entities);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Throwable.class)
|
||||
public void deleteAll() {
|
||||
this.baseRepository.deleteAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public <S extends T> Optional<S> findOne(Example<S> example) {
|
||||
return this.baseRepository.findOne(example);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public <S extends T> Page<S> findAll(Example<S> example, Pageable pageable) {
|
||||
return this.baseRepository.findAll(example, pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public <S extends T> long count(Example<S> example) {
|
||||
return this.baseRepository.count(example);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public <S extends T> boolean exists(Example<S> example) {
|
||||
return this.baseRepository.exists(example);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public Optional<T> findOne(Specification<T> spec) {
|
||||
return this.baseRepository.findOne(spec);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public List<T> findAll(Specification<T> spec) {
|
||||
return this.baseRepository.findAll(spec);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public Page<T> findAll(Specification<T> spec, Pageable pageable) {
|
||||
return this.baseRepository.findAll(spec, pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public List<T> findAll(Specification<T> spec, Sort sort) {
|
||||
return this.baseRepository.findAll(spec, sort);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public long count(Specification<T> spec) {
|
||||
return this.baseRepository.count(spec);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public Optional<T> findOne(Predicate predicate) {
|
||||
return this.baseRepository.findOne(predicate);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public Iterable<T> findAll(Predicate predicate) {
|
||||
return this.baseRepository.findAll(predicate);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public Iterable<T> findAll(Predicate predicate, Sort sort) {
|
||||
return this.baseRepository.findAll(predicate, sort);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public Iterable<T> findAll(Predicate predicate, OrderSpecifier<?>... orders) {
|
||||
return this.baseRepository.findAll(predicate, orders);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public Iterable<T> findAll(OrderSpecifier<?>... orders) {
|
||||
return this.baseRepository.findAll(orders);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public Page<T> findAll(Predicate predicate, Pageable pageable) {
|
||||
return this.baseRepository.findAll(predicate, pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public long count(Predicate predicate) {
|
||||
return this.baseRepository.count(predicate);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public boolean exists(Predicate predicate) {
|
||||
return this.baseRepository.exists(predicate);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// -----------------------
|
||||
|
||||
|
||||
protected JPAQueryFactory newQuery() {
|
||||
return new JPAQueryFactory(this.entityManager);
|
||||
}
|
||||
|
||||
|
||||
protected JPASQLQuery<T> newJPAQuery() {
|
||||
SQLTemplates templates = new DerbyTemplates();
|
||||
return new JPASQLQuery<>(entityManager, templates);
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "unchecked", "hiding" })
|
||||
protected <T> T repository() {
|
||||
return (T) this.baseRepository;
|
||||
}
|
||||
|
||||
|
||||
@Transactional(rollbackFor = Throwable.class)
|
||||
public <R> R apply(Function<JPAQueryFactory, R> function) {
|
||||
return function.apply(this.newQuery());
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Throwable.class)
|
||||
public <R> R applyJPA(Function<JPASQLQuery<T>, R> function) {
|
||||
return function.apply(this.newJPAQuery());
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true, rollbackFor = Throwable.class)
|
||||
public <R> R applyReadOnly(Function<JPAQueryFactory, R> function) {
|
||||
return function.apply(this.newQuery());
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package com.baiyee.adcallback.service;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
import org.springframework.data.querydsl.QuerydslPredicateExecutor;
|
||||
|
||||
public interface BaseService<T, ID> extends JpaRepository<T, ID>, JpaSpecificationExecutor <T>, QuerydslPredicateExecutor<T> {
|
||||
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package com.baiyee.adcallback.service;
|
||||
|
||||
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/6/21
|
||||
*/
|
||||
public interface BdBackDateService {
|
||||
|
||||
/**
|
||||
* 条件查询
|
||||
* @param toUpperCase null
|
||||
* @param empty ""
|
||||
* @param imeiTag __imei__
|
||||
* @param startTime begin time
|
||||
* @param endTime end time
|
||||
* @param tagList tag
|
||||
* @param flag num or link
|
||||
* @return
|
||||
*/
|
||||
List<DmpMonitorJpaDto> queryByTagAndTimeAndFlag(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List<String> tagList, Integer flag);
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2023-6-21
|
||||
*
|
||||
*/
|
||||
public interface DmpMonitorV2Service {
|
||||
|
||||
|
||||
/**
|
||||
* 查询数量
|
||||
* @param dmpMonitorNumDto
|
||||
* @return
|
||||
*/
|
||||
Map<String, Object> queryNumByTags(DmpMonitorNumDto dmpMonitorNumDto);
|
||||
|
||||
/**
|
||||
* 生成链接
|
||||
* @param dmpMonitorNumDto
|
||||
* @return
|
||||
*/
|
||||
Map<String, List<DmpMonitorJpaDto>> getDmpImeiLink(DmpMonitorNumDto dmpMonitorNumDto);
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package com.baiyee.adcallback.service;
|
||||
|
||||
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/6/21
|
||||
*/
|
||||
public interface GdtBackDateService {
|
||||
|
||||
/**
|
||||
* 条件查询
|
||||
* @param toUpperCase null
|
||||
* @param empty ""
|
||||
* @param imeiTag __imei__
|
||||
* @param startTime begin time
|
||||
* @param endTime end time
|
||||
* @param tagList tag
|
||||
* @param flag num or link
|
||||
* @return
|
||||
*/
|
||||
List<DmpMonitorJpaDto> queryByTagAndTimeAndFlag(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List<String> tagList, Integer flag);
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package com.baiyee.adcallback.service;
|
||||
|
||||
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/6/21
|
||||
*/
|
||||
|
||||
public interface JlV1BackDataService {
|
||||
/**
|
||||
* 条件查询
|
||||
* @param toUpperCase null
|
||||
* @param empty ""
|
||||
* @param imeiTag __imei__
|
||||
* @param startTime begin time
|
||||
* @param endTime end time
|
||||
* @param tagList tag
|
||||
* @param flag num or link
|
||||
* @return
|
||||
*/
|
||||
List<DmpMonitorJpaDto> queryByTagAndTimeAndFlag(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List<String> tagList, Integer flag);
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package com.baiyee.adcallback.service;
|
||||
|
||||
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/6/21
|
||||
*/
|
||||
public interface JlV2BackDataService {
|
||||
|
||||
/**
|
||||
* 条件查询
|
||||
* @param toUpperCase null
|
||||
* @param empty ""
|
||||
* @param imeiTag __imei__
|
||||
* @param startTime begin time
|
||||
* @param endTime end time
|
||||
* @param tagList tag
|
||||
* @param flag num or link
|
||||
* @return
|
||||
*/
|
||||
List<DmpMonitorJpaDto> queryByTagAndTimeAndFlag(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List<String> tagList, Integer flag);
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package com.baiyee.adcallback.service;
|
||||
|
||||
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/6/21
|
||||
*/
|
||||
public interface KsBackDateService {
|
||||
|
||||
/**
|
||||
* 条件查询
|
||||
* @param toUpperCase null
|
||||
* @param empty ""
|
||||
* @param imeiTag __imei__
|
||||
* @param startTime begin time
|
||||
* @param endTime end time
|
||||
* @param tagList tag
|
||||
* @param flag num or link
|
||||
* @return
|
||||
*/
|
||||
List<DmpMonitorJpaDto> queryByTagAndTimeAndFlag(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List<String> tagList, Integer flag);
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package com.baiyee.adcallback.service;
|
||||
|
||||
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/6/21
|
||||
*/
|
||||
public interface UcBackDateService {
|
||||
|
||||
/**
|
||||
* 条件查询
|
||||
* @param toUpperCase null
|
||||
* @param empty ""
|
||||
* @param imeiTag __imei__
|
||||
* @param startTime begin time
|
||||
* @param endTime end time
|
||||
* @param tagList tag
|
||||
* @param flag num or link
|
||||
* @return
|
||||
*/
|
||||
List<DmpMonitorJpaDto> queryByTagAndTimeAndFlag(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List<String> tagList, Integer flag);
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package com.baiyee.adcallback.service;
|
||||
|
||||
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/6/21
|
||||
*/
|
||||
public interface VivoBackDateService {
|
||||
|
||||
/**
|
||||
* 条件查询
|
||||
* @param toUpperCase null
|
||||
* @param empty ""
|
||||
* @param imeiTag __imei__
|
||||
* @param startTime begin time
|
||||
* @param endTime end time
|
||||
* @param tagList tag
|
||||
* @param flag num or link
|
||||
* @return
|
||||
*/
|
||||
List<DmpMonitorJpaDto> queryByTagAndTimeAndFlag(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List<String> tagList, Integer flag);
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
package com.baiyee.adcallback.service.impl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import com.baiyee.adcallback.api.constants.SqlConstant;
|
||||
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
||||
import com.baiyee.adcallback.api.vo.QueryImeiVO;
|
||||
import com.baiyee.adcallback.api.vo.QueryQuantityVO;
|
||||
import com.baiyee.adcallback.common.constant.DataConstant;
|
||||
import com.baiyee.adcallback.repository.entity.QTbBdNewBackdataEntity;
|
||||
import com.baiyee.adcallback.repository.entity.TbBdNewBackdataEntity;
|
||||
import com.baiyee.adcallback.service.AbstractService;
|
||||
import com.baiyee.adcallback.service.BdBackDateService;
|
||||
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.sql.SQLExpressions;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/6/21
|
||||
*/
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class BdBackDataServiceImpl extends AbstractService<TbBdNewBackdataEntity, Long> implements BdBackDateService {
|
||||
@Override
|
||||
public List<DmpMonitorJpaDto> queryByTagAndTimeAndFlag
|
||||
(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List<String> tagList, Integer flag) {
|
||||
|
||||
return this.applyJPA(query -> {
|
||||
StringPath t3 = Expressions.stringPath("t3");
|
||||
StringTemplate dateExpr;
|
||||
QTbBdNewBackdataEntity bdNewBackdata = QTbBdNewBackdataEntity.tbBdNewBackdataEntity;
|
||||
if (flag == 1) {
|
||||
dateExpr = Expressions.stringTemplate(SqlConstant.DATE_EXPR, bdNewBackdata.gmtCreate);
|
||||
SimpleTemplate<String> t3Tag = Expressions.template(String.class, "t3.tag");
|
||||
SimpleTemplate<String> t3Imei = Expressions.template(String.class, "t3.imei");
|
||||
SimpleTemplate<Date> t3Date = Expressions.template(Date.class, "t3.gmtCreate");
|
||||
// 封装子查询
|
||||
SubQueryExpression<Tuple> gmtCreate = SQLExpressions.select
|
||||
(bdNewBackdata.imei, bdNewBackdata.tag,bdNewBackdata.gmtCreate.max().as(SqlConstant.CREATE_TIME)).from
|
||||
(bdNewBackdata).where(bdNewBackdata.tag.in(tagList).and(bdNewBackdata.imei.ne(CharSequenceUtil.EMPTY).and
|
||||
(bdNewBackdata.imei.ne(DataConstant.IMEI_NULL_TAG)).and(bdNewBackdata.imei.ne(DataConstant.IMEI_TAG)))).groupBy(bdNewBackdata.imei,bdNewBackdata.tag);
|
||||
|
||||
// 结果返回
|
||||
List<QueryQuantityVO> voList = query.select(Projections.bean
|
||||
(QueryQuantityVO.class, bdNewBackdata.imei.count().as("num"), bdNewBackdata.tag, dateExpr.as(SqlConstant.CREATE_TIME))).from
|
||||
(bdNewBackdata).innerJoin(gmtCreate, t3).on(bdNewBackdata.imei.eq(t3Imei).and(bdNewBackdata.gmtCreate.eq(t3Date).and(bdNewBackdata.tag.eq(t3Tag)))).groupBy(dateExpr, bdNewBackdata.tag).fetch();
|
||||
return Convert.toList(DmpMonitorJpaDto.class, voList);
|
||||
}
|
||||
|
||||
// 修改时间格式
|
||||
dateExpr = Expressions.stringTemplate(SqlConstant.DATE_EXPR_V2, bdNewBackdata.gmtCreate);
|
||||
|
||||
List<QueryImeiVO> imeiVOList = query.select(Projections.bean
|
||||
(QueryImeiVO.class, bdNewBackdata.imei, bdNewBackdata.tag, dateExpr.as(SqlConstant.CREATE_TIME))).distinct().from(bdNewBackdata).where
|
||||
(bdNewBackdata.tag.in(tagList).and(bdNewBackdata.imei.ne(CharSequenceUtil.EMPTY).and(bdNewBackdata.imei.ne(DataConstant.IMEI_NULL_TAG)).and(bdNewBackdata.imei.ne
|
||||
(DataConstant.IMEI_TAG)))).groupBy(bdNewBackdata.imei,bdNewBackdata.tag).fetch();
|
||||
return Convert.toList(DmpMonitorJpaDto.class, imeiVOList);
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,214 @@
|
||||
package com.baiyee.adcallback.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
||||
import com.baiyee.adcallback.api.dto.DmpMonitorNumDto;
|
||||
import com.baiyee.adcallback.common.constant.DataConstant;
|
||||
import com.baiyee.adcallback.common.enums.DeliveryPlatformEnum;
|
||||
import com.baiyee.adcallback.config.pojo.DeliveryStatisticDTO;
|
||||
import com.baiyee.adcallback.repository.TbDeliveryStatisticEntityRepository;
|
||||
import com.baiyee.adcallback.repository.entity.TbDeliveryStatisticEntity;
|
||||
import com.baiyee.adcallback.service.*;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2023-6-21
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class DmpMonitorV2ServiceImpl implements DmpMonitorV2Service {
|
||||
|
||||
private final JlV1BackDataService jlV1BackDataService;
|
||||
|
||||
private final JlV2BackDataService jlV2BackDataService;
|
||||
|
||||
private final VivoBackDateService vivoBackDateService;
|
||||
|
||||
private final GdtBackDateService gdtBackDateService;
|
||||
|
||||
private final KsBackDateService ksBackDateService;
|
||||
|
||||
private final UcBackDateService ucBackDateService;
|
||||
|
||||
private final BdBackDateService bdBackDateService;
|
||||
|
||||
private final TbDeliveryStatisticEntityRepository tbDeliveryStatisticEntityRepository;
|
||||
|
||||
|
||||
@Override
|
||||
public Map<String, Object> queryNumByTags(DmpMonitorNumDto dmpMonitorNumDto) {
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
List<DmpMonitorJpaDto> mapData = getMapData(dmpMonitorNumDto, 1);
|
||||
HashMap<String, List<DmpMonitorJpaDto>> numMapGroupByTag = new HashMap<>(8);
|
||||
numMapGroupByTag.putAll(mapData.stream().collect(Collectors.groupingBy(DmpMonitorJpaDto::getTag, Collectors.toList())));
|
||||
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, List<DmpMonitorJpaDto>> getDmpImeiLink(DmpMonitorNumDto dmpMonitorNumDto) {
|
||||
List<DmpMonitorJpaDto> mapData = getMapData(dmpMonitorNumDto, 2);
|
||||
return Maps.newHashMap(mapData.stream().collect(Collectors.groupingBy(DmpMonitorJpaDto::getTag, Collectors.toList())));
|
||||
}
|
||||
|
||||
private List<DmpMonitorJpaDto> getMapData(DmpMonitorNumDto dmpMonitorNumDto, Integer flag) {
|
||||
Map<Integer, List<String>> talbeMap = Maps.newHashMap();
|
||||
List<DmpMonitorJpaDto> voList = Lists.newArrayList();
|
||||
Date startTime = dmpMonitorNumDto.getStartTime();
|
||||
Date endTime = dmpMonitorNumDto.getEndTime();
|
||||
for (String tag : dmpMonitorNumDto.getTags()) {
|
||||
for (DeliveryPlatformEnum value : DeliveryPlatformEnum.values()) {
|
||||
if (tag.startsWith(value.getType().toLowerCase())) {
|
||||
Integer num = value.getNum();
|
||||
if (tag.lastIndexOf("v2") > 0) {
|
||||
num = 7;
|
||||
}
|
||||
List<String> tagList =
|
||||
talbeMap.containsKey(num) ?
|
||||
talbeMap.get(num) : Lists.newArrayList();
|
||||
tagList.add(tag);
|
||||
talbeMap.put(num, tagList);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (Map.Entry<Integer, List<String>> entry : talbeMap.entrySet()) {
|
||||
Integer index = entry.getKey();
|
||||
List<String> tagList = entry.getValue();
|
||||
switch (index) {
|
||||
case 1:
|
||||
voList.addAll(jlV1BackDataService.queryByTagAndTimeAndFlag
|
||||
(CharSequenceUtil.NULL.toUpperCase(), CharSequenceUtil.EMPTY, DataConstant.IMEI_TAG, startTime, endTime, tagList, flag));
|
||||
break;
|
||||
case 7:
|
||||
// v2
|
||||
voList.addAll(jlV2BackDataService.queryByTagAndTimeAndFlag
|
||||
(CharSequenceUtil.NULL.toUpperCase(), CharSequenceUtil.EMPTY, DataConstant.IMEI_TAG, startTime, endTime, tagList, flag));
|
||||
break;
|
||||
case 2:
|
||||
// 快手
|
||||
voList.addAll(ksBackDateService.queryByTagAndTimeAndFlag
|
||||
(CharSequenceUtil.NULL.toUpperCase(), CharSequenceUtil.EMPTY, DataConstant.IMEI_TAG, startTime, endTime, tagList, flag));
|
||||
break;
|
||||
case 3:
|
||||
// UC
|
||||
voList.addAll(ucBackDateService.queryByTagAndTimeAndFlag
|
||||
(CharSequenceUtil.NULL.toUpperCase(), CharSequenceUtil.EMPTY, DataConstant.IMEI_TAG, startTime, endTime, tagList, flag));
|
||||
break;
|
||||
case 4:
|
||||
// VIVO
|
||||
voList.addAll(vivoBackDateService.queryByTagAndTimeAndFlag
|
||||
(CharSequenceUtil.NULL.toUpperCase(), CharSequenceUtil.EMPTY, DataConstant.IMEI_TAG, startTime, endTime, tagList, flag));
|
||||
break;
|
||||
case 5:
|
||||
//百度
|
||||
voList.addAll(bdBackDateService.queryByTagAndTimeAndFlag
|
||||
(CharSequenceUtil.NULL.toUpperCase(), CharSequenceUtil.EMPTY, DataConstant.IMEI_TAG, startTime, endTime, tagList, flag));
|
||||
break;
|
||||
case 6:
|
||||
//广点通
|
||||
voList.addAll(gdtBackDateService.queryByTagAndTimeAndFlag
|
||||
(CharSequenceUtil.NULL.toUpperCase(), CharSequenceUtil.EMPTY, DataConstant.IMEI_TAG, startTime, endTime, tagList, flag));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return flag == 1 ? voList : this.getDmpMonitorJpaDto(voList);
|
||||
}
|
||||
|
||||
|
||||
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<>();
|
||||
String dateTime = DateUtil.format(DateUtil.offsetDay(beginTime, i), "yyyy-MM-dd");
|
||||
if (!dto.isEmpty()) {
|
||||
List<DmpMonitorJpaDto> collect = dto.stream().filter(c -> DateUtil.between(DateUtil.parseDate(dateTime),
|
||||
DateUtil.parseDate(c.getGmtCreate()), DateUnit.DAY) == 0).collect(Collectors.toList());
|
||||
if (!collect.isEmpty()) {
|
||||
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 List<DmpMonitorJpaDto> getDmpMonitorJpaDto(List<DmpMonitorJpaDto> list) {
|
||||
List<DmpMonitorJpaDto> tradeList = new ArrayList<>();
|
||||
|
||||
Map<String, List<DmpMonitorJpaDto>> stringCollectionMap =
|
||||
list.stream().collect(Collectors.groupingBy(DmpMonitorJpaDto::getTag));
|
||||
|
||||
if (CollUtil.isNotEmpty(stringCollectionMap)) {
|
||||
List<DmpMonitorJpaDto> newDataList = Lists.newArrayList();
|
||||
List<DeliveryStatisticDTO> saveDataList = Lists.newArrayList();
|
||||
for (Map.Entry<String, List<DmpMonitorJpaDto>> stringCollectionEntry : stringCollectionMap.entrySet()) {
|
||||
String tagStr = stringCollectionEntry.getKey();
|
||||
// 去除重复数据
|
||||
Set<DmpMonitorJpaDto> dmpMonitorJpaDtoSet = Sets.newHashSet(stringCollectionEntry.getValue());
|
||||
// 转换set
|
||||
Set<DeliveryStatisticDTO> rawDataSet = Convert.toSet(DeliveryStatisticDTO.class, dmpMonitorJpaDtoSet);
|
||||
// 查询数据
|
||||
List<DeliveryStatisticDTO> tagLists = Convert.toList(DeliveryStatisticDTO.class, tbDeliveryStatisticEntityRepository.findByTag(tagStr, 0));
|
||||
|
||||
Set<DeliveryStatisticDTO> newDataSet = Sets.newHashSet(tagLists);
|
||||
// 差集去除数据
|
||||
List<DeliveryStatisticDTO> differentData = Lists.newArrayList(Sets.difference(rawDataSet, newDataSet));
|
||||
// 保存将要插入数据
|
||||
saveDataList.addAll(differentData);
|
||||
List<DmpMonitorJpaDto> monitorJpaDtoList = Convert.toList(DmpMonitorJpaDto.class, differentData);
|
||||
// 返回数据
|
||||
newDataList.addAll(monitorJpaDtoList);
|
||||
}
|
||||
log.error("================ the save datalist size as {} ================", saveDataList.size());
|
||||
if (CollUtil.isNotEmpty(saveDataList)) {
|
||||
// 异步插入数据
|
||||
CompletableFuture.runAsync(() -> {
|
||||
List<TbDeliveryStatisticEntity> deliveryStatisticEntityList = Convert.toList(TbDeliveryStatisticEntity.class, saveDataList);
|
||||
// 批量保存
|
||||
tbDeliveryStatisticEntityRepository.saveAll(deliveryStatisticEntityList);
|
||||
});
|
||||
}
|
||||
log.error("================ the new datalist size as {} ================", newDataList.size());
|
||||
return newDataList;
|
||||
}
|
||||
return tradeList;
|
||||
}
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
package com.baiyee.adcallback.service.impl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import com.baiyee.adcallback.api.constants.SqlConstant;
|
||||
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
||||
import com.baiyee.adcallback.api.vo.QueryImeiVO;
|
||||
import com.baiyee.adcallback.api.vo.QueryQuantityVO;
|
||||
import com.baiyee.adcallback.common.constant.DataConstant;
|
||||
import com.baiyee.adcallback.repository.entity.QTbGdtNewBackdataEntity;
|
||||
import com.baiyee.adcallback.repository.entity.TbGdtNewBackdataEntity;
|
||||
import com.baiyee.adcallback.service.AbstractService;
|
||||
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.sql.SQLExpressions;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/6/21
|
||||
*/
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class GdtBackDataServiceImpl extends AbstractService<TbGdtNewBackdataEntity,Long> implements GdtBackDateService {
|
||||
|
||||
@Override
|
||||
public List<DmpMonitorJpaDto> queryByTagAndTimeAndFlag
|
||||
(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List<String> tagList, Integer flag) {
|
||||
|
||||
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");
|
||||
SimpleTemplate<String> t3Imei = Expressions.template(String.class, "t3.imei");
|
||||
SimpleTemplate<Date> t3Date = Expressions.template(Date.class, "t3.gmtCreate");
|
||||
// 封装子查询
|
||||
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);
|
||||
|
||||
// 结果返回
|
||||
List<QueryQuantityVO> voList = query.select(Projections.bean
|
||||
(QueryQuantityVO.class, gdtNewBackdata.imei.count().as("num"), gdtNewBackdata.tag, dateExpr.as(SqlConstant.CREATE_TIME))).from
|
||||
(gdtNewBackdata).innerJoin(gmtCreate, t3).on(gdtNewBackdata.imei.eq(t3Imei).and(gdtNewBackdata.gmtCreate.eq(t3Date).and(gdtNewBackdata.tag.eq(t3Tag)))).groupBy(dateExpr, gdtNewBackdata.tag).fetch();
|
||||
return Convert.toList(DmpMonitorJpaDto.class, voList);
|
||||
}
|
||||
|
||||
// 修改时间格式
|
||||
dateExpr = Expressions.stringTemplate(SqlConstant.DATE_EXPR_V2, gdtNewBackdata.gmtCreate);
|
||||
|
||||
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();
|
||||
return Convert.toList(DmpMonitorJpaDto.class, imeiVOList);
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
package com.baiyee.adcallback.service.impl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import com.baiyee.adcallback.api.constants.SqlConstant;
|
||||
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
||||
import com.baiyee.adcallback.api.vo.QueryImeiVO;
|
||||
import com.baiyee.adcallback.api.vo.QueryQuantityVO;
|
||||
import com.baiyee.adcallback.common.constant.DataConstant;
|
||||
import com.baiyee.adcallback.repository.entity.QTbJLBackDataV1Entity;
|
||||
import com.baiyee.adcallback.repository.entity.TbJLBackDataV1Entity;
|
||||
import com.baiyee.adcallback.service.AbstractService;
|
||||
import com.baiyee.adcallback.service.JlV1BackDataService;
|
||||
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.sql.SQLExpressions;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/6/21
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class JlV1BackDataServiceImpl extends AbstractService<TbJLBackDataV1Entity, Long> implements JlV1BackDataService {
|
||||
|
||||
@Override
|
||||
public List<DmpMonitorJpaDto> queryByTagAndTimeAndFlag
|
||||
(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List<String> tagList, Integer flag) {
|
||||
|
||||
return this.applyJPA(query -> {
|
||||
StringPath t3 = Expressions.stringPath("t3");
|
||||
StringTemplate dateExpr;
|
||||
QTbJLBackDataV1Entity v1Entity = QTbJLBackDataV1Entity.tbJLBackDataV1Entity;
|
||||
if (flag == 1) {
|
||||
dateExpr = Expressions.stringTemplate(SqlConstant.DATE_EXPR, v1Entity.gmtCreate);
|
||||
SimpleTemplate<String> t3Tag = Expressions.template(String.class, "t3.tag");
|
||||
SimpleTemplate<String> t3Imei = Expressions.template(String.class, "t3.imei");
|
||||
SimpleTemplate<Date> t3Date = Expressions.template(Date.class, "t3.gmtCreate");
|
||||
// 封装子查询
|
||||
SubQueryExpression<Tuple> gmtCreate = SQLExpressions.select
|
||||
(v1Entity.imei, v1Entity.tag,v1Entity.gmtCreate.max().as(SqlConstant.CREATE_TIME)).from
|
||||
(v1Entity).where(v1Entity.tag.in(tagList).and(v1Entity.imei.ne(CharSequenceUtil.EMPTY).and
|
||||
(v1Entity.imei.ne(DataConstant.IMEI_NULL_TAG)).and(v1Entity.imei.ne(DataConstant.IMEI_TAG)))).groupBy(v1Entity.imei,v1Entity.tag);
|
||||
|
||||
// 结果返回
|
||||
List<QueryQuantityVO> voList = query.select(Projections.bean
|
||||
(QueryQuantityVO.class, v1Entity.imei.count().as("num"), v1Entity.tag, dateExpr.as(SqlConstant.CREATE_TIME))).from
|
||||
(v1Entity).innerJoin(gmtCreate, t3).on(v1Entity.imei.eq(t3Imei).and(v1Entity.gmtCreate.eq(t3Date).and(v1Entity.tag.eq(t3Tag)))).groupBy(dateExpr, v1Entity.tag).fetch();
|
||||
return Convert.toList(DmpMonitorJpaDto.class, voList);
|
||||
}
|
||||
|
||||
// 修改时间格式
|
||||
dateExpr = Expressions.stringTemplate(SqlConstant.DATE_EXPR_V2, v1Entity.gmtCreate);
|
||||
|
||||
List<QueryImeiVO> imeiVOList = query.select(Projections.bean
|
||||
(QueryImeiVO.class, v1Entity.imei, v1Entity.tag, dateExpr.as(SqlConstant.CREATE_TIME))).distinct().from(v1Entity).where
|
||||
(v1Entity.tag.in(tagList).and(v1Entity.imei.ne(CharSequenceUtil.EMPTY).and(v1Entity.imei.ne(DataConstant.IMEI_NULL_TAG)).and(v1Entity.imei.ne
|
||||
(DataConstant.IMEI_TAG)))).groupBy(v1Entity.imei,v1Entity.tag).fetch();
|
||||
return Convert.toList(DmpMonitorJpaDto.class, imeiVOList);
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
package com.baiyee.adcallback.service.impl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import com.baiyee.adcallback.api.constants.SqlConstant;
|
||||
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
||||
import com.baiyee.adcallback.api.vo.QueryImeiVO;
|
||||
import com.baiyee.adcallback.api.vo.QueryQuantityVO;
|
||||
import com.baiyee.adcallback.common.constant.DataConstant;
|
||||
import com.baiyee.adcallback.repository.entity.QTbJLBackDataV2Entity;
|
||||
import com.baiyee.adcallback.repository.entity.TbJLBackDataV2Entity;
|
||||
import com.baiyee.adcallback.service.AbstractService;
|
||||
import com.baiyee.adcallback.service.JlV2BackDataService;
|
||||
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.sql.SQLExpressions;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/6/21
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class JlV2BackDataServiceImpl extends AbstractService<TbJLBackDataV2Entity,Long> implements JlV2BackDataService {
|
||||
|
||||
@Override
|
||||
public List<DmpMonitorJpaDto> queryByTagAndTimeAndFlag
|
||||
(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List<String> tagList, Integer flag) {
|
||||
|
||||
return this.applyJPA(query -> {
|
||||
StringPath t3 = Expressions.stringPath("t3");
|
||||
StringTemplate dateExpr;
|
||||
QTbJLBackDataV2Entity v2Entity = QTbJLBackDataV2Entity.tbJLBackDataV2Entity;
|
||||
if (flag == 1) {
|
||||
dateExpr = Expressions.stringTemplate(SqlConstant.DATE_EXPR, v2Entity.gmtCreate);
|
||||
SimpleTemplate<String> t3Tag = Expressions.template(String.class, "t3.tag");
|
||||
SimpleTemplate<String> t3Imei = Expressions.template(String.class, "t3.imei");
|
||||
SimpleTemplate<Date> t3Date = Expressions.template(Date.class, "t3.gmtCreate");
|
||||
// 封装子查询
|
||||
SubQueryExpression<Tuple> gmtCreate = SQLExpressions.select
|
||||
(v2Entity.imei, v2Entity.tag,v2Entity.gmtCreate.max().as(SqlConstant.CREATE_TIME)).from
|
||||
(v2Entity).where(v2Entity.tag.in(tagList).and(v2Entity.imei.ne(CharSequenceUtil.EMPTY).and
|
||||
(v2Entity.imei.ne(DataConstant.IMEI_NULL_TAG)).and(v2Entity.imei.ne(DataConstant.IMEI_TAG)))).groupBy(v2Entity.imei,v2Entity.tag);
|
||||
|
||||
// 结果返回
|
||||
List<QueryQuantityVO> voList = query.select(Projections.bean
|
||||
(QueryQuantityVO.class, v2Entity.imei.count().as("num"), v2Entity.tag, dateExpr.as(SqlConstant.CREATE_TIME))).from
|
||||
(v2Entity).innerJoin(gmtCreate, t3).on(v2Entity.imei.eq(t3Imei).and(v2Entity.gmtCreate.eq(t3Date).and(v2Entity.tag.eq(t3Tag)))).groupBy(dateExpr, v2Entity.tag).fetch();
|
||||
return Convert.toList(DmpMonitorJpaDto.class, voList);
|
||||
}
|
||||
|
||||
// 修改时间格式
|
||||
dateExpr = Expressions.stringTemplate(SqlConstant.DATE_EXPR_V2, v2Entity.gmtCreate);
|
||||
|
||||
List<QueryImeiVO> imeiVOList = query.select(Projections.bean
|
||||
(QueryImeiVO.class, v2Entity.imei, v2Entity.tag, dateExpr.as(SqlConstant.CREATE_TIME))).distinct().from(v2Entity).where
|
||||
(v2Entity.tag.in(tagList).and(v2Entity.imei.ne(CharSequenceUtil.EMPTY).and(v2Entity.imei.ne(DataConstant.IMEI_NULL_TAG)).and(v2Entity.imei.ne
|
||||
(DataConstant.IMEI_TAG)))).groupBy(v2Entity.imei,v2Entity.tag).fetch();
|
||||
return Convert.toList(DmpMonitorJpaDto.class, imeiVOList);
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
package com.baiyee.adcallback.service.impl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import com.baiyee.adcallback.api.constants.SqlConstant;
|
||||
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
||||
import com.baiyee.adcallback.api.vo.QueryImeiVO;
|
||||
import com.baiyee.adcallback.api.vo.QueryQuantityVO;
|
||||
import com.baiyee.adcallback.common.constant.DataConstant;
|
||||
import com.baiyee.adcallback.repository.entity.QTbKSNewBackdataEntity;
|
||||
import com.baiyee.adcallback.repository.entity.TbKSNewBackdataEntity;
|
||||
import com.baiyee.adcallback.service.AbstractService;
|
||||
import com.baiyee.adcallback.service.KsBackDateService;
|
||||
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.sql.SQLExpressions;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/6/21
|
||||
*/
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class KsBackDataServiceImpl extends AbstractService<TbKSNewBackdataEntity,Long> implements KsBackDateService {
|
||||
|
||||
@Override
|
||||
public List<DmpMonitorJpaDto> queryByTagAndTimeAndFlag
|
||||
(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List<String> tagList, Integer flag) {
|
||||
|
||||
return this.applyJPA(query -> {
|
||||
StringPath t3 = Expressions.stringPath("t3");
|
||||
StringTemplate dateExpr;
|
||||
QTbKSNewBackdataEntity ksNewBackdata = QTbKSNewBackdataEntity.tbKSNewBackdataEntity;
|
||||
if (flag == 1) {
|
||||
dateExpr = Expressions.stringTemplate(SqlConstant.DATE_EXPR, ksNewBackdata.gmtCreate);
|
||||
SimpleTemplate<String> t3Tag = Expressions.template(String.class, "t3.tag");
|
||||
SimpleTemplate<String> t3Imei = Expressions.template(String.class, "t3.imei");
|
||||
SimpleTemplate<Date> t3Date = Expressions.template(Date.class, "t3.gmtCreate");
|
||||
// 封装子查询
|
||||
SubQueryExpression<Tuple> gmtCreate = SQLExpressions.select
|
||||
(ksNewBackdata.imei, ksNewBackdata.tag,ksNewBackdata.gmtCreate.max().as(SqlConstant.CREATE_TIME)).from
|
||||
(ksNewBackdata).where(ksNewBackdata.tag.in(tagList).and(ksNewBackdata.imei.ne(CharSequenceUtil.EMPTY).and
|
||||
(ksNewBackdata.imei.ne(DataConstant.IMEI_NULL_TAG)).and(ksNewBackdata.imei.ne(DataConstant.IMEI_TAG)))).groupBy(ksNewBackdata.imei,ksNewBackdata.tag);
|
||||
|
||||
// 结果返回
|
||||
List<QueryQuantityVO> voList = query.select(Projections.bean
|
||||
(QueryQuantityVO.class, ksNewBackdata.imei.count().as("num"), ksNewBackdata.tag, dateExpr.as(SqlConstant.CREATE_TIME))).from
|
||||
(ksNewBackdata).innerJoin(gmtCreate, t3).on(ksNewBackdata.imei.eq(t3Imei).and(ksNewBackdata.gmtCreate.eq(t3Date).and(ksNewBackdata.tag.eq(t3Tag)))).groupBy(dateExpr, ksNewBackdata.tag).fetch();
|
||||
return Convert.toList(DmpMonitorJpaDto.class, voList);
|
||||
}
|
||||
|
||||
// 修改时间格式
|
||||
dateExpr = Expressions.stringTemplate(SqlConstant.DATE_EXPR_V2, ksNewBackdata.gmtCreate);
|
||||
|
||||
List<QueryImeiVO> imeiVOList = query.select(Projections.bean
|
||||
(QueryImeiVO.class, ksNewBackdata.imei, ksNewBackdata.tag, dateExpr.as(SqlConstant.CREATE_TIME))).distinct().from(ksNewBackdata).where
|
||||
(ksNewBackdata.tag.in(tagList).and(ksNewBackdata.imei.ne(CharSequenceUtil.EMPTY).and(ksNewBackdata.imei.ne(DataConstant.IMEI_NULL_TAG)).and(ksNewBackdata.imei.ne
|
||||
(DataConstant.IMEI_TAG)))).groupBy(ksNewBackdata.imei,ksNewBackdata.tag).fetch();
|
||||
return Convert.toList(DmpMonitorJpaDto.class, imeiVOList);
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
package com.baiyee.adcallback.service.impl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import com.baiyee.adcallback.api.constants.SqlConstant;
|
||||
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
||||
import com.baiyee.adcallback.api.vo.QueryImeiVO;
|
||||
import com.baiyee.adcallback.api.vo.QueryQuantityVO;
|
||||
import com.baiyee.adcallback.common.constant.DataConstant;
|
||||
import com.baiyee.adcallback.repository.entity.QTbUcBackdataEntity;
|
||||
import com.baiyee.adcallback.repository.entity.TbUcBackdataEntity;
|
||||
import com.baiyee.adcallback.service.AbstractService;
|
||||
import com.baiyee.adcallback.service.UcBackDateService;
|
||||
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.sql.SQLExpressions;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/6/21
|
||||
*/
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class UcBackDataServiceImpl extends AbstractService<TbUcBackdataEntity,Long> implements UcBackDateService {
|
||||
|
||||
@Override
|
||||
public List<DmpMonitorJpaDto> queryByTagAndTimeAndFlag
|
||||
(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List<String> tagList, Integer flag) {
|
||||
|
||||
return this.applyJPA(query -> {
|
||||
StringPath t3 = Expressions.stringPath("t3");
|
||||
StringTemplate dateExpr;
|
||||
QTbUcBackdataEntity ucBackdata = QTbUcBackdataEntity.tbUcBackdataEntity;
|
||||
if (flag == 1) {
|
||||
dateExpr = Expressions.stringTemplate(SqlConstant.DATE_EXPR, ucBackdata.gmtCreate);
|
||||
SimpleTemplate<String> t3Tag = Expressions.template(String.class, "t3.tag");
|
||||
SimpleTemplate<String> t3Imei = Expressions.template(String.class, "t3.imei");
|
||||
SimpleTemplate<Date> t3Date = Expressions.template(Date.class, "t3.gmtCreate");
|
||||
// 封装子查询
|
||||
SubQueryExpression<Tuple> gmtCreate = SQLExpressions.select
|
||||
(ucBackdata.imei, ucBackdata.tag,ucBackdata.gmtCreate.max().as(SqlConstant.CREATE_TIME)).from
|
||||
(ucBackdata).where(ucBackdata.tag.in(tagList).and(ucBackdata.imei.ne(CharSequenceUtil.EMPTY).and
|
||||
(ucBackdata.imei.ne(DataConstant.IMEI_NULL_TAG)).and(ucBackdata.imei.ne(DataConstant.IMEI_TAG)))).groupBy(ucBackdata.imei,ucBackdata.tag);
|
||||
|
||||
// 结果返回
|
||||
List<QueryQuantityVO> voList = query.select(Projections.bean
|
||||
(QueryQuantityVO.class, ucBackdata.imei.count().as("num"), ucBackdata.tag, dateExpr.as(SqlConstant.CREATE_TIME))).from
|
||||
(ucBackdata).innerJoin(gmtCreate, t3).on(ucBackdata.imei.eq(t3Imei).and(ucBackdata.gmtCreate.eq(t3Date).and(ucBackdata.tag.eq(t3Tag)))).groupBy(dateExpr, ucBackdata.tag).fetch();
|
||||
return Convert.toList(DmpMonitorJpaDto.class, voList);
|
||||
}
|
||||
|
||||
// 修改时间格式
|
||||
dateExpr = Expressions.stringTemplate(SqlConstant.DATE_EXPR_V2, ucBackdata.gmtCreate);
|
||||
|
||||
List<QueryImeiVO> imeiVOList = query.select(Projections.bean
|
||||
(QueryImeiVO.class, ucBackdata.imei, ucBackdata.tag, dateExpr.as(SqlConstant.CREATE_TIME))).distinct().from(ucBackdata).where
|
||||
(ucBackdata.tag.in(tagList).and(ucBackdata.imei.ne(CharSequenceUtil.EMPTY).and(ucBackdata.imei.ne(DataConstant.IMEI_NULL_TAG)).and(ucBackdata.imei.ne
|
||||
(DataConstant.IMEI_TAG)))).groupBy(ucBackdata.imei,ucBackdata.tag).fetch();
|
||||
return Convert.toList(DmpMonitorJpaDto.class, imeiVOList);
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
package com.baiyee.adcallback.service.impl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import com.baiyee.adcallback.api.constants.SqlConstant;
|
||||
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
||||
import com.baiyee.adcallback.api.vo.QueryImeiVO;
|
||||
import com.baiyee.adcallback.api.vo.QueryQuantityVO;
|
||||
import com.baiyee.adcallback.common.constant.DataConstant;
|
||||
import com.baiyee.adcallback.repository.entity.QTbVivoBackdataEntity;
|
||||
import com.baiyee.adcallback.repository.entity.TbVivoBackdataEntity;
|
||||
import com.baiyee.adcallback.service.AbstractService;
|
||||
import com.baiyee.adcallback.service.VivoBackDateService;
|
||||
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.sql.SQLExpressions;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/6/21
|
||||
*/
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class VivoBackDataServiceImpl extends AbstractService<TbVivoBackdataEntity,Long> implements VivoBackDateService {
|
||||
|
||||
@Override
|
||||
public List<DmpMonitorJpaDto> queryByTagAndTimeAndFlag
|
||||
(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List<String> tagList, Integer flag) {
|
||||
|
||||
return this.applyJPA(query -> {
|
||||
StringPath t3 = Expressions.stringPath("t3");
|
||||
StringTemplate dateExpr;
|
||||
QTbVivoBackdataEntity vivoBackdata = QTbVivoBackdataEntity.tbVivoBackdataEntity;
|
||||
if (flag == 1) {
|
||||
dateExpr = Expressions.stringTemplate(SqlConstant.DATE_EXPR, vivoBackdata.gmtCreate);
|
||||
SimpleTemplate<String> t3Tag = Expressions.template(String.class, "t3.tag");
|
||||
SimpleTemplate<String> t3Imei = Expressions.template(String.class, "t3.imei");
|
||||
SimpleTemplate<Date> t3Date = Expressions.template(Date.class, "t3.gmtCreate");
|
||||
// 封装子查询
|
||||
SubQueryExpression<Tuple> gmtCreate = SQLExpressions.select
|
||||
(vivoBackdata.imei, vivoBackdata.tag,vivoBackdata.gmtCreate.max().as(SqlConstant.CREATE_TIME)).from
|
||||
(vivoBackdata).where(vivoBackdata.tag.in(tagList).and(vivoBackdata.imei.ne(CharSequenceUtil.EMPTY).and
|
||||
(vivoBackdata.imei.ne(DataConstant.IMEI_NULL_TAG)).and(vivoBackdata.imei.ne(DataConstant.IMEI_TAG)))).groupBy(vivoBackdata.imei,vivoBackdata.tag);
|
||||
|
||||
// 结果返回
|
||||
List<QueryQuantityVO> voList = query.select(Projections.bean
|
||||
(QueryQuantityVO.class, vivoBackdata.imei.count().as("num"), vivoBackdata.tag, dateExpr.as(SqlConstant.CREATE_TIME))).from
|
||||
(vivoBackdata).innerJoin(gmtCreate, t3).on(vivoBackdata.imei.eq(t3Imei).and(vivoBackdata.gmtCreate.eq(t3Date).and(vivoBackdata.tag.eq(t3Tag)))).groupBy(dateExpr, vivoBackdata.tag).fetch();
|
||||
return Convert.toList(DmpMonitorJpaDto.class, voList);
|
||||
}
|
||||
|
||||
// 修改时间格式
|
||||
dateExpr = Expressions.stringTemplate(SqlConstant.DATE_EXPR_V2, vivoBackdata.gmtCreate);
|
||||
|
||||
List<QueryImeiVO> imeiVOList = query.select(Projections.bean
|
||||
(QueryImeiVO.class, vivoBackdata.imei, vivoBackdata.tag, dateExpr.as(SqlConstant.CREATE_TIME))).distinct().from(vivoBackdata).where
|
||||
(vivoBackdata.tag.in(tagList).and(vivoBackdata.imei.ne(CharSequenceUtil.EMPTY).and(vivoBackdata.imei.ne(DataConstant.IMEI_NULL_TAG)).and(vivoBackdata.imei.ne
|
||||
(DataConstant.IMEI_TAG)))).groupBy(vivoBackdata.imei,vivoBackdata.tag).fetch();
|
||||
return Convert.toList(DmpMonitorJpaDto.class, imeiVOList);
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue