瀏覽代碼

1、评价查询优化 /assess/query专用于批量查询 会返回数量信息 新增单条评价查询 /assess/detail
2、待解决问题employee的人员信息没有头像字段,导致返回此字段为空

V 10 月之前
父節點
當前提交
c8008e8e76

+ 5 - 1
vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/AssessClient.java

@@ -4,6 +4,7 @@ import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
+import com.chelvc.cloud.vehicle.client.dto.AssessMessageDto;
 import com.chelvc.cloud.vehicle.client.dto.GoodsAssessDto;
 import com.chelvc.cloud.vehicle.client.param.AssessModifyParam;
 import com.chelvc.cloud.vehicle.client.param.AssessQueryParam;
@@ -25,7 +26,7 @@ public interface AssessClient {
     Long add(@RequestBody AssessModifyParam param);
 
     @GetMapping("/assess/query")
-    List<GoodsAssessDto> query(@SpringQueryMap AssessQueryParam param);
+    AssessMessageDto query(@SpringQueryMap AssessQueryParam param);
 
     @PostMapping("/assess/addAssessRecover")
     Long addAssessRecover(@RequestBody AssessRecoverModifyParam param);
@@ -38,4 +39,7 @@ public interface AssessClient {
 
     @PostMapping("/assess/merchantQuery")
     List<GoodsAssessDto> merchantQuery(@SpringQueryMap AssessQueryParam param);
+
+    @GetMapping("/assess/detail")
+    GoodsAssessDto getDetail(@RequestParam("id") Long assessId);
 }

+ 46 - 0
vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/dto/AssessMessageDto.java

@@ -0,0 +1,46 @@
+package com.chelvc.cloud.vehicle.client.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+import java.util.List;
+
+/**
+ * @author valley
+ * @date 2024/02/03 15:45
+ **/
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString(callSuper = true)
+public class AssessMessageDto {
+    /**
+     * 合计评价数
+     */
+    Long total;
+    /**
+     * 五星评价数
+     */
+    Long fiveLevelCount;
+    /**
+     * 四星评价数
+     */
+    Long fourLevelCount;
+    /**
+     * 三星评价数
+     */
+    Long threeLevelCount;
+    /**
+     * 二星评价数
+     */
+    Long twoLevelCount;
+    /**
+     * 一星评价数
+     */
+    Long oneLevelCount;
+    List<GoodsAssessDto> assessMessages;
+}

+ 1 - 6
vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/param/AssessQueryParam.java

@@ -11,7 +11,7 @@ import javax.validation.constraints.Min;
 import java.io.Serializable;
 
 /**
- * @author valley
+ * @author valley 2024-05-30 只查询多条评价信息使用  查询单条使用/assess/detail
  * @date 2024/02/03 16:02
  **/
 @Data
@@ -19,11 +19,6 @@ import java.io.Serializable;
 @NoArgsConstructor
 @AllArgsConstructor
 public class AssessQueryParam  implements Serializable {
-    /**
-     * 主键
-     */
-    @Min(value = 1, message = "评论id必须大于0")
-    private Long id;
 
     /**
      * 商品id

+ 7 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/controller/AssessController.java

@@ -1,5 +1,6 @@
 package com.chelvc.cloud.vehicle.server.controller;
 
+import com.chelvc.cloud.vehicle.client.dto.AssessMessageDto;
 import com.chelvc.cloud.vehicle.client.dto.GoodsAssessDto;
 import com.chelvc.cloud.vehicle.client.param.AssessModifyParam;
 import com.chelvc.cloud.vehicle.client.param.AssessQueryParam;
@@ -29,10 +30,15 @@ public class AssessController {
     }
 
     @GetMapping("/assess/query")
-    public List<GoodsAssessDto> query(@SpringQueryMap AssessQueryParam param) {
+    public AssessMessageDto query(@SpringQueryMap AssessQueryParam param) {
         return this.assessService.query(param);
     }
 
+    @GetMapping("/assess/detail")
+    public GoodsAssessDto detail(@RequestParam("id") Long assessId) {
+        return this.assessService.getDetail(assessId);
+    }
+
     @PostMapping("/assess/merchantQuery")
     public List<GoodsAssessDto> merchantQuery(@SpringQueryMap AssessQueryParam param) {
         return this.assessService.merchantQuery(param);

+ 4 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/GoodsAssessMapper.java

@@ -1,6 +1,7 @@
 package com.chelvc.cloud.vehicle.server.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.user.client.dto.EmployeeDTO;
 import com.chelvc.cloud.vehicle.server.entity.GoodsAssess;
 import org.apache.ibatis.annotations.*;
 
@@ -41,4 +42,7 @@ public interface GoodsAssessMapper extends BaseMapper<GoodsAssess> {
 
     @Update("update order_item set comment_status = 'Y' where order_sn = #{orderId} and goods_id = #{goodsId}")
     void updatePersonalAssessStatus(@Param("orderId") Long orderId, @Param("goodsId") Long goodsId);
+
+    @Select("select * from employee where id = #{id}")
+    EmployeeDTO queryEmployeeInfo(@Param("id") Long id);
 }

+ 4 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/AssessService.java

@@ -1,6 +1,7 @@
 package com.chelvc.cloud.vehicle.server.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.chelvc.cloud.vehicle.client.dto.AssessMessageDto;
 import com.chelvc.cloud.vehicle.client.dto.GoodsAssessDto;
 import com.chelvc.cloud.vehicle.client.param.AssessModifyParam;
 import com.chelvc.cloud.vehicle.client.param.AssessQueryParam;
@@ -20,7 +21,7 @@ import java.util.Map;
 public interface AssessService extends IService<GoodsAssess> {
     Long add(AssessModifyParam param);
 
-    List<GoodsAssessDto> query(AssessQueryParam param);
+    AssessMessageDto query(AssessQueryParam param);
 
     Long addAssessRecover(AssessRecoverModifyParam param);
 
@@ -47,4 +48,6 @@ public interface AssessService extends IService<GoodsAssess> {
     Integer queryAssessStatus(Long orderId, Long goodsId, Long userId);
 
     List<GoodsAssessDto> merchantQuery(AssessQueryParam param);
+
+    GoodsAssessDto getDetail(Long assessId);
 }

+ 88 - 14
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/AssessServiceImpl.java

@@ -6,8 +6,12 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.user.client.EmployeeClient;
 import com.chelvc.cloud.user.client.UserClient;
+import com.chelvc.cloud.user.client.dto.EmployeeDTO;
+import com.chelvc.cloud.user.client.dto.EmployeeDetailDTO;
 import com.chelvc.cloud.user.client.dto.UserDTO;
+import com.chelvc.cloud.vehicle.client.dto.AssessMessageDto;
 import com.chelvc.cloud.vehicle.client.dto.AssessRecoverDto;
 import com.chelvc.cloud.vehicle.client.dto.GoodsAssessDto;
 import com.chelvc.cloud.vehicle.client.param.AssessModifyParam;
@@ -52,6 +56,7 @@ import java.util.stream.Collectors;
 public class AssessServiceImpl extends ServiceImpl<GoodsAssessMapper, GoodsAssess> implements AssessService {
 
     private final UserClient userService;
+    private final EmployeeClient employeeClient;
 
     private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");
 
@@ -72,12 +77,51 @@ public class AssessServiceImpl extends ServiceImpl<GoodsAssessMapper, GoodsAsses
     }
 
     @Override
-    public List<GoodsAssessDto> query(AssessQueryParam param) {
+    public AssessMessageDto query(AssessQueryParam param) {
+        return AssessMessageDto.builder().assessMessages(queryAssessMessages(param))
+                .total(queryAssessCount(param, null))
+                .fiveLevelCount(queryAssessCount(param, "5"))
+                .fourLevelCount(queryAssessCount(param, "4"))
+                .threeLevelCount(queryAssessCount(param, "3"))
+                .twoLevelCount(queryAssessCount(param, "2"))
+                .oneLevelCount(queryAssessCount(param, "1"))
+                .build();
+    }
+
+    private Long queryAssessCount(AssessQueryParam param, String level) {
         QueryWrapper<GoodsAssess> wrapper = new QueryWrapper<>();
-        //查询评价内容详情  单条查询时 增加点击数
-        if (param.getId() != null) {
-            wrapper.eq("id", param.getId());
+        switch (level) {
+            case "1":
+                wrapper.ge("score", 0);
+                wrapper.lt("score", 2);
+                break;
+            case "2":
+                wrapper.ge("score", 2);
+                wrapper.lt("score", 3);
+                break;
+            case "3":
+                wrapper.ge("score", 3);
+                wrapper.lt("score", 4);
+                break;
+            case "4":
+                wrapper.ge("score", 4);
+                wrapper.lt("score", 5);
+                break;
+            case "5":
+                wrapper.eq("score", 5);
+                break;
+            default:
+                break;
+        }
+        //过滤是否回复
+        if (param.getIsRecover() != null) {
+            wrapper.eq("is_recover", param.getIsRecover());
         }
+        return (long) this.count(wrapper);
+    }
+    private List<GoodsAssessDto> queryAssessMessages(AssessQueryParam param){
+        QueryWrapper<GoodsAssess> wrapper = new QueryWrapper<>();
+
         //查询商品所有评价内容
         if (param.getGoodsId() != null) {
             wrapper.eq("goods_id", param.getGoodsId());
@@ -111,7 +155,6 @@ public class AssessServiceImpl extends ServiceImpl<GoodsAssessMapper, GoodsAsses
                 default:
                     break;
             }
-
         }
         //过滤是否回复
         if (param.getIsRecover() != null) {
@@ -134,9 +177,15 @@ 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());
+            if(null == user) {
+                EmployeeDTO employee = baseMapper.queryEmployeeInfo(item.getCreator());
+                if (null == employee) return;
+                item.setCreatorAvatar(null);
+                item.setCreatorNickName(employee.getUsername());
+            }else{
+                item.setCreatorAvatar(user.getAvatar());
+                item.setCreatorNickName(user.getNickname());
+            }
             item.setCreatorTimeFormat(SDF.format(item.getCreateTime()));
             AssessRecover assessRecover = assessRecoverMapper.selectOne(new QueryWrapper<AssessRecover>().eq(
                     "assess_id", item.getId()));
@@ -145,12 +194,6 @@ public class AssessServiceImpl extends ServiceImpl<GoodsAssessMapper, GoodsAsses
                 assessRecoverDto.setRecoverTimeFormat(SDF.format(assessRecoverDto.getRecoverTime()));
                 item.setAssessRecoverDto(assessRecoverDto);
             }
-            if (param.getId() != null) {
-                GoodsAssess updateAssess = this.getById(item.getId());
-                updateAssess.setHits(item.getHits() + 1);
-                this.updateById(updateAssess);
-            }
-
         }).collect(Collectors.toList());
     }
 
@@ -288,4 +331,35 @@ public class AssessServiceImpl extends ServiceImpl<GoodsAssessMapper, GoodsAsses
         List<GoodsAssess> list = this.list(wrapper);
         return GoodsAssessCopier.INSTANCE.copying(list);
     }
+
+    @Override
+    public GoodsAssessDto getDetail(Long assessId) {
+        GoodsAssess goodsAssess = getById(assessId);
+        GoodsAssessDto goodsAssessDto = GoodsAssessCopier.INSTANCE.copying(goodsAssess);
+        //个人信息获取
+        UserDTO user = userService.getUser(goodsAssessDto.getCreator());
+        if(null == user) {
+            EmployeeDTO employee = baseMapper.queryEmployeeInfo(goodsAssessDto.getCreator());
+            if (null != employee){
+                goodsAssessDto.setCreatorAvatar(null);
+                goodsAssessDto.setCreatorNickName(employee.getUsername());
+            }
+        }else{
+            goodsAssessDto.setCreatorAvatar(user.getAvatar());
+            goodsAssessDto.setCreatorNickName(user.getNickname());
+            goodsAssessDto.setCreatorTimeFormat(SDF.format(goodsAssessDto.getCreateTime()));
+        }
+
+        AssessRecover assessRecover = assessRecoverMapper.selectOne(new QueryWrapper<AssessRecover>().eq(
+                "assess_id", assessId));
+        if (assessRecover != null) {
+            AssessRecoverDto assessRecoverDto = AssessRecoverCopier.INSTANCE.copying(assessRecover);
+            assessRecoverDto.setRecoverTimeFormat(SDF.format(assessRecoverDto.getRecoverTime()));
+            goodsAssessDto.setAssessRecoverDto(assessRecoverDto);
+        }
+        GoodsAssess updateAssess = this.getById(goodsAssessDto.getId());
+        updateAssess.setHits(goodsAssessDto.getHits() + 1);
+        this.updateById(updateAssess);
+        return goodsAssessDto;
+    }
 }