From e35eb6961d08565c5540ad9b4587e4482dd27b6c Mon Sep 17 00:00:00 2001 From: paulGao Date: Wed, 1 Sep 2021 09:15:35 +0800 Subject: [PATCH 1/4] fix elasticseach config injection to @Autowried --- .../cn/lili/elasticsearch/config/ElasticsearchConfig.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchConfig.java b/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchConfig.java index 0c78f88a..9e4511be 100644 --- a/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchConfig.java +++ b/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchConfig.java @@ -31,10 +31,10 @@ import java.util.List; **/ @Slf4j @Configuration -@RequiredArgsConstructor(onConstructor_ = @Autowired) public class ElasticsearchConfig extends AbstractElasticsearchConfiguration { - private final ElasticsearchProperties elasticsearchProperties; + @Autowired + private ElasticsearchProperties elasticsearchProperties; private RestHighLevelClient client; From 2e804782032967f311e8c37cc07b274baad31969 Mon Sep 17 00:00:00 2001 From: paulGao Date: Wed, 1 Sep 2021 19:03:36 +0800 Subject: [PATCH 2/4] upgrade spring boot 2.3 to 2.4 --- .../test/java/cn/lili/buyer/test/cart/CartTest.java | 6 +++--- .../test/java/cn/lili/buyer/test/cart/FileTest.java | 6 +++--- .../cn/lili/buyer/test/cart/MemberCouponTest.java | 11 ++++++----- .../test/java/cn/lili/buyer/test/cart/CartTest.java | 6 +++--- .../cn/lili/buyer/test/cart/MemberStatisticsTest.java | 6 +++--- .../test/java/cn/lili/buyer/test/cart/OnlineTest.java | 6 +++--- framework/pom.xml | 11 +++++++++++ .../cache/limit/interceptor/LimitInterceptor.java | 4 ++-- .../src/main/java/cn/lili/cache/script/LuaScript.java | 6 +++--- .../java/cn/lili/common/security/SecurityBean.java | 9 ++++++--- .../elasticsearch/config/ElasticsearchConfig.java | 1 - .../elasticsearch/config/ElasticsearchProperties.java | 2 +- .../java/cn/lili/test/RedisLimiterHelperTest.java | 6 +++--- .../src/test/java/cn/lili/test/script/ScriptTest.java | 6 +++--- .../test/java/cn/lili/test/CacheTest/CacheTest.java | 6 +++--- .../test/java/cn/lili/test/elasticsearch/EsTest.java | 11 ++++++----- .../java/cn/lili/test/order/OrderServiceTest.java | 6 +++--- .../test/java/cn/lili/test/promotion/CouponTest.java | 6 +++--- .../java/cn/lili/test/promotion/FullDiscountTest.java | 6 +++--- .../cn/lili/test/promotion/PromotionPriceTest.java | 6 +++--- .../test/java/cn/lili/test/promotion/SeckillTest.java | 6 +++--- .../cn/lili/test/rocketmq/MsgExtRocketMqTest.java | 6 +++--- pom.xml | 4 ++-- 23 files changed, 79 insertions(+), 64 deletions(-) diff --git a/buyer-api/src/test/java/cn/lili/buyer/test/cart/CartTest.java b/buyer-api/src/test/java/cn/lili/buyer/test/cart/CartTest.java index 59f9a435..67ef35d2 100644 --- a/buyer-api/src/test/java/cn/lili/buyer/test/cart/CartTest.java +++ b/buyer-api/src/test/java/cn/lili/buyer/test/cart/CartTest.java @@ -10,10 +10,10 @@ import cn.lili.modules.order.cart.service.CartService; import cn.lili.modules.payment.service.PaymentService; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.List; @@ -21,7 +21,7 @@ import java.util.List; * @author paulG * @since 2020/11/14 **/ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest class CartTest { diff --git a/buyer-api/src/test/java/cn/lili/buyer/test/cart/FileTest.java b/buyer-api/src/test/java/cn/lili/buyer/test/cart/FileTest.java index 4003ad5a..1ccf3cff 100644 --- a/buyer-api/src/test/java/cn/lili/buyer/test/cart/FileTest.java +++ b/buyer-api/src/test/java/cn/lili/buyer/test/cart/FileTest.java @@ -7,10 +7,10 @@ import cn.lili.modules.goods.service.BrandService; import com.xkcoding.http.util.StringUtil; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; import java.io.*; import java.net.URL; @@ -21,7 +21,7 @@ import java.util.List; * @since 2020/11/14 **/ @Slf4j -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest class FileTest { diff --git a/buyer-api/src/test/java/cn/lili/buyer/test/cart/MemberCouponTest.java b/buyer-api/src/test/java/cn/lili/buyer/test/cart/MemberCouponTest.java index 4aba260e..cd72ff65 100644 --- a/buyer-api/src/test/java/cn/lili/buyer/test/cart/MemberCouponTest.java +++ b/buyer-api/src/test/java/cn/lili/buyer/test/cart/MemberCouponTest.java @@ -1,18 +1,19 @@ package cn.lili.buyer.test.cart; import cn.lili.modules.promotion.service.MemberCouponService; -import org.junit.Assert; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author paulG * @since 2020/11/27 **/ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest class MemberCouponTest { @@ -22,7 +23,7 @@ class MemberCouponTest { @Test void receiveCoupon() { memberCouponService.receiveCoupon("1333318596239843328", "1326834797335306240", "1"); - Assert.assertTrue(true); + assertTrue(true); } diff --git a/consumer/src/test/java/cn/lili/buyer/test/cart/CartTest.java b/consumer/src/test/java/cn/lili/buyer/test/cart/CartTest.java index 97631024..22b87b83 100644 --- a/consumer/src/test/java/cn/lili/buyer/test/cart/CartTest.java +++ b/consumer/src/test/java/cn/lili/buyer/test/cart/CartTest.java @@ -5,15 +5,15 @@ import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; import cn.lili.modules.payment.kit.enums.PaymentMethodEnum; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; /** * 订单库存扣减 */ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest class CartTest { diff --git a/consumer/src/test/java/cn/lili/buyer/test/cart/MemberStatisticsTest.java b/consumer/src/test/java/cn/lili/buyer/test/cart/MemberStatisticsTest.java index de7e3171..bc882363 100644 --- a/consumer/src/test/java/cn/lili/buyer/test/cart/MemberStatisticsTest.java +++ b/consumer/src/test/java/cn/lili/buyer/test/cart/MemberStatisticsTest.java @@ -2,13 +2,13 @@ package cn.lili.buyer.test.cart; import cn.lili.timetask.handler.impl.statistics.MemberStatisticsExecute; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest class MemberStatisticsTest { diff --git a/consumer/src/test/java/cn/lili/buyer/test/cart/OnlineTest.java b/consumer/src/test/java/cn/lili/buyer/test/cart/OnlineTest.java index 741f002a..e67101d2 100644 --- a/consumer/src/test/java/cn/lili/buyer/test/cart/OnlineTest.java +++ b/consumer/src/test/java/cn/lili/buyer/test/cart/OnlineTest.java @@ -3,10 +3,10 @@ package cn.lili.buyer.test.cart; import cn.lili.common.utils.DateUtil; import cn.lili.timetask.handler.impl.statistics.OnlineMemberStatistics; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.Calendar; import java.util.Random; @@ -14,7 +14,7 @@ import java.util.Random; /** * 订单库存扣减 */ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest class OnlineTest { diff --git a/framework/pom.xml b/framework/pom.xml index cc6a99fc..787efb9e 100644 --- a/framework/pom.xml +++ b/framework/pom.xml @@ -15,6 +15,17 @@ jar + + org.junit.vintage + junit-vintage-engine + test + + + org.hamcrest + hamcrest-core + + + org.springframework.boot spring-boot-starter-web diff --git a/framework/src/main/java/cn/lili/cache/limit/interceptor/LimitInterceptor.java b/framework/src/main/java/cn/lili/cache/limit/interceptor/LimitInterceptor.java index 465cfc08..6b840fbb 100644 --- a/framework/src/main/java/cn/lili/cache/limit/interceptor/LimitInterceptor.java +++ b/framework/src/main/java/cn/lili/cache/limit/interceptor/LimitInterceptor.java @@ -30,7 +30,7 @@ import java.io.Serializable; public class LimitInterceptor { private RedisTemplate redisTemplate; - private DefaultRedisScript limitScript; + private DefaultRedisScript limitScript; @Autowired public void setRedisTemplate(RedisTemplate redisTemplate) { @@ -38,7 +38,7 @@ public class LimitInterceptor { } @Autowired - public void setLimitScript(DefaultRedisScript limitScript) { + public void setLimitScript(DefaultRedisScript limitScript) { this.limitScript = limitScript; } diff --git a/framework/src/main/java/cn/lili/cache/script/LuaScript.java b/framework/src/main/java/cn/lili/cache/script/LuaScript.java index 18e2d77b..1df7e524 100644 --- a/framework/src/main/java/cn/lili/cache/script/LuaScript.java +++ b/framework/src/main/java/cn/lili/cache/script/LuaScript.java @@ -33,10 +33,10 @@ public class LuaScript { * @return */ @Bean - public DefaultRedisScript limitScript() { - DefaultRedisScript redisScript = new DefaultRedisScript<>(); + public DefaultRedisScript limitScript() { + DefaultRedisScript redisScript = new DefaultRedisScript<>(); redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("script/limit.lua"))); - redisScript.setResultType(Number.class); + redisScript.setResultType(Long.class); return redisScript; } } diff --git a/framework/src/main/java/cn/lili/common/security/SecurityBean.java b/framework/src/main/java/cn/lili/common/security/SecurityBean.java index 5d186160..7f660595 100644 --- a/framework/src/main/java/cn/lili/common/security/SecurityBean.java +++ b/framework/src/main/java/cn/lili/common/security/SecurityBean.java @@ -7,6 +7,9 @@ import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import java.util.Arrays; +import java.util.Collections; + /** * SecurityBean * @@ -19,8 +22,7 @@ public class SecurityBean { @Bean public BCryptPasswordEncoder passwordEncoder() { - BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); - return bCryptPasswordEncoder; + return new BCryptPasswordEncoder(); } /** @@ -33,7 +35,8 @@ public class SecurityBean { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); - config.addAllowedOrigin(CorsConfiguration.ALL); +// config.addAllowedOrigin(CorsConfiguration.ALL); + config.setAllowedOriginPatterns(Collections.singletonList(CorsConfiguration.ALL)); config.addAllowedHeader(CorsConfiguration.ALL); config.addAllowedMethod(CorsConfiguration.ALL); source.registerCorsConfiguration("/**", config); diff --git a/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchConfig.java b/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchConfig.java index 555f0ae7..f95b749d 100644 --- a/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchConfig.java +++ b/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchConfig.java @@ -1,7 +1,6 @@ package cn.lili.elasticsearch.config; import cn.hutool.core.convert.Convert; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; diff --git a/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchProperties.java b/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchProperties.java index b4dfc18c..e6fdbda2 100644 --- a/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchProperties.java +++ b/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchProperties.java @@ -17,7 +17,7 @@ import java.util.List; **/ @Data @Builder -@Component +@Component("elasticsearchProperties") @NoArgsConstructor @AllArgsConstructor @ConfigurationProperties(prefix = "lili.data.elasticsearch") diff --git a/framework/src/test/java/cn/lili/test/RedisLimiterHelperTest.java b/framework/src/test/java/cn/lili/test/RedisLimiterHelperTest.java index 1ac8a419..b329c27c 100644 --- a/framework/src/test/java/cn/lili/test/RedisLimiterHelperTest.java +++ b/framework/src/test/java/cn/lili/test/RedisLimiterHelperTest.java @@ -4,10 +4,10 @@ import cn.lili.modules.order.order.entity.dos.OrderItem; import cn.lili.modules.order.order.service.OrderItemService; import cn.lili.modules.statistics.serviceimpl.OrderStatisticsDataServiceImpl; import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.ArrayList; import java.util.List; @@ -20,7 +20,7 @@ import java.util.List; * @since 2020-06-13 12:17 */ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest public class RedisLimiterHelperTest { diff --git a/framework/src/test/java/cn/lili/test/script/ScriptTest.java b/framework/src/test/java/cn/lili/test/script/ScriptTest.java index d2312a02..9c27cd7e 100644 --- a/framework/src/test/java/cn/lili/test/script/ScriptTest.java +++ b/framework/src/test/java/cn/lili/test/script/ScriptTest.java @@ -1,7 +1,7 @@ package cn.lili.test.script; import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -12,7 +12,7 @@ import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.scripting.support.ResourceScriptSource; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; @@ -27,7 +27,7 @@ import java.util.List; * @since * 2020-02-22 20:26 */ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest @Transactional(rollbackFor = Exception.class) @Rollback() diff --git a/manager-api/src/test/java/cn/lili/test/CacheTest/CacheTest.java b/manager-api/src/test/java/cn/lili/test/CacheTest/CacheTest.java index 3a4385f5..a048a3be 100644 --- a/manager-api/src/test/java/cn/lili/test/CacheTest/CacheTest.java +++ b/manager-api/src/test/java/cn/lili/test/CacheTest/CacheTest.java @@ -5,11 +5,11 @@ import cn.lili.cache.CachePrefix; import cn.lili.modules.statistics.util.StatisticsSuffix; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.DefaultTypedTuple; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.Date; import java.util.Random; @@ -21,7 +21,7 @@ import java.util.Set; * @since v7.0 * 2021/1/15 16:25 */ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest class CacheTest { diff --git a/manager-api/src/test/java/cn/lili/test/elasticsearch/EsTest.java b/manager-api/src/test/java/cn/lili/test/elasticsearch/EsTest.java index e58a180c..e683f2ae 100644 --- a/manager-api/src/test/java/cn/lili/test/elasticsearch/EsTest.java +++ b/manager-api/src/test/java/cn/lili/test/elasticsearch/EsTest.java @@ -17,12 +17,13 @@ import cn.lili.modules.search.service.EsGoodsSearchService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.Page; +import org.springframework.data.elasticsearch.core.SearchPage; import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.ArrayList; import java.util.List; @@ -32,7 +33,7 @@ import java.util.Map; * @author paulG * @since 2020/10/14 **/ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest class EsTest { @@ -59,7 +60,7 @@ class EsTest { void searchGoods() { EsGoodsSearchDTO goodsSearchDTO = new EsGoodsSearchDTO(); // goodsSearchDTO.setKeyword("黄"); - goodsSearchDTO.setProp("IETF_HTTP/3"); +// goodsSearchDTO.setProp("IETF_HTTP/3"); // goodsSearchDTO.setPrice("100_20000"); // goodsSearchDTO.setStoreCatId(1L); // goodsSearchDTO.setBrandId(123L); @@ -70,7 +71,7 @@ class EsTest { pageVo.setPageSize(100); pageVo.setOrder("desc"); pageVo.setNotConvert(true); - Page esGoodsIndices = goodsSearchService.searchGoods(goodsSearchDTO, pageVo); + SearchPage esGoodsIndices = goodsSearchService.searchGoods(goodsSearchDTO, pageVo); Assertions.assertNotNull(esGoodsIndices); esGoodsIndices.getContent().forEach(System.out::println); // esGoodsIndices.getContent().forEach(i -> { diff --git a/manager-api/src/test/java/cn/lili/test/order/OrderServiceTest.java b/manager-api/src/test/java/cn/lili/test/order/OrderServiceTest.java index 70d25747..98521a24 100644 --- a/manager-api/src/test/java/cn/lili/test/order/OrderServiceTest.java +++ b/manager-api/src/test/java/cn/lili/test/order/OrderServiceTest.java @@ -2,16 +2,16 @@ package cn.lili.test.order; import cn.lili.modules.order.order.service.OrderService; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; /** * @author paulG * @since 2020/12/1 **/ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest class OrderServiceTest { diff --git a/manager-api/src/test/java/cn/lili/test/promotion/CouponTest.java b/manager-api/src/test/java/cn/lili/test/promotion/CouponTest.java index 3964d5b5..5f40fd62 100644 --- a/manager-api/src/test/java/cn/lili/test/promotion/CouponTest.java +++ b/manager-api/src/test/java/cn/lili/test/promotion/CouponTest.java @@ -15,10 +15,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.ArrayList; import java.util.List; @@ -27,7 +27,7 @@ import java.util.List; * @author paulG * @since 2020/10/29 **/ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest class CouponTest { diff --git a/manager-api/src/test/java/cn/lili/test/promotion/FullDiscountTest.java b/manager-api/src/test/java/cn/lili/test/promotion/FullDiscountTest.java index aed2c386..174f0a5b 100644 --- a/manager-api/src/test/java/cn/lili/test/promotion/FullDiscountTest.java +++ b/manager-api/src/test/java/cn/lili/test/promotion/FullDiscountTest.java @@ -15,10 +15,10 @@ import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import com.baomidou.mybatisplus.core.metadata.IPage; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.ArrayList; import java.util.List; @@ -27,7 +27,7 @@ import java.util.List; * @author paulG * @since 2020/10/22 **/ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest class FullDiscountTest { diff --git a/manager-api/src/test/java/cn/lili/test/promotion/PromotionPriceTest.java b/manager-api/src/test/java/cn/lili/test/promotion/PromotionPriceTest.java index b2f01f38..0eda72ad 100644 --- a/manager-api/src/test/java/cn/lili/test/promotion/PromotionPriceTest.java +++ b/manager-api/src/test/java/cn/lili/test/promotion/PromotionPriceTest.java @@ -12,10 +12,10 @@ import cn.lili.modules.promotion.service.PromotionService; import com.baomidou.mybatisplus.core.metadata.IPage; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.Map; @@ -23,7 +23,7 @@ import java.util.Map; * @author paulG * @since 2020/11/23 **/ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest class PromotionPriceTest { diff --git a/manager-api/src/test/java/cn/lili/test/promotion/SeckillTest.java b/manager-api/src/test/java/cn/lili/test/promotion/SeckillTest.java index c0c9eac8..1c0fafc6 100644 --- a/manager-api/src/test/java/cn/lili/test/promotion/SeckillTest.java +++ b/manager-api/src/test/java/cn/lili/test/promotion/SeckillTest.java @@ -10,10 +10,10 @@ import cn.lili.modules.promotion.service.SeckillApplyService; import cn.lili.modules.promotion.service.SeckillService; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.ArrayList; import java.util.List; @@ -22,7 +22,7 @@ import java.util.List; * @author paulG * @since 2020/10/29 **/ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest class SeckillTest { diff --git a/manager-api/src/test/java/cn/lili/test/rocketmq/MsgExtRocketMqTest.java b/manager-api/src/test/java/cn/lili/test/rocketmq/MsgExtRocketMqTest.java index 36c9c20b..6096dd97 100644 --- a/manager-api/src/test/java/cn/lili/test/rocketmq/MsgExtRocketMqTest.java +++ b/manager-api/src/test/java/cn/lili/test/rocketmq/MsgExtRocketMqTest.java @@ -6,18 +6,18 @@ import cn.lili.common.properties.RocketmqCustomProperties; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.messaging.Message; import org.springframework.messaging.support.MessageBuilder; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; /** * @author paulG * @since 2021/1/15 **/ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest class MsgExtRocketMqTest { diff --git a/pom.xml b/pom.xml index 01a762c9..af3b627f 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.springframework.boot spring-boot-starter-parent - 2.3.4.RELEASE + 2.4.10 @@ -29,7 +29,7 @@ 2.0.3.RELEASE 3.0.0 2.9.10 - 1.18.10 + 1.18.20 4.5.18 3.11.1 2.0.1 From 318cc0456628c0e657f5dfd2fec74ea0dd6063c7 Mon Sep 17 00:00:00 2001 From: paulGao Date: Wed, 1 Sep 2021 19:07:30 +0800 Subject: [PATCH 3/4] add order by goods parameters field sort to aggregation elasticsearch --- .../goods/GoodsBuyerController.java | 5 ++- .../goods/entity/dto/GoodsParamsDTO.java | 5 ++- .../goods/entity/dto/GoodsParamsItemDTO.java | 10 +++-- .../search/entity/dos/EsGoodsAttribute.java | 21 ++++++--- .../search/entity/dos/EsGoodsIndex.java | 3 +- .../search/service/EsGoodsSearchService.java | 4 +- .../serviceimpl/EsGoodsIndexServiceImpl.java | 37 ++++++++------- .../serviceimpl/EsGoodsSearchServiceImpl.java | 45 +++++++++---------- 8 files changed, 73 insertions(+), 57 deletions(-) diff --git a/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java index 95523e59..cfc844dc 100644 --- a/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java @@ -24,6 +24,7 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; +import org.springframework.data.elasticsearch.core.SearchPage; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -99,9 +100,9 @@ public class GoodsBuyerController { @ApiOperation(value = "从ES中获取商品信息") @GetMapping("/es") - public ResultMessage> getGoodsByPageFromEs(EsGoodsSearchDTO goodsSearchParams, PageVO pageVO) { + public ResultMessage> getGoodsByPageFromEs(EsGoodsSearchDTO goodsSearchParams, PageVO pageVO) { pageVO.setNotConvert(true); - Page esGoodsIndices = goodsSearchService.searchGoods(goodsSearchParams, pageVO); + SearchPage esGoodsIndices = goodsSearchService.searchGoods(goodsSearchParams, pageVO); return ResultUtil.data(esGoodsIndices); } diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsParamsDTO.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsParamsDTO.java index 77bc42b3..68313ebd 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsParamsDTO.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsParamsDTO.java @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.io.Serializable; import java.util.List; /** @@ -15,7 +16,9 @@ import java.util.List; */ @Data @ApiModel(value = "商品参数分组") -public class GoodsParamsDTO { +public class GoodsParamsDTO implements Serializable { + + private static final long serialVersionUID = 4892783539320159200L; @TableField(value = "group_id") @ApiModelProperty(value = "分组id") diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsParamsItemDTO.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsParamsItemDTO.java index 84eb2113..1b0dcb0b 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsParamsItemDTO.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsParamsItemDTO.java @@ -4,8 +4,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; +import java.io.Serializable; /** * 商品参数项 @@ -16,7 +15,9 @@ import javax.validation.constraints.Min; */ @Data @ApiModel(value = "商品参数列表") -public class GoodsParamsItemDTO { +public class GoodsParamsItemDTO implements Serializable { + + private static final long serialVersionUID = -8823775607604091035L; @ApiModelProperty(value = "参数ID") private String paramId; @@ -32,4 +33,7 @@ public class GoodsParamsItemDTO { @ApiModelProperty(value = "是否必填,0 不显示 1 显示") private Integer required = 0; + + @ApiModelProperty(value = "排序") + private Integer sort; } diff --git a/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsAttribute.java b/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsAttribute.java index 09254bae..bbfad035 100644 --- a/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsAttribute.java +++ b/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsAttribute.java @@ -9,6 +9,7 @@ import java.io.Serializable; /** * 商品属性索引 + * * @author paulG * @since 2020/10/14 **/ @@ -47,11 +48,19 @@ public class EsGoodsAttribute implements Serializable { @Field(type = FieldType.Text) private String value; - public EsGoodsAttribute(Integer type,String nameId,String name,String valueId,String value){ - this.type=type; - this.nameId=nameId; - this.name=name; - this.valueId=valueId; - this.value=value; + + /** + * 排序 + */ + @Field(type = FieldType.Integer) + private Integer sort; + + public EsGoodsAttribute(Integer type, String nameId, String name, String valueId, String value, Integer sort) { + this.type = type; + this.nameId = nameId; + this.name = name; + this.valueId = valueId; + this.value = value; + this.sort = sort; } } diff --git a/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java b/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java index 1fbad5e4..7900d82d 100644 --- a/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java +++ b/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java @@ -27,7 +27,7 @@ import java.util.Map; * @author paulG **/ @Data -@Document(indexName = "#{elasticsearchProperties.indexPrefix}_" + EsSuffix.GOODS_INDEX_NAME) +@Document(indexName = "#{@elasticsearchProperties.indexPrefix}_" + EsSuffix.GOODS_INDEX_NAME) @ToString @NoArgsConstructor public class EsGoodsIndex implements Serializable { @@ -300,6 +300,7 @@ public class EsGoodsIndex implements Serializable { attribute.setType(1); attribute.setName(goodsParam.getParamName()); attribute.setValue(goodsParam.getParamValue()); + attribute.setSort(goodsParam.getSort()); attributes.add(attribute); } } diff --git a/framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java b/framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java index d8531110..9449e688 100644 --- a/framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java +++ b/framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java @@ -5,7 +5,7 @@ import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.entity.dos.EsGoodsRelatedInfo; import cn.lili.modules.search.entity.dto.EsGoodsSearchDTO; import cn.lili.modules.search.entity.dto.HotWordsDTO; -import org.springframework.data.domain.Page; +import org.springframework.data.elasticsearch.core.SearchPage; import java.util.List; @@ -24,7 +24,7 @@ public interface EsGoodsSearchService { * @param pageVo 分页参数 * @return 搜索结果 */ - Page searchGoods(EsGoodsSearchDTO searchDTO, PageVO pageVo); + SearchPage searchGoods(EsGoodsSearchDTO searchDTO, PageVO pageVo); /** * 获取热门关键词 diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java index 2060903c..4a951c8d 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java @@ -1,7 +1,5 @@ package cn.lili.modules.search.serviceimpl; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.date.DateUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.StrUtil; @@ -30,14 +28,13 @@ import cn.lili.modules.search.service.EsGoodsSearchService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.assertj.core.util.IterableUtil; -import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.indices.AnalyzeRequest; import org.elasticsearch.client.indices.AnalyzeResponse; -import org.elasticsearch.search.SearchHit; import org.mybatis.spring.MyBatisSystemException; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Page; +import org.springframework.data.elasticsearch.core.SearchHit; +import org.springframework.data.elasticsearch.core.SearchPage; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; @@ -234,14 +231,16 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements */ @Override public void updateEsGoodsIndexAllByList(BasePromotion promotion, String key) { - List goodsIndices; + List goodsIndices = new ArrayList<>(); //如果storeId不为空,则表示是店铺活动 if (promotion.getStoreId() != null) { EsGoodsSearchDTO searchDTO = new EsGoodsSearchDTO(); searchDTO.setStoreId(promotion.getStoreId()); //查询出店铺商品 - Page esGoodsIndices = goodsSearchService.searchGoods(searchDTO, null); - goodsIndices = esGoodsIndices.getContent(); + SearchPage esGoodsIndices = goodsSearchService.searchGoods(searchDTO, null); + for (SearchHit searchHit : esGoodsIndices.getContent()) { + goodsIndices.add(searchHit.getContent()); + } } else { //否则是平台活动 Iterable all = goodsIndexRepository.findAll(); @@ -494,16 +493,16 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements } } - public List searchList(String index) { - SearchResponse searchResponse = search(index); - SearchHit[] hits = searchResponse.getHits().getHits(); - List goodsIndices = new ArrayList<>(); - Arrays.stream(hits).forEach(hit -> { - Map sourceAsMap = hit.getSourceAsMap(); - EsGoodsIndex person = BeanUtil.mapToBean(sourceAsMap, EsGoodsIndex.class, false, CopyOptions.create()); - goodsIndices.add(person); - }); - return goodsIndices; - } +// public List searchList(String index) { +// SearchResponse searchResponse = search(index); +// SearchHit[] hits = searchResponse.getHits().getHits(); +// List goodsIndices = new ArrayList<>(); +// Arrays.stream(hits).forEach(hit -> { +// Map sourceAsMap = hit.getSourceAsMap(); +// EsGoodsIndex person = BeanUtil.mapToBean(sourceAsMap, EsGoodsIndex.class, false, CopyOptions.create()); +// goodsIndices.add(person); +// }); +// return goodsIndices; +// } } diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java index fa48b879..deae01e1 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java @@ -4,7 +4,6 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.text.CharSequenceUtil; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; -import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.PageVO; import cn.lili.modules.goods.entity.dos.Brand; import cn.lili.modules.goods.entity.dos.Category; @@ -28,21 +27,19 @@ import org.elasticsearch.index.query.Operator; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder; import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders; -import org.elasticsearch.search.aggregations.Aggregation; -import org.elasticsearch.search.aggregations.AggregationBuilder; -import org.elasticsearch.search.aggregations.AggregationBuilders; -import org.elasticsearch.search.aggregations.Aggregations; +import org.elasticsearch.search.aggregations.*; import org.elasticsearch.search.aggregations.bucket.nested.ParsedNested; import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; +import org.springframework.data.elasticsearch.core.SearchHitSupport; import org.springframework.data.elasticsearch.core.SearchHits; +import org.springframework.data.elasticsearch.core.SearchPage; import org.springframework.data.elasticsearch.core.query.NativeSearchQuery; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.data.redis.core.DefaultTypedTuple; @@ -63,6 +60,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { private static final String ATTR_PATH = "attrList"; private static final String ATTR_VALUE = "attrList.value"; private static final String ATTR_NAME = "attrList.name"; + private static final String ATTR_SORT = "attrList.sort"; private static final String ATTR_NAME_KEY = "nameList"; private static final String ATTR_VALUE_KEY = "valueList"; @@ -90,15 +88,15 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { private Cache cache; @Override - public Page searchGoods(EsGoodsSearchDTO searchDTO, PageVO pageVo) { + public SearchPage searchGoods(EsGoodsSearchDTO searchDTO, PageVO pageVo) { if (CharSequenceUtil.isNotEmpty(searchDTO.getKeyword())) { cache.incrementScore(CachePrefix.HOT_WORD.getPrefix(), searchDTO.getKeyword()); } NativeSearchQueryBuilder searchQueryBuilder = createSearchQueryBuilder(searchDTO, pageVo, true); NativeSearchQuery searchQuery = searchQueryBuilder.build(); log.info("searchGoods DSL:{}", searchQuery.getQuery()); - - return goodsIndexRepository.search(searchQuery); + SearchHits search = restTemplate.search(searchQuery, EsGoodsIndex.class); + return SearchHitSupport.searchPageFor(search, searchQuery.getPageable()); } @Override @@ -106,11 +104,11 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { List hotWords = new ArrayList<>(); // redis 排序中,下标从0开始,所以这里需要 -1 处理 count = count - 1; - Set set = cache.reverseRangeWithScores(CachePrefix.HOT_WORD.getPrefix(), count); + Set> set = cache.reverseRangeWithScores(CachePrefix.HOT_WORD.getPrefix(), count); if (set == null || set.isEmpty()) { - return new ArrayList(); + return new ArrayList<>(); } - for (DefaultTypedTuple defaultTypedTuple : set) { + for (DefaultTypedTuple defaultTypedTuple : set) { hotWords.add(Objects.requireNonNull(defaultTypedTuple.getValue()).toString()); } return hotWords; @@ -130,7 +128,8 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { builder.addAggregation(AggregationBuilders.terms("brandAgg").field("brandId").size(Integer.MAX_VALUE)); //参数 AggregationBuilder valuesBuilder = AggregationBuilders.terms("valueAgg").field(ATTR_VALUE); - AggregationBuilder paramsNameBuilder = AggregationBuilders.terms("nameAgg").field(ATTR_NAME).subAggregation(valuesBuilder); + AggregationBuilder sortBuilder = AggregationBuilders.sum("sortAgg").field(ATTR_SORT); + AggregationBuilder paramsNameBuilder = AggregationBuilders.terms("nameAgg").field(ATTR_NAME).subAggregation(sortBuilder).order(BucketOrder.aggregation("sortAgg",false)).subAggregation(valuesBuilder); builder.addAggregation(AggregationBuilders.nested("attrAgg", ATTR_PATH).subAggregation(paramsNameBuilder)); NativeSearchQuery searchQuery = builder.build(); SearchHits search = restTemplate.search(searchQuery, EsGoodsIndex.class); @@ -278,7 +277,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { private NativeSearchQueryBuilder createSearchQueryBuilder(EsGoodsSearchDTO searchDTO, PageVO pageVo, boolean isAggregation) { NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder(); if (pageVo != null) { - Integer pageNumber = pageVo.getPageNumber() - 1; + int pageNumber = pageVo.getPageNumber() - 1; if (pageNumber < 0) { pageNumber = 0; } @@ -303,7 +302,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { //关键字检索 - if (StringUtils.isEmpty(searchDTO.getKeyword())) { + if (CharSequenceUtil.isEmpty(searchDTO.getKeyword())) { nativeSearchQueryBuilder.withQuery(QueryBuilders.matchAllQuery()); } else { this.keywordSearch(filterBuilder, queryBuilder, searchDTO.getKeyword(), isAggregation); @@ -331,10 +330,10 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { /** * 查询属性处理 * - * @param filterBuilder - * @param queryBuilder - * @param searchDTO - * @param isAggregation + * @param filterBuilder 过滤构造器 + * @param queryBuilder 查询构造器 + * @param searchDTO 查询参数 + * @param isAggregation 是否为聚合查询 */ private void commonSearch(BoolQueryBuilder filterBuilder, BoolQueryBuilder queryBuilder, EsGoodsSearchDTO searchDTO, boolean isAggregation) { //品牌判定 @@ -423,10 +422,10 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { /** * 关键字查询处理 * - * @param filterBuilder - * @param queryBuilder - * @param keyword - * @param isAggregation + * @param filterBuilder 过滤构造器 + * @param queryBuilder 查询构造器 + * @param keyword 关键字 + * @param isAggregation 是否为聚合查询 */ private void keywordSearch(BoolQueryBuilder filterBuilder, BoolQueryBuilder queryBuilder, String keyword, boolean isAggregation) { List filterFunctionBuilders = new ArrayList<>(); From 8f10b6b2a68556e590b994ee9c3d50b87ffe4f2e Mon Sep 17 00:00:00 2001 From: paulGao Date: Thu, 2 Sep 2021 11:40:26 +0800 Subject: [PATCH 4/4] improvement generator goods index to asynchronization --- .../lili/listener/GoodsMessageListener.java | 43 ++++++++++++++--- .../serviceimpl/GoodsSkuServiceImpl.java | 47 +++---------------- 2 files changed, 43 insertions(+), 47 deletions(-) diff --git a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java index 5a5975d4..9091ce03 100644 --- a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java @@ -1,7 +1,6 @@ package cn.lili.listener; import cn.hutool.json.JSONUtil; -import cn.lili.rocketmq.tags.GoodsTagsEnum; import cn.lili.event.GoodsCommentCompleteEvent; import cn.lili.modules.distribution.entity.dos.DistributionGoods; import cn.lili.modules.distribution.entity.dos.DistributionSelectedGoods; @@ -10,6 +9,9 @@ import cn.lili.modules.distribution.service.DistributionSelectedGoodsService; import cn.lili.modules.goods.entity.dos.Goods; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.dto.GoodsCompleteMessage; +import cn.lili.modules.goods.entity.dto.GoodsParamsDTO; +import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; +import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.service.GoodsService; import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.member.entity.dos.FootPrint; @@ -19,6 +21,7 @@ import cn.lili.modules.member.service.GoodsCollectionService; import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.service.EsGoodsIndexService; import cn.lili.modules.store.service.StoreService; +import cn.lili.rocketmq.tags.GoodsTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; @@ -98,11 +101,37 @@ public class GoodsMessageListener implements RocketMQListener { break; //生成索引 case GENERATOR_GOODS_INDEX: - String goodsIndexJsonStr = new String(messageExt.getBody()); - List goodsIndices = JSONUtil.toList(JSONUtil.parseArray(goodsIndexJsonStr), EsGoodsIndex.class); - for (EsGoodsIndex goodsIndex : goodsIndices) { - log.info("生成商品索引" + goodsIndex); - this.goodsIndexService.addIndex(goodsIndex); + String goodsJsonStr = new String(messageExt.getBody()); + Goods goods = JSONUtil.toBean(goodsJsonStr, Goods.class); + //如果商品通过审核&&并且已上架 + List goodsSkuList = this.goodsSkuService.list(new LambdaQueryWrapper().eq(GoodsSku::getGoodsId, goods.getId())); + if (goods.getIsAuth().equals(GoodsAuthEnum.PASS.name()) + && goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name()) + && Boolean.FALSE.equals(goods.getDeleteFlag())) { + for (GoodsSku goodsSku : goodsSkuList) { + EsGoodsIndex esGoodsOld = goodsIndexService.findById(goodsSku.getId()); + EsGoodsIndex goodsIndex = new EsGoodsIndex(goodsSku); + if (goods.getParams() != null && !goods.getParams().isEmpty()) { + List goodsParamDTOS = JSONUtil.toList(goods.getParams(), GoodsParamsDTO.class); + goodsIndex = new EsGoodsIndex(goodsSku, goodsParamDTOS); + } + //如果商品库存不为0,并且es中有数据 + if (goodsSku.getQuantity() > 0 && esGoodsOld == null) { + log.info("生成商品索引 {}", goodsIndex); + this.goodsIndexService.addIndex(goodsIndex); + } else if (goodsSku.getQuantity() > 0 && esGoodsOld != null) { + goodsIndexService.updateIndex(goodsIndex); + } + } + } + //如果商品状态值不支持es搜索,那么将商品信息做下架处理 + else { + for (GoodsSku goodsSku : goodsSkuList) { + EsGoodsIndex esGoodsOld = goodsIndexService.findById(goodsSku.getId()); + if (esGoodsOld != null) { + goodsIndexService.deleteIndexById(goodsSku.getId()); + } + } } break; //审核商品 @@ -143,7 +172,7 @@ public class GoodsMessageListener implements RocketMQListener { this.goodsBuyComplete(messageExt); break; default: - log.error("商品执行异常:", new String(messageExt.getBody())); + log.error("商品执行异常:{}", new String(messageExt.getBody())); break; } } diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java index d484f1fd..323b11b9 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java @@ -8,14 +8,10 @@ import cn.hutool.json.JSONUtil; import cn.lili.cache.Cache; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.rocketmq.RocketmqSendCallbackBuilder; -import cn.lili.rocketmq.tags.GoodsTagsEnum; -import cn.lili.common.security.context.UserContext; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.properties.RocketmqCustomProperties; +import cn.lili.common.security.context.UserContext; import cn.lili.modules.goods.entity.dos.Goods; import cn.lili.modules.goods.entity.dos.GoodsSku; -import cn.lili.modules.goods.entity.dto.GoodsParamsDTO; import cn.lili.modules.goods.entity.dto.GoodsSearchParams; import cn.lili.modules.goods.entity.dto.GoodsSkuStockDTO; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; @@ -36,6 +32,9 @@ import cn.lili.modules.member.service.MemberEvaluationService; import cn.lili.modules.search.entity.dos.EsGoodsAttribute; import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.service.EsGoodsIndexService; +import cn.lili.mybatis.util.PageUtil; +import cn.lili.rocketmq.RocketmqSendCallbackBuilder; +import cn.lili.rocketmq.tags.GoodsTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -486,41 +485,9 @@ public class GoodsSkuServiceImpl extends ServiceImpl i * @param goods 商品信息 */ private void generateEsCheck(Goods goods) { - //如果商品通过审核&&并且已上架 - List goodsSkuList = this.list(new LambdaQueryWrapper().eq(GoodsSku::getGoodsId, goods.getId())); - if (goods.getIsAuth().equals(GoodsAuthEnum.PASS.name()) - && goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name()) - && Boolean.FALSE.equals(goods.getDeleteFlag())) { - List goodsIndices = new ArrayList<>(); - for (GoodsSku goodsSku : goodsSkuList) { - EsGoodsIndex esGoodsOld = goodsIndexService.findById(goodsSku.getId()); - EsGoodsIndex goodsIndex = new EsGoodsIndex(goodsSku); - if (goods.getParams() != null && !goods.getParams().isEmpty()) { - List goodsParamDTOS = JSONUtil.toList(goods.getParams(), GoodsParamsDTO.class); - goodsIndex = new EsGoodsIndex(goodsSku, goodsParamDTOS); - } - //如果商品库存不为0,并且es中有数据 - if (goodsSku.getQuantity() > 0 && esGoodsOld == null) { - goodsIndices.add(goodsIndex); - } else if (goodsSku.getQuantity() > 0 && esGoodsOld != null) { - goodsIndexService.updateIndex(goodsIndex); - } - } - if (!goodsIndices.isEmpty()) { - String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.GENERATOR_GOODS_INDEX.name(); - //发送mq消息 - rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(goodsIndices), RocketmqSendCallbackBuilder.commonCallback()); - } - } - //如果商品状态值不支持es搜索,那么将商品信息做下架处理 - else { - for (GoodsSku goodsSku : goodsSkuList) { - EsGoodsIndex esGoodsOld = goodsIndexService.findById(goodsSku.getId()); - if (esGoodsOld != null) { - goodsIndexService.deleteIndexById(goodsSku.getId()); - } - } - } + String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.GENERATOR_GOODS_INDEX.name(); + //发送mq消息 + rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(goods), RocketmqSendCallbackBuilder.commonCallback()); } /**