fix: 优化更新商品评论,改为实时统计评论总量

This commit is contained in:
misworga831 2023-10-16 16:40:20 +08:00
parent b30909942a
commit fa696e6c11
4 changed files with 25 additions and 24 deletions

View File

@ -26,7 +26,7 @@ import cn.lili.modules.goods.entity.vos.GoodsSkuVO;
import cn.lili.modules.goods.entity.vos.GoodsVO; import cn.lili.modules.goods.entity.vos.GoodsVO;
import cn.lili.modules.goods.mapper.GoodsMapper; import cn.lili.modules.goods.mapper.GoodsMapper;
import cn.lili.modules.goods.service.*; import cn.lili.modules.goods.service.*;
import cn.lili.modules.member.entity.dos.MemberEvaluation; import cn.lili.modules.member.entity.dto.EvaluationQueryParams;
import cn.lili.modules.member.entity.enums.EvaluationGradeEnum; 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.store.entity.dos.FreightTemplate; import cn.lili.modules.store.entity.dos.FreightTemplate;
@ -446,19 +446,19 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
//获取商品信息 //获取商品信息
Goods goods = this.getById(goodsId); Goods goods = this.getById(goodsId);
//修改商品评价数量
goods.setCommentNum(goods.getCommentNum() + 1);
//修改商品好评率 //修改商品评价数量
LambdaQueryWrapper<MemberEvaluation> goodEvaluationQueryWrapper = new LambdaQueryWrapper<>(); long commentNum = memberEvaluationService.getEvaluationCount(EvaluationQueryParams.builder().goodsId(goodsId).build());
goodEvaluationQueryWrapper.eq(MemberEvaluation::getId, goodsId); goods.setCommentNum((int) (commentNum));
goodEvaluationQueryWrapper.eq(MemberEvaluation::getGrade, EvaluationGradeEnum.GOOD.name());
//好评数量 //好评数量
long highPraiseNum = memberEvaluationService.count(goodEvaluationQueryWrapper); long highPraiseNum = memberEvaluationService.getEvaluationCount(EvaluationQueryParams.builder().goodsId(goodsId).grade(EvaluationGradeEnum.GOOD.name()).build());
//好评率 //好评率
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); this.updateById(goods);
cache.remove(CachePrefix.GOODS.getPrefix() + goodsId);
} }
/** /**

View File

@ -612,14 +612,12 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
//获取商品信息 //获取商品信息
GoodsSku goodsSku = this.getGoodsSkuByIdFromCache(skuId); GoodsSku goodsSku = this.getGoodsSkuByIdFromCache(skuId);
EvaluationQueryParams queryParams = new EvaluationQueryParams();
queryParams.setGrade(EvaluationGradeEnum.GOOD.name());
queryParams.setSkuId(goodsSku.getId());
//好评数量 //好评数量
long highPraiseNum = memberEvaluationService.getEvaluationCount(queryParams); long highPraiseNum = memberEvaluationService.getEvaluationCount(EvaluationQueryParams.builder().grade(EvaluationGradeEnum.GOOD.name()).skuId(skuId).build());
//更新商品评价数量 //更新商品评价数量
goodsSku.setCommentNum(goodsSku.getCommentNum() != null ? goodsSku.getCommentNum() + 1 : 1); long commentNum = memberEvaluationService.getEvaluationCount(EvaluationQueryParams.builder().skuId(skuId).build());
goodsSku.setCommentNum((int) commentNum);
//好评率 //好评率
double grade = NumberUtil.mul(NumberUtil.div(highPraiseNum, goodsSku.getCommentNum().doubleValue(), 2), 100); double grade = NumberUtil.mul(NumberUtil.div(highPraiseNum, goodsSku.getCommentNum().doubleValue(), 2), 100);
@ -640,6 +638,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
//修改商品的评价数量 //修改商品的评价数量
goodsService.updateGoodsCommentNum(goodsSku.getGoodsId()); goodsService.updateGoodsCommentNum(goodsSku.getGoodsId());
clearCache(skuId);
} }
/** /**

View File

@ -4,8 +4,7 @@ import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.common.vo.PageVO; import cn.lili.common.vo.PageVO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.*;
import lombok.EqualsAndHashCode;
/** /**
* 评价查询条件 * 评价查询条件
@ -15,8 +14,13 @@ import lombok.EqualsAndHashCode;
*/ */
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Data @Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class EvaluationQueryParams extends PageVO { public class EvaluationQueryParams extends PageVO {
private static final long serialVersionUID = 2038158669175297129L;
@ApiModelProperty(value = "ID") @ApiModelProperty(value = "ID")
private String id; private String id;

View File

@ -6,6 +6,7 @@ import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.SwitchEnum; import cn.lili.common.enums.SwitchEnum;
import cn.lili.common.event.TransactionCommitSendMQEvent;
import cn.lili.common.exception.ServiceException; import cn.lili.common.exception.ServiceException;
import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.common.properties.RocketmqCustomProperties;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
@ -31,7 +32,6 @@ import cn.lili.modules.order.order.entity.enums.CommentStatusEnum;
import cn.lili.modules.order.order.service.OrderItemService; import cn.lili.modules.order.order.service.OrderItemService;
import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.OrderService;
import cn.lili.mybatis.util.PageUtil; import cn.lili.mybatis.util.PageUtil;
import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
import cn.lili.rocketmq.tags.GoodsTagsEnum; 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.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -40,8 +40,8 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -77,17 +77,15 @@ public class MemberEvaluationServiceImpl extends ServiceImpl<MemberEvaluationMap
*/ */
@Autowired @Autowired
private GoodsSkuService goodsSkuService; private GoodsSkuService goodsSkuService;
/**
* rocketMq
*/
@Autowired
private RocketMQTemplate rocketMQTemplate;
/** /**
* rocketMq配置 * rocketMq配置
*/ */
@Autowired @Autowired
private RocketmqCustomProperties rocketmqCustomProperties; private RocketmqCustomProperties rocketmqCustomProperties;
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
@Override @Override
public IPage<MemberEvaluation> managerQuery(EvaluationQueryParams queryParams) { public IPage<MemberEvaluation> managerQuery(EvaluationQueryParams queryParams) {
//获取评价分页 //获取评价分页
@ -133,8 +131,8 @@ public class MemberEvaluationServiceImpl extends ServiceImpl<MemberEvaluationMap
//修改订单货物评价状态为已评价 //修改订单货物评价状态为已评价
orderItemService.updateCommentStatus(orderItem.getSn(), CommentStatusEnum.FINISHED); orderItemService.updateCommentStatus(orderItem.getSn(), CommentStatusEnum.FINISHED);
//发送商品评价消息 //发送商品评价消息
String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.GOODS_COMMENT_COMPLETE.name(); applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("同步商品评价消息",
rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(memberEvaluation), RocketmqSendCallbackBuilder.commonCallback()); rocketmqCustomProperties.getGoodsTopic(), GoodsTagsEnum.GOODS_COMMENT_COMPLETE.name(), JSONUtil.toJsonStr(memberEvaluation)));
return memberEvaluationDTO; return memberEvaluationDTO;
} }