增加注释
This commit is contained in:
parent
bffca15b3c
commit
4cea9038eb
@ -11,7 +11,6 @@ import cn.lili.modules.promotion.service.*;
|
||||
import cn.lili.timetask.handler.EveryDayExecute;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
import org.springframework.data.mongodb.core.query.Criteria;
|
||||
@ -59,11 +58,14 @@ public class PromotionEverydayExecute implements EveryDayExecute {
|
||||
public void execute() {
|
||||
|
||||
Query query = new Query();
|
||||
query.addCriteria(Criteria.where("promotionStatus").ne(PromotionStatusEnum.END.name()).orOperator(Criteria.where("promotionStatus").ne(PromotionStatusEnum.CLOSE.name())));
|
||||
// 结束条件 活动关闭/活动结束
|
||||
query.addCriteria(Criteria.where("promotionStatus").ne(PromotionStatusEnum.END.name())
|
||||
.orOperator(Criteria.where("promotionStatus").ne(PromotionStatusEnum.CLOSE.name())));
|
||||
query.addCriteria(Criteria.where("endTime").lt(new Date()));
|
||||
|
||||
List<String> promotionIds = new ArrayList<>();
|
||||
|
||||
//关闭满减活动
|
||||
List<FullDiscountVO> fullDiscountVOS = mongoTemplate.find(query, FullDiscountVO.class);
|
||||
if (!fullDiscountVOS.isEmpty()) {
|
||||
List<String> ids = new ArrayList<>();
|
||||
@ -80,9 +82,10 @@ public class PromotionEverydayExecute implements EveryDayExecute {
|
||||
fullDiscountService.update(this.getUpdatePromotionWrapper(ids));
|
||||
promotionIds.addAll(ids);
|
||||
}
|
||||
|
||||
//关闭拼团活动
|
||||
List<PintuanVO> pintuanVOS = mongoTemplate.find(query, PintuanVO.class);
|
||||
if (!pintuanVOS.isEmpty()) {
|
||||
//准备修改活动的id
|
||||
List<String> ids = new ArrayList<>();
|
||||
for (PintuanVO vo : pintuanVOS) {
|
||||
vo.setPromotionStatus(PromotionStatusEnum.END.name());
|
||||
@ -98,6 +101,7 @@ public class PromotionEverydayExecute implements EveryDayExecute {
|
||||
promotionIds.addAll(ids);
|
||||
}
|
||||
|
||||
//关闭优惠券活动
|
||||
List<CouponVO> couponVOS = mongoTemplate.find(query, CouponVO.class);
|
||||
if (!couponVOS.isEmpty()) {
|
||||
List<String> ids = new ArrayList<>();
|
||||
|
@ -12,7 +12,6 @@ import cn.lili.config.rocketmq.RocketmqCustomProperties;
|
||||
import cn.lili.modules.order.order.service.OrderService;
|
||||
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
|
||||
import cn.lili.modules.promotion.service.PromotionService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -65,6 +64,7 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor {
|
||||
}
|
||||
return;
|
||||
}
|
||||
//拼团订单消息
|
||||
PintuanOrderMessage pintuanOrderMessage = JSONUtil.toBean(JSONUtil.parseObj(object), PintuanOrderMessage.class);
|
||||
if (pintuanOrderMessage != null && pintuanOrderMessage.getPintuanId() != null) {
|
||||
log.info("拼团订单信息消费:{}", pintuanOrderMessage);
|
||||
|
@ -24,7 +24,6 @@ import cn.lili.modules.search.repository.EsGoodsIndexRepository;
|
||||
import cn.lili.modules.search.service.EsGoodsIndexService;
|
||||
import cn.lili.modules.search.service.EsGoodsSearchService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.assertj.core.util.IterableUtil;
|
||||
import org.elasticsearch.action.search.SearchResponse;
|
||||
@ -44,6 +43,7 @@ import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 商品索引业务层实现
|
||||
*
|
||||
* @author paulG
|
||||
* @since 2020/10/14
|
||||
**/
|
||||
@ -64,19 +64,26 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
|
||||
|
||||
@Override
|
||||
public void addIndex(EsGoodsIndex goods) {
|
||||
//索引名称拼接
|
||||
String indexName = elasticsearchProperties.getIndexPrefix() + "_" + EsSuffix.GOODS_INDEX_NAME;
|
||||
try {
|
||||
//分词器分词
|
||||
AnalyzeRequest analyzeRequest = AnalyzeRequest.withIndexAnalyzer(indexName, "ik_max_word", goods.getGoodsName());
|
||||
AnalyzeResponse analyze = client.indices().analyze(analyzeRequest, RequestOptions.DEFAULT);
|
||||
List<AnalyzeResponse.AnalyzeToken> tokens = analyze.getTokens();
|
||||
|
||||
if (goods.getAttrList() != null && !goods.getAttrList().isEmpty()) {
|
||||
//保存分词
|
||||
for (EsGoodsAttribute esGoodsAttribute : goods.getAttrList()) {
|
||||
wordsToDb(esGoodsAttribute.getValue());
|
||||
}
|
||||
}
|
||||
//分析词条
|
||||
for (AnalyzeResponse.AnalyzeToken token : tokens) {
|
||||
//保存词条进入数据库
|
||||
wordsToDb(token.getTerm());
|
||||
}
|
||||
//生成索引
|
||||
goodsIndexRepository.save(goods);
|
||||
} catch (IOException e) {
|
||||
log.error("为商品[" + goods.getGoodsName() + "]生成索引异常", e);
|
||||
@ -112,6 +119,7 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
|
||||
@Override
|
||||
public void updateIndexCommentNum(String id, Integer commentNum, Integer highPraiseNum, Double grade) {
|
||||
EsGoodsIndex goodsIndex = this.findById(id);
|
||||
//写入新的商品数据
|
||||
goodsIndex.setCommentNum(commentNum);
|
||||
goodsIndex.setHighPraiseNum(highPraiseNum);
|
||||
goodsIndex.setGrade(grade);
|
||||
@ -139,8 +147,10 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
|
||||
|
||||
@Override
|
||||
public void initIndex(List<EsGoodsIndex> goodsIndexList) {
|
||||
//索引名称拼接
|
||||
String indexName = elasticsearchProperties.getIndexPrefix() + "_" + EsSuffix.GOODS_INDEX_NAME;
|
||||
// deleteIndexRequest(indexName);
|
||||
//如果索引不存在,则创建索引
|
||||
if (!indexExist(indexName)) {
|
||||
createIndexRequest(indexName);
|
||||
}
|
||||
@ -156,11 +166,14 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
|
||||
public void updateEsGoodsIndex(String id, BasePromotion promotion, String key, Double price) {
|
||||
EsGoodsIndex goodsIndex = findById(id);
|
||||
if (goodsIndex != null) {
|
||||
//如果有促销活动开始,则将促销金额写入
|
||||
if (promotion.getPromotionStatus().equals(PromotionStatusEnum.START.name()) && price != null) {
|
||||
goodsIndex.setPromotionPrice(price);
|
||||
} else {
|
||||
//否则促销金额为商品原价
|
||||
goodsIndex.setPromotionPrice(goodsIndex.getPrice());
|
||||
}
|
||||
//更新索引
|
||||
this.updateGoodsIndexPromotion(goodsIndex, key, promotion);
|
||||
} else {
|
||||
log.error("更新索引商品促销信息失败!skuId 为 【{}】的索引不存在!", id);
|
||||
@ -170,6 +183,7 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
|
||||
@Override
|
||||
public void updateEsGoodsIndexByList(List<PromotionGoods> promotionGoodsList, BasePromotion promotion, String key) {
|
||||
if (promotionGoodsList != null) {
|
||||
//循环更新 促销商品索引
|
||||
for (PromotionGoods promotionGoods : promotionGoodsList) {
|
||||
updateEsGoodsIndex(promotionGoods.getSkuId(), promotion, key, promotionGoods.getPrice());
|
||||
}
|
||||
@ -186,15 +200,20 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
|
||||
@Override
|
||||
public void updateEsGoodsIndexAllByList(BasePromotion promotion, String key) {
|
||||
List<EsGoodsIndex> goodsIndices;
|
||||
//如果storeid不为空,则表示是店铺活动
|
||||
if (promotion.getStoreId() != null) {
|
||||
EsGoodsSearchDTO searchDTO = new EsGoodsSearchDTO();
|
||||
searchDTO.setStoreId(promotion.getStoreId());
|
||||
//查询出店铺商品
|
||||
Page<EsGoodsIndex> esGoodsIndices = goodsSearchService.searchGoods(searchDTO, null);
|
||||
goodsIndices = esGoodsIndices.getContent();
|
||||
} else {
|
||||
//否则是平台活动
|
||||
Iterable<EsGoodsIndex> all = goodsIndexRepository.findAll();
|
||||
// 查询出全部商品
|
||||
goodsIndices = new ArrayList<>(IterableUtil.toCollection(all));
|
||||
}
|
||||
//更新商品索引
|
||||
for (EsGoodsIndex goodsIndex : goodsIndices) {
|
||||
this.updateGoodsIndexPromotion(goodsIndex, key, promotion);
|
||||
}
|
||||
@ -202,8 +221,10 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
|
||||
|
||||
@Override
|
||||
public void deleteEsGoodsPromotionIndexByList(List<String> skuIds, PromotionTypeEnum promotionType) {
|
||||
//批量删除活动索引
|
||||
for (String skuId : skuIds) {
|
||||
EsGoodsIndex goodsIndex = findById(skuId);
|
||||
//商品索引不为空
|
||||
if (goodsIndex != null) {
|
||||
Map<String, Object> promotionMap = goodsIndex.getPromotionMap();
|
||||
if (promotionMap != null && !promotionMap.isEmpty()) {
|
||||
@ -220,16 +241,19 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除所以商品索引的无效促销活动
|
||||
* 清除所有商品索引的无效促销活动
|
||||
*/
|
||||
@Override
|
||||
public void cleanInvalidPromotion() {
|
||||
Iterable<EsGoodsIndex> all = goodsIndexRepository.findAll();
|
||||
for (EsGoodsIndex goodsIndex : all) {
|
||||
Map<String, Object> promotionMap = goodsIndex.getPromotionMap();
|
||||
//获取商品索引
|
||||
if (promotionMap != null && !promotionMap.isEmpty()) {
|
||||
//促销不为空则进行清洗
|
||||
for (Map.Entry<String, Object> entry : promotionMap.entrySet()) {
|
||||
BasePromotion promotion = (BasePromotion) entry.getValue();
|
||||
//判定条件为活动已结束
|
||||
if (promotion.getEndTime().getTime() > DateUtil.date().getTime()) {
|
||||
promotionMap.remove(entry.getKey());
|
||||
}
|
||||
@ -258,6 +282,8 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
|
||||
@Override
|
||||
public Map<String, Object> getPromotionMap(String id) {
|
||||
EsGoodsIndex goodsIndex = this.findById(id);
|
||||
|
||||
// 如果商品索引不为空,返回促销信息,否则返回空
|
||||
if (goodsIndex != null) {
|
||||
Map<String, Object> promotionMap = goodsIndex.getPromotionMap();
|
||||
if (promotionMap == null || promotionMap.isEmpty()) {
|
||||
@ -278,11 +304,14 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
|
||||
@Override
|
||||
public List<String> getPromotionIdByPromotionType(String id, PromotionTypeEnum promotionTypeEnum) {
|
||||
Map<String, Object> promotionMap = this.getPromotionMap(id);
|
||||
//如果没有促销信息,则返回新的
|
||||
if (promotionMap == null || promotionMap.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
//对促销进行过滤
|
||||
List<String> keyCollect = promotionMap.keySet().stream().filter(i -> i.contains(promotionTypeEnum.name())).collect(Collectors.toList());
|
||||
List<String> promotionIds = new ArrayList<>();
|
||||
//写入促销id
|
||||
for (String key : keyCollect) {
|
||||
BasePromotion promotion = (BasePromotion) promotionMap.get(key);
|
||||
promotionIds.add(promotion.getId());
|
||||
@ -299,25 +328,37 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
|
||||
@Override
|
||||
public EsGoodsIndex resetEsGoodsIndex(GoodsSku goodsSku) {
|
||||
EsGoodsIndex index = new EsGoodsIndex(goodsSku);
|
||||
//获取活动信息
|
||||
Map<String, Object> goodsCurrentPromotionMap = promotionService.getGoodsCurrentPromotionMap(index);
|
||||
//写入促销信息
|
||||
index.setPromotionMap(goodsCurrentPromotionMap);
|
||||
this.addIndex(index);
|
||||
return index;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改商品活动索引
|
||||
*
|
||||
* @param goodsIndex 商品索引
|
||||
* @param key 关键字
|
||||
* @param promotion 活动
|
||||
*/
|
||||
private void updateGoodsIndexPromotion(EsGoodsIndex goodsIndex, String key, BasePromotion promotion) {
|
||||
Map<String, Object> promotionMap;
|
||||
//数据非空处理,如果空给一个新的信息
|
||||
if (goodsIndex.getPromotionMap() == null || goodsIndex.getPromotionMap().isEmpty()) {
|
||||
promotionMap = new HashMap<>(1);
|
||||
} else {
|
||||
promotionMap = goodsIndex.getPromotionMap();
|
||||
}
|
||||
|
||||
|
||||
//如果活动已结束
|
||||
if (promotion.getPromotionStatus().equals(PromotionStatusEnum.END.name()) || promotion.getPromotionStatus().equals(PromotionStatusEnum.CLOSE.name())) {
|
||||
//如果存在活动
|
||||
if (promotionMap.containsKey(key)) {
|
||||
//删除活动
|
||||
promotionMap.remove(key);
|
||||
} else {
|
||||
//不存在则说明是秒杀活动,尝试删除秒杀信息
|
||||
this.removePromotionKey(key, promotionMap, PromotionTypeEnum.SECKILL.name());
|
||||
}
|
||||
} else {
|
||||
@ -337,9 +378,13 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
|
||||
* @param needRemoveKeys 需移除的促销活动
|
||||
*/
|
||||
private void removePromotionKey(String currentKey, Map<String, Object> promotionMap, String... needRemoveKeys) {
|
||||
//判定是否需要移除
|
||||
if (CharSequenceUtil.containsAny(currentKey, needRemoveKeys)) {
|
||||
|
||||
List<String> removeKeys = new ArrayList<>();
|
||||
//促销循环
|
||||
for (String entry : promotionMap.keySet()) {
|
||||
//需要移除则进行移除处理
|
||||
for (String needRemoveKey : needRemoveKeys) {
|
||||
if (entry.contains(needRemoveKey) && currentKey.contains(needRemoveKey)) {
|
||||
removeKeys.add(entry);
|
||||
@ -347,6 +392,7 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
|
||||
}
|
||||
}
|
||||
}
|
||||
//移除促销信息
|
||||
promotionMap.keySet().removeAll(removeKeys);
|
||||
}
|
||||
}
|
||||
|
@ -46,11 +46,14 @@ public class ElasticsearchController {
|
||||
|
||||
@GetMapping
|
||||
public void init() {
|
||||
//查询商品信息
|
||||
LambdaQueryWrapper<GoodsSku> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(GoodsSku::getIsAuth, GoodsAuthEnum.PASS.name());
|
||||
queryWrapper.eq(GoodsSku::getMarketEnable, GoodsStatusEnum.UPPER.name());
|
||||
|
||||
List<GoodsSku> list = goodsSkuService.list(queryWrapper);
|
||||
List<EsGoodsIndex> esGoodsIndices = new ArrayList<>();
|
||||
//库存锁是在redis做的,所以生成索引,同时更新一下redis中的库存数量
|
||||
for (GoodsSku goodsSku : list) {
|
||||
EsGoodsIndex index = new EsGoodsIndex(goodsSku);
|
||||
Map<String, Object> goodsCurrentPromotionMap = promotionService.getGoodsCurrentPromotionMap(index);
|
||||
@ -58,6 +61,7 @@ public class ElasticsearchController {
|
||||
esGoodsIndices.add(index);
|
||||
stringRedisTemplate.opsForValue().set(GoodsSkuService.getStockCacheKey(goodsSku.getId()), goodsSku.getQuantity().toString());
|
||||
}
|
||||
//初始化商品索引
|
||||
esGoodsIndexService.initIndex(esGoodsIndices);
|
||||
Assertions.assertTrue(true);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user