From 9a548a08dc489cf4ad720dcd9bdfdbee7cb5c269 Mon Sep 17 00:00:00 2001 From: bynt Date: Wed, 21 Jun 2023 18:02:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0querydsl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 50 ++- .../adcallback/AdCallbackApplication.java | 4 +- .../adcallback/api/constants/SqlConstant.java | 9 + .../controller/DmpMonitorNumController.java | 20 +- .../adcallback/api/dto/DmpMonitorJpaDto.java | 13 +- .../adcallback/api/dto/DmpMonitorNumDto.java | 3 + .../baiyee/adcallback/api/vo/QueryImeiVO.java | 25 ++ .../adcallback/api/vo/QueryQuantityVO.java | 25 ++ .../baiyee/adcallback/config/JpaConfig.java | 20 ++ .../adcallback/repository/BaseRepository.java | 16 + .../TbBDNewBackdataEntityRepository.java | 3 +- .../TbGdtNewBackdataEntityRepository.java | 3 +- .../TbJLV1BackdataEntityRepository.java | 9 +- .../TbJLV2BackdataEntityRepository.java | 3 +- .../TbKSNewBackdataEntityRepository.java | 3 +- .../TbUcBackdataEntityRepository.java | 3 +- .../TbVivoBackdataEntityRepository.java | 3 +- .../adcallback/service/AbstractService.java | 290 ++++++++++++++++++ .../adcallback/service/BaseService.java | 9 + .../adcallback/service/BdBackDateService.java | 26 ++ .../service/DmpMonitorNumService.java | 22 ++ .../service/DmpMonitorV2Service.java | 30 ++ .../service/GdtBackDateService.java | 26 ++ .../service/JlV1BackDataService.java | 26 ++ .../service/JlV2BackDataService.java | 26 ++ .../adcallback/service/KsBackDateService.java | 26 ++ .../adcallback/service/UcBackDateService.java | 26 ++ .../service/VivoBackDateService.java | 26 ++ .../service/impl/BdBackDataServiceImpl.java | 72 +++++ .../impl/DmpMonitorNumServiceImpl.java | 2 + .../service/impl/DmpMonitorV2ServiceImpl.java | 214 +++++++++++++ .../service/impl/GdtBackDataServiceImpl.java | 73 +++++ .../service/impl/JlV1BackDataServiceImpl.java | 72 +++++ .../service/impl/JlV2BackDataServiceImpl.java | 72 +++++ .../service/impl/KsBackDataServiceImpl.java | 73 +++++ .../service/impl/UcBackDataServiceImpl.java | 73 +++++ .../service/impl/VivoBackDataServiceImpl.java | 73 +++++ src/main/resources/application-dev.yml | 3 + .../java/com/baiyee/adcallback/TagTest.java | 96 ++++-- .../baiyee/adcallback/TbEquipmentTest.java | 2 + 40 files changed, 1523 insertions(+), 47 deletions(-) create mode 100644 src/main/java/com/baiyee/adcallback/api/vo/QueryImeiVO.java create mode 100644 src/main/java/com/baiyee/adcallback/api/vo/QueryQuantityVO.java create mode 100644 src/main/java/com/baiyee/adcallback/config/JpaConfig.java create mode 100644 src/main/java/com/baiyee/adcallback/repository/BaseRepository.java create mode 100644 src/main/java/com/baiyee/adcallback/service/AbstractService.java create mode 100644 src/main/java/com/baiyee/adcallback/service/BaseService.java create mode 100644 src/main/java/com/baiyee/adcallback/service/BdBackDateService.java create mode 100644 src/main/java/com/baiyee/adcallback/service/DmpMonitorV2Service.java create mode 100644 src/main/java/com/baiyee/adcallback/service/GdtBackDateService.java create mode 100644 src/main/java/com/baiyee/adcallback/service/JlV1BackDataService.java create mode 100644 src/main/java/com/baiyee/adcallback/service/JlV2BackDataService.java create mode 100644 src/main/java/com/baiyee/adcallback/service/KsBackDateService.java create mode 100644 src/main/java/com/baiyee/adcallback/service/UcBackDateService.java create mode 100644 src/main/java/com/baiyee/adcallback/service/VivoBackDateService.java create mode 100644 src/main/java/com/baiyee/adcallback/service/impl/BdBackDataServiceImpl.java create mode 100644 src/main/java/com/baiyee/adcallback/service/impl/DmpMonitorV2ServiceImpl.java create mode 100644 src/main/java/com/baiyee/adcallback/service/impl/GdtBackDataServiceImpl.java create mode 100644 src/main/java/com/baiyee/adcallback/service/impl/JlV1BackDataServiceImpl.java create mode 100644 src/main/java/com/baiyee/adcallback/service/impl/JlV2BackDataServiceImpl.java create mode 100644 src/main/java/com/baiyee/adcallback/service/impl/KsBackDataServiceImpl.java create mode 100644 src/main/java/com/baiyee/adcallback/service/impl/UcBackDataServiceImpl.java create mode 100644 src/main/java/com/baiyee/adcallback/service/impl/VivoBackDataServiceImpl.java diff --git a/pom.xml b/pom.xml index 51c98a7..6554b8c 100644 --- a/pom.xml +++ b/pom.xml @@ -15,11 +15,16 @@ ad-callback 1.8 + 22.0 + 2.10.5 + 1.3.2 1.1.22 5.7.16 true + 4.3.1 5.1.1 8.0.13 + 1.1.3 true @@ -71,12 +76,13 @@ com.google.guava guava - 22.0 + ${guava.version} + net.lingala.zip4j zip4j - 1.3.2 + ${zip4j.version} @@ -92,6 +98,30 @@ org.codehaus.groovy groovy + + + com.querydsl + querydsl-jpa + + + + com.querydsl + querydsl-apt + provided + + + + com.querydsl + querydsl-sql + ${querydsl.version} + + + + joda-time + joda-time + ${joda.version} + + @@ -109,6 +139,22 @@ ${maven.test.failure.ignore} + + com.mysema.maven + apt-maven-plugin + 1.1.3 + + + + process + + + target/generated-sources/java + com.querydsl.apt.jpa.JPAAnnotationProcessor + + + + diff --git a/src/main/java/com/baiyee/adcallback/AdCallbackApplication.java b/src/main/java/com/baiyee/adcallback/AdCallbackApplication.java index 8a55ab8..8a14977 100644 --- a/src/main/java/com/baiyee/adcallback/AdCallbackApplication.java +++ b/src/main/java/com/baiyee/adcallback/AdCallbackApplication.java @@ -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) { diff --git a/src/main/java/com/baiyee/adcallback/api/constants/SqlConstant.java b/src/main/java/com/baiyee/adcallback/api/constants/SqlConstant.java index e476217..4f4ceb0 100644 --- a/src/main/java/com/baiyee/adcallback/api/constants/SqlConstant.java +++ b/src/main/java/com/baiyee/adcallback/api/constants/SqlConstant.java @@ -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 */ diff --git a/src/main/java/com/baiyee/adcallback/api/controller/DmpMonitorNumController.java b/src/main/java/com/baiyee/adcallback/api/controller/DmpMonitorNumController.java index 5bd5a24..ae36a11 100644 --- a/src/main/java/com/baiyee/adcallback/api/controller/DmpMonitorNumController.java +++ b/src/main/java/com/baiyee/adcallback/api/controller/DmpMonitorNumController.java @@ -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 getDmpNumByTags(@RequestBody DmpMonitorNumDto dmpMonitorNumDto) { - return new ResponseEntity<>(dmpMonitorNumService.queryNumByTags(dmpMonitorNumDto), HttpStatus.OK); + Map resultMap = dmpMonitorNumDto.getVersion() != null + && dmpMonitorNumDto.getVersion() == 1 ? dmpMonitorNumService.queryNumByTags(dmpMonitorNumDto) + : dmpMonitorV2Service.queryNumByTags(dmpMonitorNumDto); + return new ResponseEntity<>(resultMap, HttpStatus.OK); } @PostMapping(value = "/imeiLink") public ResponseEntity getDmpImeiLink(@RequestBody DmpMonitorNumDto dmpMonitorNumDto) { - return new ResponseEntity<>(dmpMonitorNumService.getDmpImeiLink(dmpMonitorNumDto), HttpStatus.OK); + Map> dmpImeiMap = dmpMonitorNumDto.getVersion() != null + && dmpMonitorNumDto.getVersion() == 1 ? dmpMonitorNumService.getDmpImeiLink(dmpMonitorNumDto) + : dmpMonitorV2Service.getDmpImeiLink(dmpMonitorNumDto); + + return new ResponseEntity<>(dmpImeiMap, HttpStatus.OK); } } diff --git a/src/main/java/com/baiyee/adcallback/api/dto/DmpMonitorJpaDto.java b/src/main/java/com/baiyee/adcallback/api/dto/DmpMonitorJpaDto.java index d4728ba..c3ebedf 100644 --- a/src/main/java/com/baiyee/adcallback/api/dto/DmpMonitorJpaDto.java +++ b/src/main/java/com/baiyee/adcallback/api/dto/DmpMonitorJpaDto.java @@ -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; + + + } diff --git a/src/main/java/com/baiyee/adcallback/api/dto/DmpMonitorNumDto.java b/src/main/java/com/baiyee/adcallback/api/dto/DmpMonitorNumDto.java index 15e33d8..f253830 100644 --- a/src/main/java/com/baiyee/adcallback/api/dto/DmpMonitorNumDto.java +++ b/src/main/java/com/baiyee/adcallback/api/dto/DmpMonitorNumDto.java @@ -20,4 +20,7 @@ public class DmpMonitorNumDto { private List tags; private String mail; + + + private Integer version; } diff --git a/src/main/java/com/baiyee/adcallback/api/vo/QueryImeiVO.java b/src/main/java/com/baiyee/adcallback/api/vo/QueryImeiVO.java new file mode 100644 index 0000000..1a2ff8c --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/api/vo/QueryImeiVO.java @@ -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; + + +} diff --git a/src/main/java/com/baiyee/adcallback/api/vo/QueryQuantityVO.java b/src/main/java/com/baiyee/adcallback/api/vo/QueryQuantityVO.java new file mode 100644 index 0000000..03ee438 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/api/vo/QueryQuantityVO.java @@ -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; + + +} diff --git a/src/main/java/com/baiyee/adcallback/config/JpaConfig.java b/src/main/java/com/baiyee/adcallback/config/JpaConfig.java new file mode 100644 index 0000000..28d6225 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/config/JpaConfig.java @@ -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); + } +} diff --git a/src/main/java/com/baiyee/adcallback/repository/BaseRepository.java b/src/main/java/com/baiyee/adcallback/repository/BaseRepository.java new file mode 100644 index 0000000..6974575 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/repository/BaseRepository.java @@ -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 + * @param + */ +@NoRepositoryBean +public interface BaseRepository extends JpaRepository, JpaSpecificationExecutor , QuerydslPredicateExecutor { + +} diff --git a/src/main/java/com/baiyee/adcallback/repository/TbBDNewBackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbBDNewBackdataEntityRepository.java index 3c73866..08df7aa 100644 --- a/src/main/java/com/baiyee/adcallback/repository/TbBDNewBackdataEntityRepository.java +++ b/src/main/java/com/baiyee/adcallback/repository/TbBDNewBackdataEntityRepository.java @@ -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 { +public interface TbBDNewBackdataEntityRepository extends BaseRepository { /** diff --git a/src/main/java/com/baiyee/adcallback/repository/TbGdtNewBackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbGdtNewBackdataEntityRepository.java index 7d82c7d..ea0925a 100644 --- a/src/main/java/com/baiyee/adcallback/repository/TbGdtNewBackdataEntityRepository.java +++ b/src/main/java/com/baiyee/adcallback/repository/TbGdtNewBackdataEntityRepository.java @@ -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 { +public interface TbGdtNewBackdataEntityRepository extends BaseRepository { /** diff --git a/src/main/java/com/baiyee/adcallback/repository/TbJLV1BackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbJLV1BackdataEntityRepository.java index 066c7b7..13e831a 100644 --- a/src/main/java/com/baiyee/adcallback/repository/TbJLV1BackdataEntityRepository.java +++ b/src/main/java/com/baiyee/adcallback/repository/TbJLV1BackdataEntityRepository.java @@ -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 { +public interface TbJLV1BackdataEntityRepository extends BaseRepository { @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 ?1 AND t.gmtCreate < ?2") List queryByDate(DateTime startDate, DateTime endDate); + /** + * 测试 + * + * @param s + * @return + */ List queryBytag(String s); } diff --git a/src/main/java/com/baiyee/adcallback/repository/TbJLV2BackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbJLV2BackdataEntityRepository.java index c567357..3720f2e 100644 --- a/src/main/java/com/baiyee/adcallback/repository/TbJLV2BackdataEntityRepository.java +++ b/src/main/java/com/baiyee/adcallback/repository/TbJLV2BackdataEntityRepository.java @@ -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 { +public interface TbJLV2BackdataEntityRepository extends BaseRepository { @Query(value = "SELECT imei FROM tb_jl_v2_backdata WHERE imei != '' AND imei != '__IMEI__'", nativeQuery = true) List queryAllImeis(); diff --git a/src/main/java/com/baiyee/adcallback/repository/TbKSNewBackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbKSNewBackdataEntityRepository.java index 48c4ceb..53acb10 100644 --- a/src/main/java/com/baiyee/adcallback/repository/TbKSNewBackdataEntityRepository.java +++ b/src/main/java/com/baiyee/adcallback/repository/TbKSNewBackdataEntityRepository.java @@ -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 { +public interface TbKSNewBackdataEntityRepository extends BaseRepository { /** diff --git a/src/main/java/com/baiyee/adcallback/repository/TbUcBackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbUcBackdataEntityRepository.java index 088c79f..8996cde 100644 --- a/src/main/java/com/baiyee/adcallback/repository/TbUcBackdataEntityRepository.java +++ b/src/main/java/com/baiyee/adcallback/repository/TbUcBackdataEntityRepository.java @@ -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 { +public interface TbUcBackdataEntityRepository extends BaseRepository { /** diff --git a/src/main/java/com/baiyee/adcallback/repository/TbVivoBackdataEntityRepository.java b/src/main/java/com/baiyee/adcallback/repository/TbVivoBackdataEntityRepository.java index ac19a1a..c9ded58 100644 --- a/src/main/java/com/baiyee/adcallback/repository/TbVivoBackdataEntityRepository.java +++ b/src/main/java/com/baiyee/adcallback/repository/TbVivoBackdataEntityRepository.java @@ -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 { +public interface TbVivoBackdataEntityRepository extends BaseRepository { /** diff --git a/src/main/java/com/baiyee/adcallback/service/AbstractService.java b/src/main/java/com/baiyee/adcallback/service/AbstractService.java new file mode 100644 index 0000000..e22e288 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/AbstractService.java @@ -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 implements BaseService { + + @Autowired + protected BaseRepository baseRepository; + + @PersistenceContext + protected EntityManager entityManager; + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public List findAll() { + return this.baseRepository.findAll(); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public List findAll(Sort sort) { + return this.baseRepository.findAll(sort); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public List findAllById(Iterable ids) { + return this.baseRepository.findAllById(ids); + } + + @Override + @Transactional(rollbackFor = Throwable.class) + public List saveAll(Iterable entities) { + return this.baseRepository.saveAll(entities); + } + + @Override + @Transactional(rollbackFor = Throwable.class) + public void flush() { + this.baseRepository.flush(); + } + + @Transactional(rollbackFor = Throwable.class) + public S saveAndFlush(S entity) { + return this.baseRepository.saveAndFlush(entity); + } + + @Override + @Transactional(rollbackFor = Throwable.class) + @Deprecated + public void deleteInBatch(Iterable 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 List findAll(Example example) { + return this.baseRepository.findAll(example); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public List findAll(Example example, Sort sort) { + return this.baseRepository.findAll(example, sort); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public Page findAll(Pageable pageable) { + return this.baseRepository.findAll(pageable); + } + + @Override + @Transactional(rollbackFor = Throwable.class) + public S save(S entity) { + return this.baseRepository.save(entity); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public Optional 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 entities) { + this.baseRepository.deleteAll(entities); + } + + @Override + @Transactional(rollbackFor = Throwable.class) + public void deleteAll() { + this.baseRepository.deleteAll(); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public Optional findOne(Example example) { + return this.baseRepository.findOne(example); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public Page findAll(Example example, Pageable pageable) { + return this.baseRepository.findAll(example, pageable); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public long count(Example example) { + return this.baseRepository.count(example); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public boolean exists(Example example) { + return this.baseRepository.exists(example); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public Optional findOne(Specification spec) { + return this.baseRepository.findOne(spec); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public List findAll(Specification spec) { + return this.baseRepository.findAll(spec); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public Page findAll(Specification spec, Pageable pageable) { + return this.baseRepository.findAll(spec, pageable); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public List findAll(Specification spec, Sort sort) { + return this.baseRepository.findAll(spec, sort); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public long count(Specification spec) { + return this.baseRepository.count(spec); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public Optional findOne(Predicate predicate) { + return this.baseRepository.findOne(predicate); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public Iterable findAll(Predicate predicate) { + return this.baseRepository.findAll(predicate); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public Iterable findAll(Predicate predicate, Sort sort) { + return this.baseRepository.findAll(predicate, sort); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public Iterable findAll(Predicate predicate, OrderSpecifier... orders) { + return this.baseRepository.findAll(predicate, orders); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public Iterable findAll(OrderSpecifier... orders) { + return this.baseRepository.findAll(orders); + } + + @Override + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public Page 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 newJPAQuery() { + SQLTemplates templates = new DerbyTemplates(); + return new JPASQLQuery<>(entityManager, templates); + } + + @SuppressWarnings({ "unchecked", "hiding" }) + protected T repository() { + return (T) this.baseRepository; + } + + + @Transactional(rollbackFor = Throwable.class) + public R apply(Function function) { + return function.apply(this.newQuery()); + } + + @Transactional(rollbackFor = Throwable.class) + public R applyJPA(Function, R> function) { + return function.apply(this.newJPAQuery()); + } + + @Transactional(readOnly = true, rollbackFor = Throwable.class) + public R applyReadOnly(Function function) { + return function.apply(this.newQuery()); + } +} diff --git a/src/main/java/com/baiyee/adcallback/service/BaseService.java b/src/main/java/com/baiyee/adcallback/service/BaseService.java new file mode 100644 index 0000000..1311b79 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/BaseService.java @@ -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 extends JpaRepository, JpaSpecificationExecutor , QuerydslPredicateExecutor { + +} diff --git a/src/main/java/com/baiyee/adcallback/service/BdBackDateService.java b/src/main/java/com/baiyee/adcallback/service/BdBackDateService.java new file mode 100644 index 0000000..f7780ca --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/BdBackDateService.java @@ -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 queryByTagAndTimeAndFlag(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List tagList, Integer flag); +} diff --git a/src/main/java/com/baiyee/adcallback/service/DmpMonitorNumService.java b/src/main/java/com/baiyee/adcallback/service/DmpMonitorNumService.java index d3d7430..33197f2 100644 --- a/src/main/java/com/baiyee/adcallback/service/DmpMonitorNumService.java +++ b/src/main/java/com/baiyee/adcallback/service/DmpMonitorNumService.java @@ -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 queryNumByTags(DmpMonitorNumDto dmpMonitorNumDto); + /** + * 生成链接 + * @date 2023-6-21 + * @change Enzo + * methods are out of date + * @param dmpMonitorNumDto + * @return + */ + @Deprecated Map> getDmpImeiLink(DmpMonitorNumDto dmpMonitorNumDto); } diff --git a/src/main/java/com/baiyee/adcallback/service/DmpMonitorV2Service.java b/src/main/java/com/baiyee/adcallback/service/DmpMonitorV2Service.java new file mode 100644 index 0000000..5e7598a --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/DmpMonitorV2Service.java @@ -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 queryNumByTags(DmpMonitorNumDto dmpMonitorNumDto); + + /** + * 生成链接 + * @param dmpMonitorNumDto + * @return + */ + Map> getDmpImeiLink(DmpMonitorNumDto dmpMonitorNumDto); +} diff --git a/src/main/java/com/baiyee/adcallback/service/GdtBackDateService.java b/src/main/java/com/baiyee/adcallback/service/GdtBackDateService.java new file mode 100644 index 0000000..41bc10e --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/GdtBackDateService.java @@ -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 queryByTagAndTimeAndFlag(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List tagList, Integer flag); +} diff --git a/src/main/java/com/baiyee/adcallback/service/JlV1BackDataService.java b/src/main/java/com/baiyee/adcallback/service/JlV1BackDataService.java new file mode 100644 index 0000000..b73a47b --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/JlV1BackDataService.java @@ -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 queryByTagAndTimeAndFlag(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List tagList, Integer flag); +} diff --git a/src/main/java/com/baiyee/adcallback/service/JlV2BackDataService.java b/src/main/java/com/baiyee/adcallback/service/JlV2BackDataService.java new file mode 100644 index 0000000..c1d5a05 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/JlV2BackDataService.java @@ -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 queryByTagAndTimeAndFlag(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List tagList, Integer flag); +} diff --git a/src/main/java/com/baiyee/adcallback/service/KsBackDateService.java b/src/main/java/com/baiyee/adcallback/service/KsBackDateService.java new file mode 100644 index 0000000..2a8684e --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/KsBackDateService.java @@ -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 queryByTagAndTimeAndFlag(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List tagList, Integer flag); +} diff --git a/src/main/java/com/baiyee/adcallback/service/UcBackDateService.java b/src/main/java/com/baiyee/adcallback/service/UcBackDateService.java new file mode 100644 index 0000000..d12a421 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/UcBackDateService.java @@ -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 queryByTagAndTimeAndFlag(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List tagList, Integer flag); +} diff --git a/src/main/java/com/baiyee/adcallback/service/VivoBackDateService.java b/src/main/java/com/baiyee/adcallback/service/VivoBackDateService.java new file mode 100644 index 0000000..dc306cf --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/VivoBackDateService.java @@ -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 queryByTagAndTimeAndFlag(String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List tagList, Integer flag); +} diff --git a/src/main/java/com/baiyee/adcallback/service/impl/BdBackDataServiceImpl.java b/src/main/java/com/baiyee/adcallback/service/impl/BdBackDataServiceImpl.java new file mode 100644 index 0000000..05cda36 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/impl/BdBackDataServiceImpl.java @@ -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 implements BdBackDateService { + @Override + public List queryByTagAndTimeAndFlag + (String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List 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 t3Tag = Expressions.template(String.class, "t3.tag"); + SimpleTemplate t3Imei = Expressions.template(String.class, "t3.imei"); + SimpleTemplate t3Date = Expressions.template(Date.class, "t3.gmtCreate"); + // 封装子查询 + SubQueryExpression 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 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 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); + }); + } +} diff --git a/src/main/java/com/baiyee/adcallback/service/impl/DmpMonitorNumServiceImpl.java b/src/main/java/com/baiyee/adcallback/service/impl/DmpMonitorNumServiceImpl.java index 65c2f37..afd0530 100644 --- a/src/main/java/com/baiyee/adcallback/service/impl/DmpMonitorNumServiceImpl.java +++ b/src/main/java/com/baiyee/adcallback/service/impl/DmpMonitorNumServiceImpl.java @@ -49,6 +49,7 @@ public class DmpMonitorNumServiceImpl implements DmpMonitorNumService { @Override + @Deprecated public Map queryNumByTags(DmpMonitorNumDto dmpMonitorNumDto) { HashMap map = new HashMap<>(); List mapData = getMapData(dmpMonitorNumDto, 1); @@ -67,6 +68,7 @@ public class DmpMonitorNumServiceImpl implements DmpMonitorNumService { } @Override + @Deprecated public Map> getDmpImeiLink(DmpMonitorNumDto dmpMonitorNumDto) { List mapData = getMapData(dmpMonitorNumDto, 2); HashMap> mapGroupByTag = new HashMap<>(); diff --git a/src/main/java/com/baiyee/adcallback/service/impl/DmpMonitorV2ServiceImpl.java b/src/main/java/com/baiyee/adcallback/service/impl/DmpMonitorV2ServiceImpl.java new file mode 100644 index 0000000..1b875fb --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/impl/DmpMonitorV2ServiceImpl.java @@ -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 queryNumByTags(DmpMonitorNumDto dmpMonitorNumDto) { + HashMap map = new HashMap<>(); + List mapData = getMapData(dmpMonitorNumDto, 1); + HashMap> 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> groupByTime = getGroupByTime + (dmpMonitorNumDto.getStartTime(), dmpMonitorNumDto.getEndTime(), numMapGroupByTag.get(key)); + map.put(key, groupByTime); + } + return map; + } + + @Override + public Map> getDmpImeiLink(DmpMonitorNumDto dmpMonitorNumDto) { + List mapData = getMapData(dmpMonitorNumDto, 2); + return Maps.newHashMap(mapData.stream().collect(Collectors.groupingBy(DmpMonitorJpaDto::getTag, Collectors.toList()))); + } + + private List getMapData(DmpMonitorNumDto dmpMonitorNumDto, Integer flag) { + Map> talbeMap = Maps.newHashMap(); + List 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 tagList = + talbeMap.containsKey(num) ? + talbeMap.get(num) : Lists.newArrayList(); + tagList.add(tag); + talbeMap.put(num, tagList); + break; + } + } + } + for (Map.Entry> entry : talbeMap.entrySet()) { + Integer index = entry.getKey(); + List 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> getGroupByTime(Date beginTime, Date endTime, List dto) { + List> list = new ArrayList<>(); + int betweenDay = (int) DateUtil.between(beginTime, endTime, DateUnit.DAY); + for (int i = 0; i <= betweenDay; i++) { + HashMap map = new HashMap<>(); + String dateTime = DateUtil.format(DateUtil.offsetDay(beginTime, i), "yyyy-MM-dd"); + if (!dto.isEmpty()) { + List 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 getDmpMonitorJpaDto(List list) { + List tradeList = new ArrayList<>(); + + Map> stringCollectionMap = + list.stream().collect(Collectors.groupingBy(DmpMonitorJpaDto::getTag)); + + if (CollUtil.isNotEmpty(stringCollectionMap)) { + List newDataList = Lists.newArrayList(); + List saveDataList = Lists.newArrayList(); + for (Map.Entry> stringCollectionEntry : stringCollectionMap.entrySet()) { + String tagStr = stringCollectionEntry.getKey(); + // 去除重复数据 + Set dmpMonitorJpaDtoSet = Sets.newHashSet(stringCollectionEntry.getValue()); + // 转换set + Set rawDataSet = Convert.toSet(DeliveryStatisticDTO.class, dmpMonitorJpaDtoSet); + // 查询数据 + List tagLists = Convert.toList(DeliveryStatisticDTO.class, tbDeliveryStatisticEntityRepository.findByTag(tagStr, 0)); + + Set newDataSet = Sets.newHashSet(tagLists); + // 差集去除数据 + List differentData = Lists.newArrayList(Sets.difference(rawDataSet, newDataSet)); + // 保存将要插入数据 + saveDataList.addAll(differentData); + List 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 deliveryStatisticEntityList = Convert.toList(TbDeliveryStatisticEntity.class, saveDataList); + // 批量保存 + tbDeliveryStatisticEntityRepository.saveAll(deliveryStatisticEntityList); + }); + } + log.error("================ the new datalist size as {} ================", newDataList.size()); + return newDataList; + } + return tradeList; + } +} diff --git a/src/main/java/com/baiyee/adcallback/service/impl/GdtBackDataServiceImpl.java b/src/main/java/com/baiyee/adcallback/service/impl/GdtBackDataServiceImpl.java new file mode 100644 index 0000000..f1c58a6 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/impl/GdtBackDataServiceImpl.java @@ -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 implements GdtBackDateService { + + @Override + public List queryByTagAndTimeAndFlag + (String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List 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 t3Tag = Expressions.template(String.class, "t3.tag"); + SimpleTemplate t3Imei = Expressions.template(String.class, "t3.imei"); + SimpleTemplate t3Date = Expressions.template(Date.class, "t3.gmtCreate"); + // 封装子查询 + SubQueryExpression 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 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 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); + }); + } +} diff --git a/src/main/java/com/baiyee/adcallback/service/impl/JlV1BackDataServiceImpl.java b/src/main/java/com/baiyee/adcallback/service/impl/JlV1BackDataServiceImpl.java new file mode 100644 index 0000000..fa94daf --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/impl/JlV1BackDataServiceImpl.java @@ -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 implements JlV1BackDataService { + + @Override + public List queryByTagAndTimeAndFlag + (String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List 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 t3Tag = Expressions.template(String.class, "t3.tag"); + SimpleTemplate t3Imei = Expressions.template(String.class, "t3.imei"); + SimpleTemplate t3Date = Expressions.template(Date.class, "t3.gmtCreate"); + // 封装子查询 + SubQueryExpression 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 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 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); + }); + } +} diff --git a/src/main/java/com/baiyee/adcallback/service/impl/JlV2BackDataServiceImpl.java b/src/main/java/com/baiyee/adcallback/service/impl/JlV2BackDataServiceImpl.java new file mode 100644 index 0000000..aed3168 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/impl/JlV2BackDataServiceImpl.java @@ -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 implements JlV2BackDataService { + + @Override + public List queryByTagAndTimeAndFlag + (String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List 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 t3Tag = Expressions.template(String.class, "t3.tag"); + SimpleTemplate t3Imei = Expressions.template(String.class, "t3.imei"); + SimpleTemplate t3Date = Expressions.template(Date.class, "t3.gmtCreate"); + // 封装子查询 + SubQueryExpression 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 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 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); + }); + } +} diff --git a/src/main/java/com/baiyee/adcallback/service/impl/KsBackDataServiceImpl.java b/src/main/java/com/baiyee/adcallback/service/impl/KsBackDataServiceImpl.java new file mode 100644 index 0000000..5034f8a --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/impl/KsBackDataServiceImpl.java @@ -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 implements KsBackDateService { + + @Override + public List queryByTagAndTimeAndFlag + (String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List 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 t3Tag = Expressions.template(String.class, "t3.tag"); + SimpleTemplate t3Imei = Expressions.template(String.class, "t3.imei"); + SimpleTemplate t3Date = Expressions.template(Date.class, "t3.gmtCreate"); + // 封装子查询 + SubQueryExpression 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 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 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); + }); + } +} diff --git a/src/main/java/com/baiyee/adcallback/service/impl/UcBackDataServiceImpl.java b/src/main/java/com/baiyee/adcallback/service/impl/UcBackDataServiceImpl.java new file mode 100644 index 0000000..6fff9e6 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/impl/UcBackDataServiceImpl.java @@ -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 implements UcBackDateService { + + @Override + public List queryByTagAndTimeAndFlag + (String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List 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 t3Tag = Expressions.template(String.class, "t3.tag"); + SimpleTemplate t3Imei = Expressions.template(String.class, "t3.imei"); + SimpleTemplate t3Date = Expressions.template(Date.class, "t3.gmtCreate"); + // 封装子查询 + SubQueryExpression 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 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 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); + }); + } +} diff --git a/src/main/java/com/baiyee/adcallback/service/impl/VivoBackDataServiceImpl.java b/src/main/java/com/baiyee/adcallback/service/impl/VivoBackDataServiceImpl.java new file mode 100644 index 0000000..79cd069 --- /dev/null +++ b/src/main/java/com/baiyee/adcallback/service/impl/VivoBackDataServiceImpl.java @@ -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 implements VivoBackDateService { + + @Override + public List queryByTagAndTimeAndFlag + (String toUpperCase, String empty, String imeiTag, Date startTime, Date endTime, List 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 t3Tag = Expressions.template(String.class, "t3.tag"); + SimpleTemplate t3Imei = Expressions.template(String.class, "t3.imei"); + SimpleTemplate t3Date = Expressions.template(Date.class, "t3.gmtCreate"); + // 封装子查询 + SubQueryExpression 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 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 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); + }); + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 7408ec5..b8c15ef 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -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 diff --git a/src/test/java/com/baiyee/adcallback/TagTest.java b/src/test/java/com/baiyee/adcallback/TagTest.java index ebc96b1..527c5b4 100644 --- a/src/test/java/com/baiyee/adcallback/TagTest.java +++ b/src/test/java/com/baiyee/adcallback/TagTest.java @@ -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 tbJLBackDataV1Entities = jlv1BackdataEntityRepository.queryBytag("2r310nar8x59"); - ArrayList strings = Lists.newArrayList("arc1iiemw9ti","r55t3fp2dio5"); + ArrayList strings = Lists.newArrayList("arc1iiemw9ti", "r55t3fp2dio5"); List 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 strings = Lists.newArrayList("jl-hblst-0616-nhdo"); + SQLTemplates templates = new DerbyTemplates(); + + JPASQLQuery jpasqlQuery = new JPASQLQuery(entityManager, templates); + StringPath t3 = Expressions.stringPath("t3"); + QTbJLBackDataV1Entity tbJLBackDataV1Entity = QTbJLBackDataV1Entity.tbJLBackDataV1Entity; + SimpleTemplate t3Imei = Expressions.template(String.class, "t3.imei"); + SimpleTemplate t3Date = Expressions.template(Date.class, "t3.gmtCreate"); + + StringTemplate dateExpr = Expressions.stringTemplate("DATE_FORMAT({0},'%Y-%m-%d')", tbJLBackDataV1Entity.gmtCreate); + SubQueryExpression 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 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 strings = Lists.newArrayList("jl-hblst-0616-nhdo"); + SQLTemplates templates = new DerbyTemplates(); + + JPASQLQuery jpasqlQuery = new JPASQLQuery(entityManager, templates); + QTbJLBackDataV1Entity tbJLBackDataV1Entity = QTbJLBackDataV1Entity.tbJLBackDataV1Entity; + + StringTemplate dateExpr = Expressions.stringTemplate("DATE_FORMAT(max({0}),'%Y-%m-%d')", tbJLBackDataV1Entity.gmtCreate); + + + List 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 queryImeiVOS = Sets.newHashSet(num); + System.out.println(num); - ArrayList objects = Lists.newArrayList(); - ArrayList a = Lists.newArrayList(); - List 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(); } diff --git a/src/test/java/com/baiyee/adcallback/TbEquipmentTest.java b/src/test/java/com/baiyee/adcallback/TbEquipmentTest.java index 6d33950..42d9e58 100644 --- a/src/test/java/com/baiyee/adcallback/TbEquipmentTest.java +++ b/src/test/java/com/baiyee/adcallback/TbEquipmentTest.java @@ -69,4 +69,6 @@ public class TbEquipmentTest { System.out.println(s); } + + }