添加querydsl

bynt 1 year ago
parent a4ba863c01
commit 9a548a08dc

@ -15,11 +15,16 @@
<description>ad-callback</description>
<properties>
<java.version>1.8</java.version>
<guava.version>22.0</guava.version>
<joda.version>2.10.5</joda.version>
<zip4j.version>1.3.2</zip4j.version>
<druid.version>1.1.22</druid.version>
<hutool.version>5.7.16</hutool.version>
<maven.test.skip>true</maven.test.skip>
<querydsl.version>4.3.1</querydsl.version>
<shardingsphere.version>5.1.1</shardingsphere.version>
<mysql-connector.version>8.0.13</mysql-connector.version>
<apt-maven-plugin.version>1.1.3</apt-maven-plugin.version>
<maven.test.failure.ignore>true</maven.test.failure.ignore>
</properties>
<dependencies>
@ -71,12 +76,13 @@
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>22.0</version>
<version>${guava.version}</version>
</dependency>
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>1.3.2</version>
<version>${zip4j.version}</version>
</dependency>
@ -92,6 +98,30 @@
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-sql</artifactId>
<version>${querydsl.version}</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda.version}</version>
</dependency>
</dependencies>
<build>
@ -109,6 +139,22 @@
<testFailureIgnore>${maven.test.failure.ignore}</testFailureIgnore>
</configuration>
</plugin>
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

@ -2,6 +2,7 @@ package com.baiyee.adcallback;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
@ -11,8 +12,9 @@ import org.springframework.scheduling.annotation.EnableScheduling;
* @author q
* @date 2022/01/05
*/
@SpringBootApplication
@EnableScheduling
@SpringBootApplication
@EnableJpaRepositories(basePackages = { "com.baiyee.adcallback.repository" })
public class AdCallbackApplication {
public static void main(String[] args) {

@ -24,6 +24,15 @@ public class SqlConstant {
public static final String PHONE_STR = " and device_os_type = 'android' ";
public static final String CREATE_TIME = "gmtCreate";
public static final String DATE_EXPR = "DATE_FORMAT({0},'%Y-%m-%d')";
public static final String DATE_EXPR_V2 = "DATE_FORMAT(max({0}),'%Y-%m-%d')";
/**
* sql
*/

@ -1,7 +1,9 @@
package com.baiyee.adcallback.api.controller;
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
import com.baiyee.adcallback.api.dto.DmpMonitorNumDto;
import com.baiyee.adcallback.service.DmpMonitorNumService;
import com.baiyee.adcallback.service.DmpMonitorV2Service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
@ -11,6 +13,9 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
* @author wujingtao
* @date 2022/03/01
@ -22,13 +27,24 @@ import org.springframework.web.bind.annotation.RestController;
public class DmpMonitorNumController {
private final DmpMonitorNumService dmpMonitorNumService;
private final DmpMonitorV2Service dmpMonitorV2Service;
@PostMapping(value = "/imeiNumber")
public ResponseEntity<Object> getDmpNumByTags(@RequestBody DmpMonitorNumDto dmpMonitorNumDto) {
return new ResponseEntity<>(dmpMonitorNumService.queryNumByTags(dmpMonitorNumDto), HttpStatus.OK);
Map<String, Object> resultMap = dmpMonitorNumDto.getVersion() != null
&& dmpMonitorNumDto.getVersion() == 1 ? dmpMonitorNumService.queryNumByTags(dmpMonitorNumDto)
: dmpMonitorV2Service.queryNumByTags(dmpMonitorNumDto);
return new ResponseEntity<>(resultMap, HttpStatus.OK);
}
@PostMapping(value = "/imeiLink")
public ResponseEntity<Object> getDmpImeiLink(@RequestBody DmpMonitorNumDto dmpMonitorNumDto) {
return new ResponseEntity<>(dmpMonitorNumService.getDmpImeiLink(dmpMonitorNumDto), HttpStatus.OK);
Map<String, List<DmpMonitorJpaDto>> dmpImeiMap = dmpMonitorNumDto.getVersion() != null
&& dmpMonitorNumDto.getVersion() == 1 ? dmpMonitorNumService.getDmpImeiLink(dmpMonitorNumDto)
: dmpMonitorV2Service.getDmpImeiLink(dmpMonitorNumDto);
return new ResponseEntity<>(dmpImeiMap, HttpStatus.OK);
}
}

@ -9,8 +9,15 @@ import lombok.Data;
@Data
public class DmpMonitorJpaDto {
private String imei;
private String gmtCreate;
private String tag;
private Long num;
private String tag;
private String gmtCreate;
private String imei;
}

@ -20,4 +20,7 @@ public class DmpMonitorNumDto {
private List<String> tags;
private String mail;
private Integer version;
}

@ -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> {
}

@ -3,7 +3,6 @@ package com.baiyee.adcallback.repository;
import cn.hutool.core.date.DateTime;
import com.baiyee.adcallback.api.dto.PlateFormDTO;
import com.baiyee.adcallback.repository.entity.TbBdNewBackdataEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@ -11,7 +10,7 @@ import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface TbBDNewBackdataEntityRepository extends JpaRepository<TbBdNewBackdataEntity, Long> {
public interface TbBDNewBackdataEntityRepository extends BaseRepository<TbBdNewBackdataEntity, Long> {
/**

@ -3,7 +3,6 @@ package com.baiyee.adcallback.repository;
import cn.hutool.core.date.DateTime;
import com.baiyee.adcallback.api.dto.PlateFormDTO;
import com.baiyee.adcallback.repository.entity.TbGdtNewBackdataEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@ -11,7 +10,7 @@ import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface TbGdtNewBackdataEntityRepository extends JpaRepository<TbGdtNewBackdataEntity, Long> {
public interface TbGdtNewBackdataEntityRepository extends BaseRepository<TbGdtNewBackdataEntity, Long> {
/**

@ -3,7 +3,6 @@ package com.baiyee.adcallback.repository;
import cn.hutool.core.date.DateTime;
import com.baiyee.adcallback.api.dto.PlateFormDTO;
import com.baiyee.adcallback.repository.entity.TbJLBackDataV1Entity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@ -12,7 +11,7 @@ import java.util.Date;
import java.util.List;
@Repository
public interface TbJLV1BackdataEntityRepository extends JpaRepository<TbJLBackDataV1Entity, Long> {
public interface TbJLV1BackdataEntityRepository extends BaseRepository<TbJLBackDataV1Entity, Long> {
@Query(value = "SELECT imei FROM tb_jl_v1_backdata WHERE imei != '' AND imei != '__IMEI__'", nativeQuery = true)
@ -40,5 +39,11 @@ public interface TbJLV1BackdataEntityRepository extends JpaRepository<TbJLBackDa
@Query("SELECT t FROM TbJLBackDataV1Entity t WHERE t.gmtCreate > ?1 AND t.gmtCreate < ?2")
List<TbJLBackDataV1Entity> queryByDate(DateTime startDate, DateTime endDate);
/**
*
*
* @param s
* @return
*/
List<TbJLBackDataV1Entity> queryBytag(String s);
}

@ -3,7 +3,6 @@ package com.baiyee.adcallback.repository;
import cn.hutool.core.date.DateTime;
import com.baiyee.adcallback.api.dto.PlateFormDTO;
import com.baiyee.adcallback.repository.entity.TbJLBackDataV2Entity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@ -12,7 +11,7 @@ import java.util.Date;
import java.util.List;
@Repository
public interface TbJLV2BackdataEntityRepository extends JpaRepository<TbJLBackDataV2Entity, Long> {
public interface TbJLV2BackdataEntityRepository extends BaseRepository<TbJLBackDataV2Entity, Long> {
@Query(value = "SELECT imei FROM tb_jl_v2_backdata WHERE imei != '' AND imei != '__IMEI__'", nativeQuery = true)
List<String> queryAllImeis();

@ -3,7 +3,6 @@ package com.baiyee.adcallback.repository;
import cn.hutool.core.date.DateTime;
import com.baiyee.adcallback.api.dto.PlateFormDTO;
import com.baiyee.adcallback.repository.entity.TbKSNewBackdataEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@ -11,7 +10,7 @@ import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface TbKSNewBackdataEntityRepository extends JpaRepository<TbKSNewBackdataEntity, Long> {
public interface TbKSNewBackdataEntityRepository extends BaseRepository<TbKSNewBackdataEntity, Long> {
/**

@ -3,13 +3,12 @@ package com.baiyee.adcallback.repository;
import cn.hutool.core.date.DateTime;
import com.baiyee.adcallback.api.dto.PlateFormDTO;
import com.baiyee.adcallback.repository.entity.TbUcBackdataEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface TbUcBackdataEntityRepository extends JpaRepository<TbUcBackdataEntity, Long> {
public interface TbUcBackdataEntityRepository extends BaseRepository<TbUcBackdataEntity, Long> {
/**

@ -3,13 +3,12 @@ package com.baiyee.adcallback.repository;
import cn.hutool.core.date.DateTime;
import com.baiyee.adcallback.api.dto.PlateFormDTO;
import com.baiyee.adcallback.repository.entity.TbVivoBackdataEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface TbVivoBackdataEntityRepository extends JpaRepository<TbVivoBackdataEntity, Long> {
public interface TbVivoBackdataEntityRepository extends BaseRepository<TbVivoBackdataEntity, Long> {
/**

@ -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);
}

@ -9,9 +9,31 @@ import java.util.Map;
/**
* @author wujingtao
* @date 2022/03/01
* @deprecated
* plz use the new version DmpMonitorV2Service
*/
@Deprecated
public interface DmpMonitorNumService {
/**
*
* @date 2023-6-21
* @change Enzo
* methods are out of date
* @param dmpMonitorNumDto
* @return
*/
@Deprecated
Map<String, Object> queryNumByTags(DmpMonitorNumDto dmpMonitorNumDto);
/**
*
* @date 2023-6-21
* @change Enzo
* methods are out of date
* @param dmpMonitorNumDto
* @return
*/
@Deprecated
Map<String, List<DmpMonitorJpaDto>> getDmpImeiLink(DmpMonitorNumDto dmpMonitorNumDto);
}

@ -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);
});
}
}

@ -49,6 +49,7 @@ public class DmpMonitorNumServiceImpl implements DmpMonitorNumService {
@Override
@Deprecated
public Map<String, Object> queryNumByTags(DmpMonitorNumDto dmpMonitorNumDto) {
HashMap<String, Object> map = new HashMap<>();
List<DmpMonitorJpaDto> mapData = getMapData(dmpMonitorNumDto, 1);
@ -67,6 +68,7 @@ public class DmpMonitorNumServiceImpl implements DmpMonitorNumService {
}
@Override
@Deprecated
public Map<String, List<DmpMonitorJpaDto>> getDmpImeiLink(DmpMonitorNumDto dmpMonitorNumDto) {
List<DmpMonitorJpaDto> mapData = getMapData(dmpMonitorNumDto, 2);
HashMap<String, List<DmpMonitorJpaDto>> mapGroupByTag = new HashMap<>();

@ -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);
});
}
}

@ -221,6 +221,9 @@ spring:
# 展示修改以后的sql语句
sql-show: true
jpa:
show-sql: false
platform:
authToken: JI8AeA7POKsdGcBC
url: http://8.130.96.163:8866/api/taskImei/callback/add

@ -3,31 +3,39 @@ package com.baiyee.adcallback;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.text.csv.CsvData;
import cn.hutool.core.text.csv.CsvReader;
import cn.hutool.core.text.csv.CsvUtil;
import com.baiyee.adcallback.api.dto.PlateFormDTO;
import com.baiyee.adcallback.api.vo.KSNewMobileMonitorCallbackRequestVO;
import com.baiyee.adcallback.common.enums.DeliveryPlatformEnum;
import com.baiyee.adcallback.repository.TbEquipmentEntityRepository;
import com.baiyee.adcallback.api.vo.QueryImeiVO;
import com.baiyee.adcallback.api.vo.QueryQuantityVO;
import com.baiyee.adcallback.repository.TbJLV1BackdataEntityRepository;
import com.baiyee.adcallback.repository.entity.TbEquipmentEntity;
import com.baiyee.adcallback.repository.entity.QTbJLBackDataV1Entity;
import com.baiyee.adcallback.repository.entity.TbJLBackDataV1Entity;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
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.jpa.impl.JPAQueryFactory;
import com.querydsl.jpa.sql.JPASQLQuery;
import com.querydsl.sql.DerbyTemplates;
import com.querydsl.sql.SQLExpressions;
import com.querydsl.sql.SQLTemplates;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Enzo
@ -40,6 +48,11 @@ import java.util.stream.Collectors;
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class TagTest {
@PersistenceContext
private EntityManager entityManager;
@Resource
private TbJLV1BackdataEntityRepository jlv1BackdataEntityRepository;
@ -48,7 +61,7 @@ public class TagTest {
public void getSetting() {
List<TbJLBackDataV1Entity> tbJLBackDataV1Entities = jlv1BackdataEntityRepository.queryBytag("2r310nar8x59");
ArrayList<String> strings = Lists.newArrayList("arc1iiemw9ti","r55t3fp2dio5");
ArrayList<String> strings = Lists.newArrayList("arc1iiemw9ti", "r55t3fp2dio5");
List<PlateFormDTO> imei__ = jlv1BackdataEntityRepository.queryPlateFormDTO
(CharSequenceUtil.EMPTY, "__IMEI__", DateUtil.beginOfDay(DateTime.now()), DateUtil.endOfDay(DateTime.now()), strings);
@ -56,23 +69,56 @@ public class TagTest {
System.out.println();
}
@Test
public void filter() {
JPAQueryFactory query = new JPAQueryFactory(this.entityManager);
ArrayList<String> strings = Lists.newArrayList("jl-hblst-0616-nhdo");
SQLTemplates templates = new DerbyTemplates();
JPASQLQuery<?> jpasqlQuery = new JPASQLQuery<Void>(entityManager, templates);
StringPath t3 = Expressions.stringPath("t3");
QTbJLBackDataV1Entity tbJLBackDataV1Entity = QTbJLBackDataV1Entity.tbJLBackDataV1Entity;
SimpleTemplate<String> t3Imei = Expressions.template(String.class, "t3.imei");
SimpleTemplate<Date> t3Date = Expressions.template(Date.class, "t3.gmtCreate");
StringTemplate dateExpr = Expressions.stringTemplate("DATE_FORMAT({0},'%Y-%m-%d')", tbJLBackDataV1Entity.gmtCreate);
SubQueryExpression<Tuple> gmtCreate = SQLExpressions.select(tbJLBackDataV1Entity.imei,
tbJLBackDataV1Entity.gmtCreate.max().as("gmtCreate")).from(tbJLBackDataV1Entity).where(tbJLBackDataV1Entity.tag.in(strings).and
(tbJLBackDataV1Entity.imei.ne(""))).groupBy(tbJLBackDataV1Entity.imei);
List<QueryQuantityVO> num = jpasqlQuery.select(Projections.bean(QueryQuantityVO.class, tbJLBackDataV1Entity.imei.count().as("num"),
tbJLBackDataV1Entity.tag, dateExpr.as("gmtCreate"))).from(tbJLBackDataV1Entity).innerJoin(gmtCreate, t3).on(tbJLBackDataV1Entity.imei.eq
(t3Imei).and(tbJLBackDataV1Entity.gmtCreate.eq(t3Date))).groupBy(dateExpr ,tbJLBackDataV1Entity.tag).fetch();
System.out.println(num);
}
@Test
public void dis() {
JPAQueryFactory query = new JPAQueryFactory(this.entityManager);
ArrayList<String> strings = Lists.newArrayList("jl-hblst-0616-nhdo");
SQLTemplates templates = new DerbyTemplates();
JPASQLQuery<?> jpasqlQuery = new JPASQLQuery<Void>(entityManager, templates);
QTbJLBackDataV1Entity tbJLBackDataV1Entity = QTbJLBackDataV1Entity.tbJLBackDataV1Entity;
StringTemplate dateExpr = Expressions.stringTemplate("DATE_FORMAT(max({0}),'%Y-%m-%d')", tbJLBackDataV1Entity.gmtCreate);
List<QueryImeiVO> num = jpasqlQuery.select(Projections.bean(QueryImeiVO.class, tbJLBackDataV1Entity.imei,
tbJLBackDataV1Entity.tag, dateExpr.as("gmtCreate"))).distinct().from(tbJLBackDataV1Entity).where(tbJLBackDataV1Entity.tag.in(strings).and(tbJLBackDataV1Entity.imei.ne("")).and(tbJLBackDataV1Entity.imei.ne("NULL"))).groupBy
(tbJLBackDataV1Entity.imei).fetch();
HashSet<QueryImeiVO> queryImeiVOS = Sets.newHashSet(num);
System.out.println(num);
ArrayList<String> objects = Lists.newArrayList();
ArrayList<String> a = Lists.newArrayList();
List<String> list = Lists.newArrayList("jl-aaa-das", "jl-aaa-das-v2", "jl-aaa-das");
for (String s1 : list) {
int v2 = s1.lastIndexOf("v2");
if (v2 > 0) {
objects.add(s1);
continue;
}
a.add(s1);
}
System.out.println();
}

@ -69,4 +69,6 @@ public class TbEquipmentTest {
System.out.println(s);
}
}

Loading…
Cancel
Save