瀏覽代碼

开发获取店铺评价计数统计接口

LuTong 2 周之前
父節點
當前提交
2fd5ca5ae9

+ 1 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreComment.java

@@ -20,6 +20,7 @@ import java.util.Date;
 @Data
 @JsonInclude
 @EqualsAndHashCode(callSuper = false)
+@TableName("store_comment")
 @ApiModel(value = "StoreComment对象", description = "评论表")
 public class StoreComment extends Model<StoreComment> {
 

+ 33 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreCommentCountVo.java

@@ -0,0 +1,33 @@
+package shop.alien.entity.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 评价计数VO
+ *
+ * @author ssk
+ * @version 1.0
+ * @date 2025/12/01
+ */
+@Data
+@JsonInclude
+public class StoreCommentCountVo {
+
+    @ApiModelProperty(value = "全部评价数")
+    private Integer totalCount;
+
+    @ApiModelProperty(value = "有图评价数")
+    private Integer imageCount;
+
+    @ApiModelProperty(value = "好评数")
+    private Integer goodCount;
+
+    @ApiModelProperty(value = "中评数")
+    private Integer midCount;
+
+    @ApiModelProperty(value = "差评数")
+    private Integer badCount;
+}
+

+ 11 - 0
alien-store/src/main/java/shop/alien/store/controller/StoreCommentController.java

@@ -8,6 +8,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartRequest;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.vo.LifeUserOrderCommentVo;
+import shop.alien.entity.store.vo.StoreCommentCountVo;
 import shop.alien.entity.store.vo.StoreCommentVo;
 import shop.alien.entity.store.vo.StoreCommitPercentVo;
 import shop.alien.store.service.StoreCommentService;
@@ -154,4 +155,14 @@ public class StoreCommentController {
         log.info("StoreCommentController.getCommentOrderPage?pageNum={}&pageSize={}&type={}&userId={}", pageNum, pageSize, type, userId);
         return R.data(storeCommentService.getCommentOrderPage(pageNum, pageSize, type, userId));
     }
+
+    @ApiOperation("获取店铺评价计数统计")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "storeId", value = "门店id", dataType = "Integer", paramType = "query", required = true)
+    })
+    @GetMapping("/getAppraiseCount")
+    public R<StoreCommentCountVo> getAppraiseCount(@RequestParam("storeId") Integer storeId) {
+        log.info("StoreCommentController.getAppraiseCount?storeId={}", storeId);
+        return R.data(storeCommentService.getAppraiseCount(storeId));
+    }
 }

+ 9 - 0
alien-store/src/main/java/shop/alien/store/service/StoreCommentService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import org.springframework.web.multipart.MultipartRequest;
 import shop.alien.entity.store.StoreComment;
 import shop.alien.entity.store.vo.LifeUserOrderCommentVo;
+import shop.alien.entity.store.vo.StoreCommentCountVo;
 import shop.alien.entity.store.vo.StoreCommentVo;
 import shop.alien.entity.store.vo.StoreCommitPercentVo;
 
@@ -104,4 +105,12 @@ public interface StoreCommentService extends IService<StoreComment> {
      */
     IPage<LifeUserOrderCommentVo> getCommentOrderPage(Integer pageNum, Integer pageSize, Integer type, String userId);
 
+    /**
+     * 获取店铺评价计数统计
+     *
+     * @param storeId 门店id
+     * @return StoreCommentCountVo
+     */
+    StoreCommentCountVo getAppraiseCount(Integer storeId);
+
 }

+ 51 - 0
alien-store/src/main/java/shop/alien/store/service/impl/StoreCommentServiceImpl.java

@@ -815,4 +815,55 @@ public class StoreCommentServiceImpl extends ServiceImpl<StoreCommentMapper, Sto
         }
         return commentOrderPage;
     }
+
+    /**
+     * 获取店铺评价计数统计
+     *
+     * @param storeId 门店id
+     * @return StoreCommentCountVo
+     */
+    @Override
+    public StoreCommentCountVo getAppraiseCount(Integer storeId) {
+        StoreCommentCountVo countVo = new StoreCommentCountVo();
+
+        // 查询条件:只统计当前门店、根评论(reply_id为null)、未删除的评论
+        LambdaQueryWrapper<StoreComment> totalWrapper = buildBaseStoreCommentWrapper(storeId);
+        countVo.setTotalCount(storeCommentMapper.selectCount(totalWrapper));
+
+        // 2. 有图评论数(img_id不为空且不为空字符串)
+        LambdaQueryWrapper<StoreComment> imageWrapper = buildBaseStoreCommentWrapper(storeId);
+        imageWrapper.isNotNull(StoreComment::getImgId)
+                .apply("img_id != ''");
+        countVo.setImageCount(storeCommentMapper.selectCount(imageWrapper));
+
+        // 3. 好评数(score >= 4.5)
+        LambdaQueryWrapper<StoreComment> goodWrapper = buildBaseStoreCommentWrapper(storeId);
+        goodWrapper.ge(StoreComment::getScore, 4.5);
+        countVo.setGoodCount(storeCommentMapper.selectCount(goodWrapper));
+
+        // 4. 中评数(score >= 3 && score <= 4)
+        LambdaQueryWrapper<StoreComment> midWrapper = buildBaseStoreCommentWrapper(storeId);
+        midWrapper.ge(StoreComment::getScore, 3.0)
+                .le(StoreComment::getScore, 4.0);
+        countVo.setMidCount(storeCommentMapper.selectCount(midWrapper));
+
+        // 5. 差评数(score >= 0.5 && score <= 2.5)
+        LambdaQueryWrapper<StoreComment> badWrapper = buildBaseStoreCommentWrapper(storeId);
+        badWrapper.ge(StoreComment::getScore, 0.5)
+                .le(StoreComment::getScore, 2.5);
+        countVo.setBadCount(storeCommentMapper.selectCount(badWrapper));
+
+        return countVo;
+    }
+
+    /**
+     * 构建当前门店根评论的查询条件
+     */
+    private LambdaQueryWrapper<StoreComment> buildBaseStoreCommentWrapper(Integer storeId) {
+        return new LambdaQueryWrapper<StoreComment>()
+                .eq(StoreComment::getStoreId, storeId)
+                .gt(StoreComment::getScore,0 )
+                .eq(StoreComment::getBusinessType, 5)
+                .eq(StoreComment::getDeleteFlag, 0);
+    }
 }