Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop

This commit is contained in:
Chopper 2021-09-02 14:47:47 +08:00
commit 315ab4d132
33 changed files with 197 additions and 170 deletions

View File

@ -24,6 +24,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; 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.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -99,9 +100,9 @@ public class GoodsBuyerController {
@ApiOperation(value = "从ES中获取商品信息") @ApiOperation(value = "从ES中获取商品信息")
@GetMapping("/es") @GetMapping("/es")
public ResultMessage<Page<EsGoodsIndex>> getGoodsByPageFromEs(EsGoodsSearchDTO goodsSearchParams, PageVO pageVO) { public ResultMessage<SearchPage<EsGoodsIndex>> getGoodsByPageFromEs(EsGoodsSearchDTO goodsSearchParams, PageVO pageVO) {
pageVO.setNotConvert(true); pageVO.setNotConvert(true);
Page<EsGoodsIndex> esGoodsIndices = goodsSearchService.searchGoods(goodsSearchParams, pageVO); SearchPage<EsGoodsIndex> esGoodsIndices = goodsSearchService.searchGoods(goodsSearchParams, pageVO);
return ResultUtil.data(esGoodsIndices); return ResultUtil.data(esGoodsIndices);
} }

View File

@ -10,10 +10,10 @@ import cn.lili.modules.order.cart.service.CartService;
import cn.lili.modules.payment.service.PaymentService; import cn.lili.modules.payment.service.PaymentService;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; 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.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; 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; import java.util.List;
@ -21,7 +21,7 @@ import java.util.List;
* @author paulG * @author paulG
* @since 2020/11/14 * @since 2020/11/14
**/ **/
@RunWith(SpringRunner.class) @ExtendWith(SpringExtension.class)
@SpringBootTest @SpringBootTest
class CartTest { class CartTest {

View File

@ -7,10 +7,10 @@ import cn.lili.modules.goods.service.BrandService;
import com.xkcoding.http.util.StringUtil; import com.xkcoding.http.util.StringUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test; 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.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; 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.io.*;
import java.net.URL; import java.net.URL;
@ -21,7 +21,7 @@ import java.util.List;
* @since 2020/11/14 * @since 2020/11/14
**/ **/
@Slf4j @Slf4j
@RunWith(SpringRunner.class) @ExtendWith(SpringExtension.class)
@SpringBootTest @SpringBootTest
class FileTest { class FileTest {

View File

@ -1,18 +1,19 @@
package cn.lili.buyer.test.cart; package cn.lili.buyer.test.cart;
import cn.lili.modules.promotion.service.MemberCouponService; import cn.lili.modules.promotion.service.MemberCouponService;
import org.junit.Assert;
import org.junit.jupiter.api.Test; 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.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; 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 * @author paulG
* @since 2020/11/27 * @since 2020/11/27
**/ **/
@RunWith(SpringRunner.class) @ExtendWith(SpringExtension.class)
@SpringBootTest @SpringBootTest
class MemberCouponTest { class MemberCouponTest {
@ -22,7 +23,7 @@ class MemberCouponTest {
@Test @Test
void receiveCoupon() { void receiveCoupon() {
memberCouponService.receiveCoupon("1333318596239843328", "1326834797335306240", "1"); memberCouponService.receiveCoupon("1333318596239843328", "1326834797335306240", "1");
Assert.assertTrue(true); assertTrue(true);
} }

View File

@ -1,7 +1,6 @@
package cn.lili.listener; package cn.lili.listener;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.lili.rocketmq.tags.GoodsTagsEnum;
import cn.lili.event.GoodsCommentCompleteEvent; import cn.lili.event.GoodsCommentCompleteEvent;
import cn.lili.modules.distribution.entity.dos.DistributionGoods; import cn.lili.modules.distribution.entity.dos.DistributionGoods;
import cn.lili.modules.distribution.entity.dos.DistributionSelectedGoods; 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.Goods;
import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.dos.GoodsSku;
import cn.lili.modules.goods.entity.dto.GoodsCompleteMessage; 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.GoodsService;
import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.goods.service.GoodsSkuService;
import cn.lili.modules.member.entity.dos.FootPrint; 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.entity.dos.EsGoodsIndex;
import cn.lili.modules.search.service.EsGoodsIndexService; import cn.lili.modules.search.service.EsGoodsIndexService;
import cn.lili.modules.store.service.StoreService; 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.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -98,11 +101,37 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
break; break;
//生成索引 //生成索引
case GENERATOR_GOODS_INDEX: case GENERATOR_GOODS_INDEX:
String goodsIndexJsonStr = new String(messageExt.getBody()); String goodsJsonStr = new String(messageExt.getBody());
List<EsGoodsIndex> goodsIndices = JSONUtil.toList(JSONUtil.parseArray(goodsIndexJsonStr), EsGoodsIndex.class); Goods goods = JSONUtil.toBean(goodsJsonStr, Goods.class);
for (EsGoodsIndex goodsIndex : goodsIndices) { //如果商品通过审核&&并且已上架
log.info("生成商品索引" + goodsIndex); List<GoodsSku> goodsSkuList = this.goodsSkuService.list(new LambdaQueryWrapper<GoodsSku>().eq(GoodsSku::getGoodsId, goods.getId()));
this.goodsIndexService.addIndex(goodsIndex); 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<GoodsParamsDTO> 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; break;
//审核商品 //审核商品
@ -143,7 +172,7 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
this.goodsBuyComplete(messageExt); this.goodsBuyComplete(messageExt);
break; break;
default: default:
log.error("商品执行异常:", new String(messageExt.getBody())); log.error("商品执行异常:{}", new String(messageExt.getBody()));
break; break;
} }
} }

View File

@ -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.order.order.entity.enums.OrderStatusEnum;
import cn.lili.modules.payment.kit.enums.PaymentMethodEnum; import cn.lili.modules.payment.kit.enums.PaymentMethodEnum;
import org.junit.jupiter.api.Test; 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.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; 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 @SpringBootTest
class CartTest { class CartTest {

View File

@ -2,13 +2,13 @@ package cn.lili.buyer.test.cart;
import cn.lili.timetask.handler.impl.statistics.MemberStatisticsExecute; import cn.lili.timetask.handler.impl.statistics.MemberStatisticsExecute;
import org.junit.jupiter.api.Test; 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.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; 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 @SpringBootTest
class MemberStatisticsTest { class MemberStatisticsTest {

View File

@ -3,10 +3,10 @@ package cn.lili.buyer.test.cart;
import cn.lili.common.utils.DateUtil; import cn.lili.common.utils.DateUtil;
import cn.lili.timetask.handler.impl.statistics.OnlineMemberStatistics; import cn.lili.timetask.handler.impl.statistics.OnlineMemberStatistics;
import org.junit.jupiter.api.Test; 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.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; 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.Calendar;
import java.util.Random; import java.util.Random;
@ -14,7 +14,7 @@ import java.util.Random;
/** /**
* 订单库存扣减 * 订单库存扣减
*/ */
@RunWith(SpringRunner.class) @ExtendWith(SpringExtension.class)
@SpringBootTest @SpringBootTest
class OnlineTest { class OnlineTest {

View File

@ -15,6 +15,17 @@
<packaging>jar</packaging> <packaging>jar</packaging>
<dependencies> <dependencies>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>

View File

@ -30,7 +30,7 @@ import java.io.Serializable;
public class LimitInterceptor { public class LimitInterceptor {
private RedisTemplate<String, Serializable> redisTemplate; private RedisTemplate<String, Serializable> redisTemplate;
private DefaultRedisScript<Number> limitScript; private DefaultRedisScript<Long> limitScript;
@Autowired @Autowired
public void setRedisTemplate(RedisTemplate redisTemplate) { public void setRedisTemplate(RedisTemplate redisTemplate) {
@ -38,7 +38,7 @@ public class LimitInterceptor {
} }
@Autowired @Autowired
public void setLimitScript(DefaultRedisScript<Number> limitScript) { public void setLimitScript(DefaultRedisScript<Long> limitScript) {
this.limitScript = limitScript; this.limitScript = limitScript;
} }

View File

@ -33,10 +33,10 @@ public class LuaScript {
* @return * @return
*/ */
@Bean @Bean
public DefaultRedisScript<Number> limitScript() { public DefaultRedisScript<Long> limitScript() {
DefaultRedisScript<Number> redisScript = new DefaultRedisScript<>(); DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("script/limit.lua"))); redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("script/limit.lua")));
redisScript.setResultType(Number.class); redisScript.setResultType(Long.class);
return redisScript; return redisScript;
} }
} }

View File

@ -7,6 +7,9 @@ import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import java.util.Arrays;
import java.util.Collections;
/** /**
* SecurityBean * SecurityBean
* *
@ -19,8 +22,7 @@ public class SecurityBean {
@Bean @Bean
public BCryptPasswordEncoder passwordEncoder() { public BCryptPasswordEncoder passwordEncoder() {
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); return new BCryptPasswordEncoder();
return bCryptPasswordEncoder;
} }
/** /**
@ -33,7 +35,8 @@ public class SecurityBean {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration(); CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true); config.setAllowCredentials(true);
config.addAllowedOrigin(CorsConfiguration.ALL); // config.addAllowedOrigin(CorsConfiguration.ALL);
config.setAllowedOriginPatterns(Collections.singletonList(CorsConfiguration.ALL));
config.addAllowedHeader(CorsConfiguration.ALL); config.addAllowedHeader(CorsConfiguration.ALL);
config.addAllowedMethod(CorsConfiguration.ALL); config.addAllowedMethod(CorsConfiguration.ALL);
source.registerCorsConfiguration("/**", config); source.registerCorsConfiguration("/**", config);

View File

@ -1,7 +1,6 @@
package cn.lili.elasticsearch.config; package cn.lili.elasticsearch.config;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpHost; import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope; import org.apache.http.auth.AuthScope;
@ -30,10 +29,10 @@ import java.util.List;
**/ **/
@Slf4j @Slf4j
@Configuration @Configuration
@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration { public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
private final ElasticsearchProperties elasticsearchProperties; @Autowired
private ElasticsearchProperties elasticsearchProperties;
private RestHighLevelClient client; private RestHighLevelClient client;

View File

@ -17,7 +17,7 @@ import java.util.List;
**/ **/
@Data @Data
@Builder @Builder
@Component @Component("elasticsearchProperties")
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@ConfigurationProperties(prefix = "lili.data.elasticsearch") @ConfigurationProperties(prefix = "lili.data.elasticsearch")

View File

@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.io.Serializable;
import java.util.List; import java.util.List;
/** /**
@ -15,7 +16,9 @@ import java.util.List;
*/ */
@Data @Data
@ApiModel(value = "商品参数分组") @ApiModel(value = "商品参数分组")
public class GoodsParamsDTO { public class GoodsParamsDTO implements Serializable {
private static final long serialVersionUID = 4892783539320159200L;
@TableField(value = "group_id") @TableField(value = "group_id")
@ApiModelProperty(value = "分组id") @ApiModelProperty(value = "分组id")

View File

@ -4,8 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.Max; import java.io.Serializable;
import javax.validation.constraints.Min;
/** /**
* 商品参数项 * 商品参数项
@ -16,7 +15,9 @@ import javax.validation.constraints.Min;
*/ */
@Data @Data
@ApiModel(value = "商品参数列表") @ApiModel(value = "商品参数列表")
public class GoodsParamsItemDTO { public class GoodsParamsItemDTO implements Serializable {
private static final long serialVersionUID = -8823775607604091035L;
@ApiModelProperty(value = "参数ID") @ApiModelProperty(value = "参数ID")
private String paramId; private String paramId;
@ -32,4 +33,7 @@ public class GoodsParamsItemDTO {
@ApiModelProperty(value = "是否必填0 不显示 1 显示") @ApiModelProperty(value = "是否必填0 不显示 1 显示")
private Integer required = 0; private Integer required = 0;
@ApiModelProperty(value = "排序")
private Integer sort;
} }

View File

@ -8,14 +8,10 @@ import cn.hutool.json.JSONUtil;
import cn.lili.cache.Cache; import cn.lili.cache.Cache;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException; 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.properties.RocketmqCustomProperties;
import cn.lili.common.security.context.UserContext;
import cn.lili.modules.goods.entity.dos.Goods; import cn.lili.modules.goods.entity.dos.Goods;
import cn.lili.modules.goods.entity.dos.GoodsSku; 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.GoodsSearchParams;
import cn.lili.modules.goods.entity.dto.GoodsSkuStockDTO; import cn.lili.modules.goods.entity.dto.GoodsSkuStockDTO;
import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; 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.EsGoodsAttribute;
import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.entity.dos.EsGoodsIndex;
import cn.lili.modules.search.service.EsGoodsIndexService; 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.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -486,41 +485,9 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
* @param goods 商品信息 * @param goods 商品信息
*/ */
private void generateEsCheck(Goods goods) { private void generateEsCheck(Goods goods) {
//如果商品通过审核&&并且已上架 String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.GENERATOR_GOODS_INDEX.name();
List<GoodsSku> goodsSkuList = this.list(new LambdaQueryWrapper<GoodsSku>().eq(GoodsSku::getGoodsId, goods.getId())); //发送mq消息
if (goods.getIsAuth().equals(GoodsAuthEnum.PASS.name()) rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(goods), RocketmqSendCallbackBuilder.commonCallback());
&& goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name())
&& Boolean.FALSE.equals(goods.getDeleteFlag())) {
List<EsGoodsIndex> 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<GoodsParamsDTO> 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());
}
}
}
} }
/** /**

View File

@ -9,6 +9,7 @@ import java.io.Serializable;
/** /**
* 商品属性索引 * 商品属性索引
*
* @author paulG * @author paulG
* @since 2020/10/14 * @since 2020/10/14
**/ **/
@ -47,11 +48,19 @@ public class EsGoodsAttribute implements Serializable {
@Field(type = FieldType.Text) @Field(type = FieldType.Text)
private String value; 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; @Field(type = FieldType.Integer)
this.value=value; 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;
} }
} }

View File

@ -27,7 +27,7 @@ import java.util.Map;
* @author paulG * @author paulG
**/ **/
@Data @Data
@Document(indexName = "#{elasticsearchProperties.indexPrefix}_" + EsSuffix.GOODS_INDEX_NAME) @Document(indexName = "#{@elasticsearchProperties.indexPrefix}_" + EsSuffix.GOODS_INDEX_NAME)
@ToString @ToString
@NoArgsConstructor @NoArgsConstructor
public class EsGoodsIndex implements Serializable { public class EsGoodsIndex implements Serializable {
@ -300,6 +300,7 @@ public class EsGoodsIndex implements Serializable {
attribute.setType(1); attribute.setType(1);
attribute.setName(goodsParam.getParamName()); attribute.setName(goodsParam.getParamName());
attribute.setValue(goodsParam.getParamValue()); attribute.setValue(goodsParam.getParamValue());
attribute.setSort(goodsParam.getSort());
attributes.add(attribute); attributes.add(attribute);
} }
} }

View File

@ -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.dos.EsGoodsRelatedInfo;
import cn.lili.modules.search.entity.dto.EsGoodsSearchDTO; import cn.lili.modules.search.entity.dto.EsGoodsSearchDTO;
import cn.lili.modules.search.entity.dto.HotWordsDTO; 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; import java.util.List;
@ -24,7 +24,7 @@ public interface EsGoodsSearchService {
* @param pageVo 分页参数 * @param pageVo 分页参数
* @return 搜索结果 * @return 搜索结果
*/ */
Page<EsGoodsIndex> searchGoods(EsGoodsSearchDTO searchDTO, PageVO pageVo); SearchPage<EsGoodsIndex> searchGoods(EsGoodsSearchDTO searchDTO, PageVO pageVo);
/** /**
* 获取热门关键词 * 获取热门关键词

View File

@ -1,7 +1,5 @@
package cn.lili.modules.search.serviceimpl; 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.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.StrUtil; 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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.assertj.core.util.IterableUtil; import org.assertj.core.util.IterableUtil;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.indices.AnalyzeRequest; import org.elasticsearch.client.indices.AnalyzeRequest;
import org.elasticsearch.client.indices.AnalyzeResponse; import org.elasticsearch.client.indices.AnalyzeResponse;
import org.elasticsearch.search.SearchHit;
import org.mybatis.spring.MyBatisSystemException; import org.mybatis.spring.MyBatisSystemException;
import org.springframework.beans.factory.annotation.Autowired; 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.stereotype.Service;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
@ -234,14 +231,16 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
*/ */
@Override @Override
public void updateEsGoodsIndexAllByList(BasePromotion promotion, String key) { public void updateEsGoodsIndexAllByList(BasePromotion promotion, String key) {
List<EsGoodsIndex> goodsIndices; List<EsGoodsIndex> goodsIndices = new ArrayList<>();
//如果storeId不为空则表示是店铺活动 //如果storeId不为空则表示是店铺活动
if (promotion.getStoreId() != null) { if (promotion.getStoreId() != null) {
EsGoodsSearchDTO searchDTO = new EsGoodsSearchDTO(); EsGoodsSearchDTO searchDTO = new EsGoodsSearchDTO();
searchDTO.setStoreId(promotion.getStoreId()); searchDTO.setStoreId(promotion.getStoreId());
//查询出店铺商品 //查询出店铺商品
Page<EsGoodsIndex> esGoodsIndices = goodsSearchService.searchGoods(searchDTO, null); SearchPage<EsGoodsIndex> esGoodsIndices = goodsSearchService.searchGoods(searchDTO, null);
goodsIndices = esGoodsIndices.getContent(); for (SearchHit<EsGoodsIndex> searchHit : esGoodsIndices.getContent()) {
goodsIndices.add(searchHit.getContent());
}
} else { } else {
//否则是平台活动 //否则是平台活动
Iterable<EsGoodsIndex> all = goodsIndexRepository.findAll(); Iterable<EsGoodsIndex> all = goodsIndexRepository.findAll();
@ -494,16 +493,16 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
} }
} }
public List<EsGoodsIndex> searchList(String index) { // public List<EsGoodsIndex> searchList(String index) {
SearchResponse searchResponse = search(index); // SearchResponse searchResponse = search(index);
SearchHit[] hits = searchResponse.getHits().getHits(); // SearchHit[] hits = searchResponse.getHits().getHits();
List<EsGoodsIndex> goodsIndices = new ArrayList<>(); // List<EsGoodsIndex> goodsIndices = new ArrayList<>();
Arrays.stream(hits).forEach(hit -> { // Arrays.stream(hits).forEach(hit -> {
Map<String, Object> sourceAsMap = hit.getSourceAsMap(); // Map<String, Object> sourceAsMap = hit.getSourceAsMap();
EsGoodsIndex person = BeanUtil.mapToBean(sourceAsMap, EsGoodsIndex.class, false, CopyOptions.create()); // EsGoodsIndex person = BeanUtil.mapToBean(sourceAsMap, EsGoodsIndex.class, false, CopyOptions.create());
goodsIndices.add(person); // goodsIndices.add(person);
}); // });
return goodsIndices; // return goodsIndices;
} // }
} }

View File

@ -4,7 +4,6 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.cache.Cache; import cn.lili.cache.Cache;
import cn.lili.cache.CachePrefix; import cn.lili.cache.CachePrefix;
import cn.lili.common.utils.StringUtils;
import cn.lili.common.vo.PageVO; import cn.lili.common.vo.PageVO;
import cn.lili.modules.goods.entity.dos.Brand; import cn.lili.modules.goods.entity.dos.Brand;
import cn.lili.modules.goods.entity.dos.Category; 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.QueryBuilders;
import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder; import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;
import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders; import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders;
import org.elasticsearch.search.aggregations.Aggregation; import org.elasticsearch.search.aggregations.*;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.bucket.nested.ParsedNested; import org.elasticsearch.search.aggregations.bucket.nested.ParsedNested;
import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms; import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms;
import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; 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.SearchHits;
import org.springframework.data.elasticsearch.core.SearchPage;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery; import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.redis.core.DefaultTypedTuple; 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_PATH = "attrList";
private static final String ATTR_VALUE = "attrList.value"; private static final String ATTR_VALUE = "attrList.value";
private static final String ATTR_NAME = "attrList.name"; 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_NAME_KEY = "nameList";
private static final String ATTR_VALUE_KEY = "valueList"; private static final String ATTR_VALUE_KEY = "valueList";
@ -90,15 +88,15 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
private Cache cache; private Cache cache;
@Override @Override
public Page<EsGoodsIndex> searchGoods(EsGoodsSearchDTO searchDTO, PageVO pageVo) { public SearchPage<EsGoodsIndex> searchGoods(EsGoodsSearchDTO searchDTO, PageVO pageVo) {
if (CharSequenceUtil.isNotEmpty(searchDTO.getKeyword())) { if (CharSequenceUtil.isNotEmpty(searchDTO.getKeyword())) {
cache.incrementScore(CachePrefix.HOT_WORD.getPrefix(), searchDTO.getKeyword()); cache.incrementScore(CachePrefix.HOT_WORD.getPrefix(), searchDTO.getKeyword());
} }
NativeSearchQueryBuilder searchQueryBuilder = createSearchQueryBuilder(searchDTO, pageVo, true); NativeSearchQueryBuilder searchQueryBuilder = createSearchQueryBuilder(searchDTO, pageVo, true);
NativeSearchQuery searchQuery = searchQueryBuilder.build(); NativeSearchQuery searchQuery = searchQueryBuilder.build();
log.info("searchGoods DSL:{}", searchQuery.getQuery()); log.info("searchGoods DSL:{}", searchQuery.getQuery());
SearchHits<EsGoodsIndex> search = restTemplate.search(searchQuery, EsGoodsIndex.class);
return goodsIndexRepository.search(searchQuery); return SearchHitSupport.searchPageFor(search, searchQuery.getPageable());
} }
@Override @Override
@ -106,11 +104,11 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
List<String> hotWords = new ArrayList<>(); List<String> hotWords = new ArrayList<>();
// redis 排序中下标从0开始所以这里需要 -1 处理 // redis 排序中下标从0开始所以这里需要 -1 处理
count = count - 1; count = count - 1;
Set<DefaultTypedTuple> set = cache.reverseRangeWithScores(CachePrefix.HOT_WORD.getPrefix(), count); Set<DefaultTypedTuple<Object>> set = cache.reverseRangeWithScores(CachePrefix.HOT_WORD.getPrefix(), count);
if (set == null || set.isEmpty()) { if (set == null || set.isEmpty()) {
return new ArrayList<String>(); return new ArrayList<>();
} }
for (DefaultTypedTuple defaultTypedTuple : set) { for (DefaultTypedTuple<Object> defaultTypedTuple : set) {
hotWords.add(Objects.requireNonNull(defaultTypedTuple.getValue()).toString()); hotWords.add(Objects.requireNonNull(defaultTypedTuple.getValue()).toString());
} }
return hotWords; return hotWords;
@ -130,7 +128,8 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
builder.addAggregation(AggregationBuilders.terms("brandAgg").field("brandId").size(Integer.MAX_VALUE)); builder.addAggregation(AggregationBuilders.terms("brandAgg").field("brandId").size(Integer.MAX_VALUE));
//参数 //参数
AggregationBuilder valuesBuilder = AggregationBuilders.terms("valueAgg").field(ATTR_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)); builder.addAggregation(AggregationBuilders.nested("attrAgg", ATTR_PATH).subAggregation(paramsNameBuilder));
NativeSearchQuery searchQuery = builder.build(); NativeSearchQuery searchQuery = builder.build();
SearchHits<EsGoodsIndex> search = restTemplate.search(searchQuery, EsGoodsIndex.class); SearchHits<EsGoodsIndex> search = restTemplate.search(searchQuery, EsGoodsIndex.class);
@ -278,7 +277,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
private NativeSearchQueryBuilder createSearchQueryBuilder(EsGoodsSearchDTO searchDTO, PageVO pageVo, boolean isAggregation) { private NativeSearchQueryBuilder createSearchQueryBuilder(EsGoodsSearchDTO searchDTO, PageVO pageVo, boolean isAggregation) {
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder(); NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
if (pageVo != null) { if (pageVo != null) {
Integer pageNumber = pageVo.getPageNumber() - 1; int pageNumber = pageVo.getPageNumber() - 1;
if (pageNumber < 0) { if (pageNumber < 0) {
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()); nativeSearchQueryBuilder.withQuery(QueryBuilders.matchAllQuery());
} else { } else {
this.keywordSearch(filterBuilder, queryBuilder, searchDTO.getKeyword(), isAggregation); this.keywordSearch(filterBuilder, queryBuilder, searchDTO.getKeyword(), isAggregation);
@ -331,10 +330,10 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
/** /**
* 查询属性处理 * 查询属性处理
* *
* @param filterBuilder * @param filterBuilder 过滤构造器
* @param queryBuilder * @param queryBuilder 查询构造器
* @param searchDTO * @param searchDTO 查询参数
* @param isAggregation * @param isAggregation 是否为聚合查询
*/ */
private void commonSearch(BoolQueryBuilder filterBuilder, BoolQueryBuilder queryBuilder, EsGoodsSearchDTO searchDTO, boolean isAggregation) { private void commonSearch(BoolQueryBuilder filterBuilder, BoolQueryBuilder queryBuilder, EsGoodsSearchDTO searchDTO, boolean isAggregation) {
//品牌判定 //品牌判定
@ -423,10 +422,10 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
/** /**
* 关键字查询处理 * 关键字查询处理
* *
* @param filterBuilder * @param filterBuilder 过滤构造器
* @param queryBuilder * @param queryBuilder 查询构造器
* @param keyword * @param keyword 关键字
* @param isAggregation * @param isAggregation 是否为聚合查询
*/ */
private void keywordSearch(BoolQueryBuilder filterBuilder, BoolQueryBuilder queryBuilder, String keyword, boolean isAggregation) { private void keywordSearch(BoolQueryBuilder filterBuilder, BoolQueryBuilder queryBuilder, String keyword, boolean isAggregation) {
List<FunctionScoreQueryBuilder.FilterFunctionBuilder> filterFunctionBuilders = new ArrayList<>(); List<FunctionScoreQueryBuilder.FilterFunctionBuilder> filterFunctionBuilders = new ArrayList<>();

View File

@ -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.order.order.service.OrderItemService;
import cn.lili.modules.statistics.serviceimpl.OrderStatisticsDataServiceImpl; import cn.lili.modules.statistics.serviceimpl.OrderStatisticsDataServiceImpl;
import org.junit.Test; 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.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; 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.ArrayList;
import java.util.List; import java.util.List;
@ -20,7 +20,7 @@ import java.util.List;
* @since 2020-06-13 12:17 * @since 2020-06-13 12:17
*/ */
@RunWith(SpringRunner.class) @ExtendWith(SpringExtension.class)
@SpringBootTest @SpringBootTest
public class RedisLimiterHelperTest { public class RedisLimiterHelperTest {

View File

@ -1,7 +1,7 @@
package cn.lili.test.script; package cn.lili.test.script;
import org.junit.Test; 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.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan; 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.scripting.support.ResourceScriptSource;
import org.springframework.test.annotation.Rollback; import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration; 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 org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -27,7 +27,7 @@ import java.util.List;
* @since * @since
* 2020-02-22 20:26 * 2020-02-22 20:26
*/ */
@RunWith(SpringRunner.class) @ExtendWith(SpringExtension.class)
@SpringBootTest @SpringBootTest
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Rollback() @Rollback()

View File

@ -5,11 +5,11 @@ import cn.lili.cache.CachePrefix;
import cn.lili.modules.statistics.util.StatisticsSuffix; import cn.lili.modules.statistics.util.StatisticsSuffix;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; 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.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.DefaultTypedTuple; 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.Date;
import java.util.Random; import java.util.Random;
@ -21,7 +21,7 @@ import java.util.Set;
* @since v7.0 * @since v7.0
* 2021/1/15 16:25 * 2021/1/15 16:25
*/ */
@RunWith(SpringRunner.class) @ExtendWith(SpringExtension.class)
@SpringBootTest @SpringBootTest
class CacheTest { class CacheTest {

View File

@ -17,12 +17,13 @@ import cn.lili.modules.search.service.EsGoodsSearchService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; 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.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.elasticsearch.core.SearchPage;
import org.springframework.data.redis.core.StringRedisTemplate; 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.ArrayList;
import java.util.List; import java.util.List;
@ -32,7 +33,7 @@ import java.util.Map;
* @author paulG * @author paulG
* @since 2020/10/14 * @since 2020/10/14
**/ **/
@RunWith(SpringRunner.class) @ExtendWith(SpringExtension.class)
@SpringBootTest @SpringBootTest
class EsTest { class EsTest {
@ -59,7 +60,7 @@ class EsTest {
void searchGoods() { void searchGoods() {
EsGoodsSearchDTO goodsSearchDTO = new EsGoodsSearchDTO(); EsGoodsSearchDTO goodsSearchDTO = new EsGoodsSearchDTO();
// goodsSearchDTO.setKeyword(""); // goodsSearchDTO.setKeyword("");
goodsSearchDTO.setProp("IETF_HTTP/3"); // goodsSearchDTO.setProp("IETF_HTTP/3");
// goodsSearchDTO.setPrice("100_20000"); // goodsSearchDTO.setPrice("100_20000");
// goodsSearchDTO.setStoreCatId(1L); // goodsSearchDTO.setStoreCatId(1L);
// goodsSearchDTO.setBrandId(123L); // goodsSearchDTO.setBrandId(123L);
@ -70,7 +71,7 @@ class EsTest {
pageVo.setPageSize(100); pageVo.setPageSize(100);
pageVo.setOrder("desc"); pageVo.setOrder("desc");
pageVo.setNotConvert(true); pageVo.setNotConvert(true);
Page<EsGoodsIndex> esGoodsIndices = goodsSearchService.searchGoods(goodsSearchDTO, pageVo); SearchPage<EsGoodsIndex> esGoodsIndices = goodsSearchService.searchGoods(goodsSearchDTO, pageVo);
Assertions.assertNotNull(esGoodsIndices); Assertions.assertNotNull(esGoodsIndices);
esGoodsIndices.getContent().forEach(System.out::println); esGoodsIndices.getContent().forEach(System.out::println);
// esGoodsIndices.getContent().forEach(i -> { // esGoodsIndices.getContent().forEach(i -> {

View File

@ -2,16 +2,16 @@ package cn.lili.test.order;
import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.OrderService;
import org.junit.jupiter.api.Test; 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.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit.jupiter.SpringExtension;
/** /**
* @author paulG * @author paulG
* @since 2020/12/1 * @since 2020/12/1
**/ **/
@RunWith(SpringRunner.class) @ExtendWith(SpringExtension.class)
@SpringBootTest @SpringBootTest
class OrderServiceTest { class OrderServiceTest {

View File

@ -15,10 +15,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; 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.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; 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.ArrayList;
import java.util.List; import java.util.List;
@ -27,7 +27,7 @@ import java.util.List;
* @author paulG * @author paulG
* @since 2020/10/29 * @since 2020/10/29
**/ **/
@RunWith(SpringRunner.class) @ExtendWith(SpringExtension.class)
@SpringBootTest @SpringBootTest
class CouponTest { class CouponTest {

View File

@ -15,10 +15,10 @@ import cn.lili.modules.order.cart.entity.vo.FullDiscountVO;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; 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.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; 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.ArrayList;
import java.util.List; import java.util.List;
@ -27,7 +27,7 @@ import java.util.List;
* @author paulG * @author paulG
* @since 2020/10/22 * @since 2020/10/22
**/ **/
@RunWith(SpringRunner.class) @ExtendWith(SpringExtension.class)
@SpringBootTest @SpringBootTest
class FullDiscountTest { class FullDiscountTest {

View File

@ -12,10 +12,10 @@ import cn.lili.modules.promotion.service.PromotionService;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; 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.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; 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; import java.util.Map;
@ -23,7 +23,7 @@ import java.util.Map;
* @author paulG * @author paulG
* @since 2020/11/23 * @since 2020/11/23
**/ **/
@RunWith(SpringRunner.class) @ExtendWith(SpringExtension.class)
@SpringBootTest @SpringBootTest
class PromotionPriceTest { class PromotionPriceTest {

View File

@ -10,10 +10,10 @@ import cn.lili.modules.promotion.service.SeckillApplyService;
import cn.lili.modules.promotion.service.SeckillService; import cn.lili.modules.promotion.service.SeckillService;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; 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.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; 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.ArrayList;
import java.util.List; import java.util.List;
@ -22,7 +22,7 @@ import java.util.List;
* @author paulG * @author paulG
* @since 2020/10/29 * @since 2020/10/29
**/ **/
@RunWith(SpringRunner.class) @ExtendWith(SpringExtension.class)
@SpringBootTest @SpringBootTest
class SeckillTest { class SeckillTest {

View File

@ -6,18 +6,18 @@ import cn.lili.common.properties.RocketmqCustomProperties;
import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; 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.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.messaging.Message; import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder; import org.springframework.messaging.support.MessageBuilder;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit.jupiter.SpringExtension;
/** /**
* @author paulG * @author paulG
* @since 2021/1/15 * @since 2021/1/15
**/ **/
@RunWith(SpringRunner.class) @ExtendWith(SpringExtension.class)
@SpringBootTest @SpringBootTest
class MsgExtRocketMqTest { class MsgExtRocketMqTest {

View File

@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version> <version>2.4.10</version>
<relativePath/> <relativePath/>
</parent> </parent>
@ -29,7 +29,7 @@
<TinyPinyin-verions>2.0.3.RELEASE</TinyPinyin-verions> <TinyPinyin-verions>2.0.3.RELEASE</TinyPinyin-verions>
<jasypt-version>3.0.0</jasypt-version> <jasypt-version>3.0.0</jasypt-version>
<neetl-version>2.9.10</neetl-version> <neetl-version>2.9.10</neetl-version>
<lombok-version>1.18.10</lombok-version> <lombok-version>1.18.20</lombok-version>
<aliyun-version>4.5.18</aliyun-version> <aliyun-version>4.5.18</aliyun-version>
<aliyun-sdk-oss-version>3.11.1</aliyun-sdk-oss-version> <aliyun-sdk-oss-version>3.11.1</aliyun-sdk-oss-version>
<aliyun-sdk-dysms-version>2.0.1</aliyun-sdk-dysms-version> <aliyun-sdk-dysms-version>2.0.1</aliyun-sdk-dysms-version>