Jelajahi Sumber

1、商家端评价
2、计算评价优化

V 11 bulan lalu
induk
melakukan
5fc09d03f7

+ 3 - 0
vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/AssessClient.java

@@ -35,4 +35,7 @@ public interface AssessClient {
 
     @GetMapping("/assess/getGoodsScore")
     Map<String, BigDecimal> getGoodsScore(@RequestParam("goodsId") Long goodsId);
+
+    @GetMapping("/assess/merchantQuery")
+    List<GoodsAssessDto> merchantQuery(@SpringQueryMap AssessQueryParam param);
 }

+ 9 - 3
vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/param/AssessQueryParam.java

@@ -22,19 +22,25 @@ public class AssessQueryParam  implements Serializable {
     /**
      * 主键
      */
-    @Min(value = 0, message = "评论id必须大于0")
+    @Min(value = 1, message = "评论id必须大于0")
     private Long id;
 
     /**
      * 商品id
      */
-    @Min(value = 0, message = "商品id必须大于0")
+    @Min(value = 1, message = "商家id必须大于0")
+    private Long merchantId;
+
+    /**
+     * 商品id
+     */
+    @Min(value = 1, message = "商品id必须大于0")
     private Long goodsId;
 
     /**
      * 订单id
      */
-    @Min(value = 0, message = "订单id必须大于0")
+    @Min(value = 1, message = "订单id必须大于0")
     private Long orderId;
 
     /**

+ 5 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/controller/AssessController.java

@@ -33,6 +33,11 @@ public class AssessController {
         return this.assessService.query(param);
     }
 
+    @GetMapping("/assess/merchantQuery")
+    public List<GoodsAssessDto> merchantQuery(@SpringQueryMap AssessQueryParam param) {
+        return this.assessService.merchantQuery(param);
+    }
+
     @PostMapping("/assess/addAssessRecover")
     public Long addAssessRecover(@RequestBody AssessRecoverModifyParam param) {
         return this.assessService.addAssessRecover(param);

+ 10 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/GoodsAssessMapper.java

@@ -6,6 +6,7 @@ import org.apache.ibatis.annotations.*;
 
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author valley
@@ -16,8 +17,15 @@ public interface GoodsAssessMapper extends BaseMapper<GoodsAssess> {
     @Select("select id from goods")
     List<Long> getAllGoodsIds();
 
-    @Select("select avg(score) from goods_assess where goods_id = #{goodsId}")
-    BigDecimal getAvgScore(Long goodsId);
+    @Select("select " +
+            "IFNULL((select  avg(score) avg from goods_assess where goods_id = a.id), 0) avg_score ,  " +
+            "IFNULL((select  avg(score) year_score  from goods_assess where goods_id =  a.id AND create_time between DATE_SUB(now(), INTERVAL 365 DAY) AND now()), 0) year_score ,  " +
+            "IFNULL((select  avg(score) year_score  from goods_assess where goods_id =  a.id AND create_time between DATE_SUB(now(), INTERVAL 180 DAY) AND now()), 0) half_year_score ,  " +
+            "IFNULL((select  avg(score) year_score  from goods_assess where goods_id =  a.id AND create_time between DATE_SUB(now(), INTERVAL 90 DAY) AND now()), 0) quarter_score ,  " +
+            "IFNULL((select  avg(score) year_score  from goods_assess where goods_id =  a.id AND create_time between DATE_SUB(now(), INTERVAL 30 DAY) AND now()), 0) month_score ,  " +
+            "IFNULL((select  avg(score) year_score  from goods_assess where goods_id =  a.id AND create_time between DATE_SUB(now(), INTERVAL 7 DAY) AND now()), 0) week_score " +
+            "from goods a where a.id = #{goodsId}")
+    Map<String, Object> getAllGoodsScore(@Param("goodsId") Long goodsId);
 
     @Select("select IFNULL(avg(score),0)  from goods_assess where goods_id =  #{goodsId} AND create_time between DATE_SUB(now(), INTERVAL ${day} DAY) AND now()")
     BigDecimal getGoodsScore(@Param("day") Integer day, @Param("goodsId") Long goodsId);

+ 2 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/AssessService.java

@@ -45,4 +45,6 @@ public interface AssessService extends IService<GoodsAssess> {
     Pagination<GoodsAssessDto> selectCommentListByUserId(Long userId, Paging paging);
 
     Integer queryAssessStatus(Long orderId, Long goodsId, Long userId);
+
+    List<GoodsAssessDto> merchantQuery(AssessQueryParam param);
 }

+ 28 - 12
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/AssessServiceImpl.java

@@ -20,6 +20,7 @@ import com.chelvc.cloud.vehicle.server.dao.AssessScoreMapper;
 import com.chelvc.cloud.vehicle.server.dao.GoodsAssessMapper;
 import com.chelvc.cloud.vehicle.server.entity.AssessRecover;
 import com.chelvc.cloud.vehicle.server.entity.AssessScore;
+import com.chelvc.cloud.vehicle.server.entity.Goods;
 import com.chelvc.cloud.vehicle.server.entity.GoodsAssess;
 import com.chelvc.cloud.vehicle.server.service.AssessService;
 import com.chelvc.framework.base.context.Session;
@@ -27,6 +28,7 @@ import com.chelvc.framework.base.context.SessionContextHolder;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.common.model.Paging;
 import com.chelvc.framework.common.util.AssertUtils;
+import com.chelvc.framework.common.util.ObjectUtils;
 import com.chelvc.framework.database.context.DatabaseContextHolder;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -37,10 +39,7 @@ import org.springframework.stereotype.Service;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -135,6 +134,7 @@ public class AssessServiceImpl extends ServiceImpl<GoodsAssessMapper, GoodsAsses
         return goodsAssesseDtos.stream().peek(item -> {
             //个人信息获取
             UserDTO user = userService.getUser(item.getCreator());
+            if(null == user) return;
             item.setCreatorAvatar(user.getAvatar());
             item.setCreatorNickName(user.getNickname());
             item.setCreatorTimeFormat(SDF.format(item.getCreateTime()));
@@ -182,17 +182,22 @@ public class AssessServiceImpl extends ServiceImpl<GoodsAssessMapper, GoodsAsses
         List<Long> goodsIds = this.baseMapper.getAllGoodsIds();
         if (goodsIds == null) return;
         goodsIds.forEach(goodsId -> {
-            List<GoodsAssess> goodsAssessList = this.list(new QueryWrapper<GoodsAssess>().eq("goods_id", goodsId));
-            if (goodsAssessList.isEmpty()) return;
-            BigDecimal goodsAvgScore = this.baseMapper.getAvgScore(goodsId).setScale(2, RoundingMode.HALF_UP);
+            Map<String, Object> goodsScores = this.baseMapper.getAllGoodsScore(goodsId);
+            Double avgScore = (Double) goodsScores.get("avg_score");
+            Double yearScore = (Double) goodsScores.get("year_score");
+            Double halfYearScore = (Double) goodsScores.get("half_year_score");
+            Double quarterScore = (Double) goodsScores.get("quarter_score");
+            Double monthScore = (Double) goodsScores.get("month_score");
+            Double weekScore = (Double) goodsScores.get("week_score");
+            BigDecimal goodsAvgScore = BigDecimal.valueOf(avgScore).setScale(2, RoundingMode.HALF_UP);
             this.baseMapper.updateGoodsAvgScore(goodsAvgScore, goodsId);
 
-            BigDecimal goodsYearScore = this.baseMapper.getGoodsScore(365, goodsId).setScale(2, RoundingMode.HALF_UP);
-            BigDecimal goodsHalfYearScore = this.baseMapper.getGoodsScore(180, goodsId).setScale(2,
+            BigDecimal goodsYearScore =  BigDecimal.valueOf(yearScore).setScale(2, RoundingMode.HALF_UP);
+            BigDecimal goodsHalfYearScore =  BigDecimal.valueOf(halfYearScore).setScale(2,
                     RoundingMode.HALF_UP);
-            BigDecimal goodsQuarterScore = this.baseMapper.getGoodsScore(90, goodsId).setScale(2, RoundingMode.HALF_UP);
-            BigDecimal goodsMonthScore = this.baseMapper.getGoodsScore(30, goodsId).setScale(2, RoundingMode.HALF_UP);
-            BigDecimal goodsWeekScore = this.baseMapper.getGoodsScore(7, goodsId).setScale(2, RoundingMode.HALF_UP);
+            BigDecimal goodsQuarterScore =  BigDecimal.valueOf(quarterScore).setScale(2, RoundingMode.HALF_UP);
+            BigDecimal goodsMonthScore =  BigDecimal.valueOf(monthScore).setScale(2, RoundingMode.HALF_UP);
+            BigDecimal goodsWeekScore =  BigDecimal.valueOf(weekScore).setScale(2, RoundingMode.HALF_UP);
             AssessScore assessScore = new AssessScore();
             assessScore.setGoodsId(goodsId);
             assessScore.setYearScore(goodsYearScore);
@@ -272,4 +277,15 @@ public class AssessServiceImpl extends ServiceImpl<GoodsAssessMapper, GoodsAsses
         wrapper.eq(GoodsAssess::getCreator, userId);
         return baseMapper.selectCount(wrapper) > 0 ? 1 : 0;
     }
+
+    @Override
+    public List<GoodsAssessDto> merchantQuery(AssessQueryParam param) {
+        AssertUtils.nonnull(param.getMerchantId(), "query merchant assess merchantId must not be null");
+        QueryWrapper<GoodsAssess> wrapper = new QueryWrapper<>();
+        wrapper.eq("merchant_id", param.getMerchantId());
+        if (null != param.getGoodsId()) wrapper.eq("goods_id", param.getGoodsId());
+        wrapper.orderByDesc("create_time");
+        List<GoodsAssess> list = this.list(wrapper);
+        return GoodsAssessCopier.INSTANCE.copying(list);
+    }
 }