fix: 优化更新商品评价为所有Sku的评价
This commit is contained in:
		
							parent
							
								
									cfb70eff8a
								
							
						
					
					
						commit
						1422b6fdbc
					
				@ -7,6 +7,7 @@ import cn.lili.event.GoodsCommentCompleteEvent;
 | 
				
			|||||||
import cn.lili.event.StoreSettingChangeEvent;
 | 
					import cn.lili.event.StoreSettingChangeEvent;
 | 
				
			||||||
import cn.lili.modules.goods.entity.dos.GoodsSku;
 | 
					import cn.lili.modules.goods.entity.dos.GoodsSku;
 | 
				
			||||||
import cn.lili.modules.goods.entity.dto.GoodsSearchParams;
 | 
					import cn.lili.modules.goods.entity.dto.GoodsSearchParams;
 | 
				
			||||||
 | 
					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.MemberEvaluation;
 | 
					import cn.lili.modules.member.entity.dos.MemberEvaluation;
 | 
				
			||||||
import cn.lili.modules.store.entity.dos.Store;
 | 
					import cn.lili.modules.store.entity.dos.Store;
 | 
				
			||||||
@ -31,12 +32,15 @@ public class GoodsSkuExecute implements GoodsCommentCompleteEvent, StoreSettingC
 | 
				
			|||||||
    @Autowired
 | 
					    @Autowired
 | 
				
			||||||
    private GoodsSkuService goodsSkuService;
 | 
					    private GoodsSkuService goodsSkuService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    private GoodsService goodsService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Autowired
 | 
					    @Autowired
 | 
				
			||||||
    private Cache cache;
 | 
					    private Cache cache;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void goodsComment(MemberEvaluation memberEvaluation) {
 | 
					    public void goodsComment(MemberEvaluation memberEvaluation) {
 | 
				
			||||||
        goodsSkuService.updateGoodsSkuCommentNum(memberEvaluation.getSkuId());
 | 
					        goodsService.updateGoodsCommentNum(memberEvaluation.getGoodsId(), memberEvaluation.getSkuId());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
 | 
				
			|||||||
@ -211,13 +211,6 @@ public interface GoodsSkuService extends IService<GoodsSku> {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    void updateGoodsStock(List<GoodsSku> goodsSkus);
 | 
					    void updateGoodsStock(List<GoodsSku> goodsSkus);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 更新SKU评价数量
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param skuId SKUId
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    void updateGoodsSkuCommentNum(String skuId);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 根据商品id获取全部skuId的集合
 | 
					     * 根据商品id获取全部skuId的集合
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@ -261,9 +254,10 @@ public interface GoodsSkuService extends IService<GoodsSku> {
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 更新商品sku评分
 | 
					     * 更新商品sku评分
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 | 
					     * @param goodsId goodsId
 | 
				
			||||||
     * @param skuId   skuId
 | 
					     * @param skuId   skuId
 | 
				
			||||||
     * @param grade   评分
 | 
					     * @param grade   评分
 | 
				
			||||||
     * @param commentNum 评论数量
 | 
					     * @param commentNum 评论数量
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    void updateGoodsSkuGrade(String skuId, double grade,int commentNum);
 | 
					    void updateGoodsSkuGrade(String goodsId, String skuId, double grade,int commentNum);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -14,10 +14,7 @@ import cn.lili.common.properties.RocketmqCustomProperties;
 | 
				
			|||||||
import cn.lili.common.security.AuthUser;
 | 
					import cn.lili.common.security.AuthUser;
 | 
				
			||||||
import cn.lili.common.security.context.UserContext;
 | 
					import cn.lili.common.security.context.UserContext;
 | 
				
			||||||
import cn.lili.common.security.enums.UserEnums;
 | 
					import cn.lili.common.security.enums.UserEnums;
 | 
				
			||||||
import cn.lili.modules.goods.entity.dos.Category;
 | 
					import cn.lili.modules.goods.entity.dos.*;
 | 
				
			||||||
import cn.lili.modules.goods.entity.dos.Goods;
 | 
					 | 
				
			||||||
import cn.lili.modules.goods.entity.dos.GoodsGallery;
 | 
					 | 
				
			||||||
import cn.lili.modules.goods.entity.dos.Wholesale;
 | 
					 | 
				
			||||||
import cn.lili.modules.goods.entity.dto.GoodsOperationDTO;
 | 
					import cn.lili.modules.goods.entity.dto.GoodsOperationDTO;
 | 
				
			||||||
import cn.lili.modules.goods.entity.dto.GoodsParamsDTO;
 | 
					import cn.lili.modules.goods.entity.dto.GoodsParamsDTO;
 | 
				
			||||||
import cn.lili.modules.goods.entity.dto.GoodsSearchParams;
 | 
					import cn.lili.modules.goods.entity.dto.GoodsSearchParams;
 | 
				
			||||||
@ -444,11 +441,20 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
 | 
					    @Transactional(rollbackFor = Exception.class)
 | 
				
			||||||
    public void updateGoodsCommentNum(String goodsId, String skuId) {
 | 
					    public void updateGoodsCommentNum(String goodsId, String skuId) {
 | 
				
			||||||
 | 
					        GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(skuId);
 | 
				
			||||||
 | 
					        if (goodsSku == null) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //获取商品信息
 | 
					        //获取商品信息
 | 
				
			||||||
        Goods goods = this.getById(goodsId);
 | 
					        Goods goods = this.getById(goodsId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (goods == null) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //修改商品评价数量
 | 
					        //修改商品评价数量
 | 
				
			||||||
        long commentNum = memberEvaluationService.getEvaluationCount(EvaluationQueryParams.builder().goodsId(goodsId).status("OPEN").build());
 | 
					        long commentNum = memberEvaluationService.getEvaluationCount(EvaluationQueryParams.builder().goodsId(goodsId).status("OPEN").build());
 | 
				
			||||||
        goods.setCommentNum((int) (commentNum));
 | 
					        goods.setCommentNum((int) (commentNum));
 | 
				
			||||||
@ -458,10 +464,18 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
 | 
				
			|||||||
        //好评率
 | 
					        //好评率
 | 
				
			||||||
        double grade = NumberUtil.mul(NumberUtil.div(highPraiseNum, goods.getCommentNum().doubleValue(), 2), 100);
 | 
					        double grade = NumberUtil.mul(NumberUtil.div(highPraiseNum, goods.getCommentNum().doubleValue(), 2), 100);
 | 
				
			||||||
        goods.setGrade(grade);
 | 
					        goods.setGrade(grade);
 | 
				
			||||||
        this.updateById(goods);
 | 
					        LambdaUpdateWrapper<Goods> updateWrapper = new LambdaUpdateWrapper<>();
 | 
				
			||||||
 | 
					        updateWrapper.eq(Goods::getId, goodsId);
 | 
				
			||||||
 | 
					        updateWrapper.set(Goods::getCommentNum, goods.getCommentNum());
 | 
				
			||||||
 | 
					        updateWrapper.set(Goods::getGrade, goods.getGrade());
 | 
				
			||||||
 | 
					        this.update(updateWrapper);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cache.remove(CachePrefix.GOODS.getPrefix() + goodsId);
 | 
					        cache.remove(CachePrefix.GOODS.getPrefix() + goodsId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 修改商品sku评价数量
 | 
				
			||||||
 | 
					        this.goodsSkuService.updateGoodsSkuGrade(goodsId, skuId, grade, goods.getCommentNum());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Map<String, Object> updateIndexFieldsMap = EsIndexUtil.getUpdateIndexFieldsMap(MapUtil.builder(new HashMap<String, Object>()).put("id", skuId).build(), MapUtil.builder(new HashMap<String, Object>()).put("commentNum", goods.getCommentNum()).put("highPraiseNum", highPraiseNum).put("grade", grade).build());
 | 
					        Map<String, Object> updateIndexFieldsMap = EsIndexUtil.getUpdateIndexFieldsMap(MapUtil.builder(new HashMap<String, Object>()).put("id", skuId).build(), MapUtil.builder(new HashMap<String, Object>()).put("commentNum", goods.getCommentNum()).put("highPraiseNum", highPraiseNum).put("grade", grade).build());
 | 
				
			||||||
        applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("更新商品索引信息", rocketmqCustomProperties.getGoodsTopic(), GoodsTagsEnum.UPDATE_GOODS_INDEX_FIELD.name(), JSONUtil.toJsonStr(updateIndexFieldsMap)));
 | 
					        applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("更新商品索引信息", rocketmqCustomProperties.getGoodsTopic(), GoodsTagsEnum.UPDATE_GOODS_INDEX_FIELD.name(), JSONUtil.toJsonStr(updateIndexFieldsMap)));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,6 @@
 | 
				
			|||||||
package cn.lili.modules.goods.serviceimpl;
 | 
					package cn.lili.modules.goods.serviceimpl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import cn.hutool.core.text.CharSequenceUtil;
 | 
					import cn.hutool.core.text.CharSequenceUtil;
 | 
				
			||||||
import cn.hutool.core.util.NumberUtil;
 | 
					 | 
				
			||||||
import cn.hutool.json.JSONObject;
 | 
					import cn.hutool.json.JSONObject;
 | 
				
			||||||
import cn.hutool.json.JSONUtil;
 | 
					import cn.hutool.json.JSONUtil;
 | 
				
			||||||
import cn.lili.cache.Cache;
 | 
					import cn.lili.cache.Cache;
 | 
				
			||||||
@ -36,8 +35,6 @@ import cn.lili.modules.goods.service.WholesaleService;
 | 
				
			|||||||
import cn.lili.modules.goods.sku.GoodsSkuBuilder;
 | 
					import cn.lili.modules.goods.sku.GoodsSkuBuilder;
 | 
				
			||||||
import cn.lili.modules.goods.sku.render.SalesModelRender;
 | 
					import cn.lili.modules.goods.sku.render.SalesModelRender;
 | 
				
			||||||
import cn.lili.modules.member.entity.dos.FootPrint;
 | 
					import cn.lili.modules.member.entity.dos.FootPrint;
 | 
				
			||||||
import cn.lili.modules.member.entity.dto.EvaluationQueryParams;
 | 
					 | 
				
			||||||
import cn.lili.modules.member.entity.enums.EvaluationGradeEnum;
 | 
					 | 
				
			||||||
import cn.lili.modules.member.service.MemberEvaluationService;
 | 
					import cn.lili.modules.member.service.MemberEvaluationService;
 | 
				
			||||||
import cn.lili.modules.promotion.entity.dos.Coupon;
 | 
					import cn.lili.modules.promotion.entity.dos.Coupon;
 | 
				
			||||||
import cn.lili.modules.promotion.entity.dos.PromotionGoods;
 | 
					import cn.lili.modules.promotion.entity.dos.PromotionGoods;
 | 
				
			||||||
@ -604,30 +601,6 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    @Transactional(rollbackFor = Exception.class)
 | 
					 | 
				
			||||||
    public void updateGoodsSkuCommentNum(String skuId) {
 | 
					 | 
				
			||||||
        //获取商品信息
 | 
					 | 
				
			||||||
        GoodsSku goodsSku = this.getGoodsSkuByIdFromCache(skuId);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //好评数量
 | 
					 | 
				
			||||||
        long highPraiseNum = memberEvaluationService.getEvaluationCount(EvaluationQueryParams.builder().status("OPEN").grade(EvaluationGradeEnum.GOOD.name()).skuId(skuId).build());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //更新商品评价数量
 | 
					 | 
				
			||||||
        long commentNum = memberEvaluationService.getEvaluationCount(EvaluationQueryParams.builder().status("OPEN").skuId(skuId).build());
 | 
					 | 
				
			||||||
        goodsSku.setCommentNum((int) commentNum);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //好评率
 | 
					 | 
				
			||||||
        double grade = NumberUtil.mul(NumberUtil.div(highPraiseNum, goodsSku.getCommentNum().doubleValue(), 2), 100);
 | 
					 | 
				
			||||||
        goodsSku.setGrade(grade);
 | 
					 | 
				
			||||||
        //修改规格
 | 
					 | 
				
			||||||
        this.updateGoodsSkuGrade(skuId, grade, goodsSku.getCommentNum());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //修改商品的评价数量
 | 
					 | 
				
			||||||
        goodsService.updateGoodsCommentNum(goodsSku.getGoodsId(), skuId);
 | 
					 | 
				
			||||||
        clearCache(skuId);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 根据商品id获取全部skuId的集合
 | 
					     * 根据商品id获取全部skuId的集合
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@ -686,12 +659,13 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void updateGoodsSkuGrade(String skuId, double grade, int commentNum) {
 | 
					    public void updateGoodsSkuGrade(String goodsId, String skuId, double grade, int commentNum) {
 | 
				
			||||||
        LambdaUpdateWrapper<GoodsSku> updateWrapper = new LambdaUpdateWrapper<>();
 | 
					        LambdaUpdateWrapper<GoodsSku> updateWrapper = new LambdaUpdateWrapper<>();
 | 
				
			||||||
        updateWrapper.eq(GoodsSku::getId, skuId);
 | 
					        updateWrapper.eq(GoodsSku::getGoodsId, goodsId);
 | 
				
			||||||
        updateWrapper.set(GoodsSku::getGrade, grade);
 | 
					        updateWrapper.set(GoodsSku::getGrade, grade);
 | 
				
			||||||
        updateWrapper.set(GoodsSku::getCommentNum, commentNum);
 | 
					        updateWrapper.set(GoodsSku::getCommentNum, commentNum);
 | 
				
			||||||
        this.update(updateWrapper);
 | 
					        this.update(updateWrapper);
 | 
				
			||||||
 | 
					        clearCache(skuId);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user