Bläddra i källkod

商户订单顾客评价分页查询接口

wangzhijun 2 veckor sedan
förälder
incheckning
aed0ef8e69

+ 14 - 6
nightFragrance-massage/src/main/java/com/ylx/merchant/controller/ClientMerchantController.java

@@ -4,13 +4,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ylx.common.core.domain.R;
 import com.ylx.massage.service.IMaTechnicianService;
 import com.ylx.massage.service.ITechnicianMomentService;
-import com.ylx.merchant.domain.dto.MerchantDetailDTO;
-import com.ylx.merchant.domain.dto.MerchantListDTO;
-import com.ylx.merchant.domain.dto.MerchantMomentDTO;
-import com.ylx.merchant.domain.dto.MerchantProjectDTO;
+import com.ylx.merchant.domain.dto.*;
+import com.ylx.merchant.domain.vo.MerchantCommentVO;
 import com.ylx.merchant.domain.vo.MerchantDetailVO;
 import com.ylx.merchant.domain.vo.MerchantListVO;
 import com.ylx.merchant.domain.vo.MomentVO;
+import com.ylx.order.service.TCommentUserService;
 import com.ylx.project.domain.bookMerchant.vo.ProjectInfoVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -32,6 +31,8 @@ public class ClientMerchantController {
     private IMaTechnicianService maTechnicianService;
     @Resource
     private ITechnicianMomentService momentService;
+    @Resource
+    private TCommentUserService commentUserService;
 
     @PostMapping("/page")
     @ApiOperation("同城搭子分页查询接口")
@@ -42,18 +43,25 @@ public class ClientMerchantController {
 
     @PostMapping("/project/page")
     @ApiOperation("同城搭子商户技能分页查询接口")
-    public R<Page<ProjectInfoVO>> getByMerchantProject(@Validated @RequestBody MerchantProjectDTO dto) {
+    public R<Page<ProjectInfoVO>> getMerchantProject(@Validated @RequestBody MerchantProjectDTO dto) {
         Page<ProjectInfoVO> pageData = this.maTechnicianService.getByMerchantProject(dto);
         return R.ok(pageData);
     }
 
     @PostMapping("/moment/page")
     @ApiOperation("商户动态分页查询接口")
-    public R<Page<MomentVO>> getByMerchantMoment(@Validated @RequestBody MerchantMomentDTO dto) {
+    public R<Page<MomentVO>> getMerchantMoment(@Validated @RequestBody MerchantMomentDTO dto) {
         Page<MomentVO> pageData = this.momentService.getByMerchantMoment(dto);
         return R.ok(pageData);
     }
 
+    @PostMapping("/comment/page")
+    @ApiOperation("商户订单顾客评价分页查询接口")
+    public R<Page<MerchantCommentVO>> getMerchantComment(@Validated @RequestBody MerchantCommentDTO dto) {
+        Page<MerchantCommentVO> pageData = this.commentUserService.getMerchantComment(dto);
+        return R.ok(pageData);
+    }
+
     @PostMapping("/detail")
     @ApiOperation("商户主页商户详情接口")
     public R<MerchantDetailVO> getDetailById(@Validated @RequestBody MerchantDetailDTO dto) {

+ 20 - 0
nightFragrance-massage/src/main/java/com/ylx/merchant/domain/dto/MerchantCommentDTO.java

@@ -0,0 +1,20 @@
+package com.ylx.merchant.domain.dto;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ylx.merchant.domain.vo.MerchantCommentVO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+@ApiModel("商户顾客评价分页查询DTO")
+public class MerchantCommentDTO extends Page<MerchantCommentVO> implements Serializable {
+    private static final long serialVersionUID = 1797233685254362838L;
+
+    @NotNull(message = "商户ID不能为空")
+    @ApiModelProperty("商户ID")
+    private Long id;
+}

+ 46 - 0
nightFragrance-massage/src/main/java/com/ylx/merchant/domain/vo/MerchantCommentVO.java

@@ -0,0 +1,46 @@
+package com.ylx.merchant.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@ApiModel("客户端顾客评价vo")
+public class MerchantCommentVO implements Serializable {
+    private static final long serialVersionUID = -2958022930989152529L;
+
+    @ApiModelProperty("评论ID")
+    private String id;
+
+    @ApiModelProperty("用户昵称")
+    private String nickName;
+
+    @ApiModelProperty("用户头像")
+    private String userIcon;
+
+    @ApiModelProperty("综合评分")
+    private Integer star;
+
+    @ApiModelProperty("评价文本内容")
+    private String text;
+
+    @ApiModelProperty("图片列表")
+    private List<String> pictures;
+
+    @ApiModelProperty("项目名称")
+    private String projectName;
+
+    @ApiModelProperty("下单时间")
+    private Date createTime;
+
+    @ApiModelProperty("实付金额")
+    private BigDecimal finalAmount;
+
+    @ApiModelProperty("服务时长:分钟")
+    private Integer projectDuration;
+}

+ 8 - 2
nightFragrance-massage/src/main/java/com/ylx/order/domain/TCommentPicture.java

@@ -3,12 +3,12 @@ package com.ylx.order.domain;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.ylx.common.core.domain.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * 类描述:评论图片关联表
@@ -20,7 +20,7 @@ import java.io.Serializable;
 @Data
 @ApiModel("评论图片关联表")
 @TableName("t_comment_picture")
-public class TCommentPicture extends BaseEntity implements Serializable {
+public class TCommentPicture implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
@@ -37,5 +37,11 @@ public class TCommentPicture extends BaseEntity implements Serializable {
     @ApiModelProperty("排序顺序(从小到大显示)")
     private Integer sortOrder;
 
+    @ApiModelProperty("系统创建时间")
+    private Date createTime;
+
+    @ApiModelProperty("系统修改时间")
+    private Date updateTime;
+
 
 }

+ 4 - 1
nightFragrance-massage/src/main/java/com/ylx/order/mapper/TCommentUserMapper.java

@@ -2,6 +2,8 @@ package com.ylx.order.mapper;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ylx.merchant.domain.dto.MerchantCommentDTO;
+import com.ylx.merchant.domain.vo.MerchantCommentVO;
 import org.apache.ibatis.annotations.Param;
 import com.ylx.order.domain.TCommentUser;
 import com.ylx.order.domain.vo.TCommentUserAuditStatusCountVO;
@@ -39,7 +41,7 @@ public interface TCommentUserMapper extends BaseMapper<TCommentUser> {
      * @param tCommentUser
      * @return Page<TCommentUser>
      */
-     Page<TCommentUser> selectAll(Page<TCommentUser> page, @Param("tCommentUser") TCommentUser tCommentUser);
+    Page<TCommentUser> selectAll(Page<TCommentUser> page, @Param("tCommentUser") TCommentUser tCommentUser);
 
     /**
      * 查询用户评论审核状态统计。
@@ -49,5 +51,6 @@ public interface TCommentUserMapper extends BaseMapper<TCommentUser> {
      */
     TCommentUserAuditStatusCountVO selectAuditStatusCount(@Param("tCommentUser") TCommentUser tCommentUser);
 
+    Page<MerchantCommentVO> getMerchantComment(Page<MerchantCommentVO> page, @Param("dto") MerchantCommentDTO dto);
 }
 

+ 2 - 0
nightFragrance-massage/src/main/java/com/ylx/order/service/TCommentPictureService.java

@@ -27,4 +27,6 @@ public interface TCommentPictureService extends IService<TCommentPicture> {
      * @return 图片列表
      */
     List<TCommentPicture> getByCommentId(String commentId);
+
+    List<TCommentPicture> selectByCommentIds(List<String> commentIds);
 }

+ 3 - 0
nightFragrance-massage/src/main/java/com/ylx/order/service/TCommentUserService.java

@@ -3,6 +3,8 @@ package com.ylx.order.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ylx.common.core.domain.model.WxLoginUser;
+import com.ylx.merchant.domain.dto.MerchantCommentDTO;
+import com.ylx.merchant.domain.vo.MerchantCommentVO;
 import com.ylx.order.domain.TCommentUser;
 import com.ylx.order.domain.dto.OrderCommentDTO;
 import com.ylx.order.domain.vo.TCommentUserAuditStatusCountVO;
@@ -46,5 +48,6 @@ public interface TCommentUserService extends IService<TCommentUser> {
      */
     void submitComment(OrderCommentDTO dto);
 
+    Page<MerchantCommentVO> getMerchantComment(MerchantCommentDTO dto);
 }
 

+ 9 - 0
nightFragrance-massage/src/main/java/com/ylx/order/service/impl/TCommentPictureServiceImpl.java

@@ -13,6 +13,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
@@ -56,4 +57,12 @@ public class TCommentPictureServiceImpl extends ServiceImpl<TCommentPictureMappe
                 .orderByAsc(TCommentPicture::getSortOrder);
         return this.list(wrapper);
     }
+
+    @Override
+    public List<TCommentPicture> selectByCommentIds(List<String> commentIds) {
+        LambdaQueryWrapper<TCommentPicture> wrapper = Wrappers.lambdaQuery(TCommentPicture.class)
+                .in(TCommentPicture::getCommentId, commentIds)
+                .orderByAsc(TCommentPicture::getSortOrder);
+        return this.list(wrapper);
+    }
 }

+ 42 - 0
nightFragrance-massage/src/main/java/com/ylx/order/service/impl/TCommentUserServiceImpl.java

@@ -1,13 +1,17 @@
 package com.ylx.order.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ylx.common.core.domain.model.WxLoginUser;
 import com.ylx.common.exception.ServiceException;
+import com.ylx.merchant.domain.dto.MerchantCommentDTO;
+import com.ylx.merchant.domain.vo.MerchantCommentVO;
 import com.ylx.order.domain.CommentUserAudit;
 import com.ylx.massage.mapper.TCommentUserAuditMapper;
+import com.ylx.order.domain.TCommentPicture;
 import com.ylx.order.domain.TCommentUser;
 import com.ylx.order.mapper.TCommentUserMapper;
 import com.ylx.order.service.TCommentUserService;
@@ -20,8 +24,11 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 用户评论表(TCommentUser)表服务实现类
@@ -121,6 +128,41 @@ public class TCommentUserServiceImpl extends ServiceImpl<TCommentUserMapper, TCo
         }
         log.info("评论入库成功,评论ID:{},订单号:{},用户ID:{}", comment.getId(), dto.getOrderId(), userId);
     }
+
+    @Override
+    public Page<MerchantCommentVO> getMerchantComment(MerchantCommentDTO dto) {
+
+        Page<MerchantCommentVO> page = new Page<>(dto.getCurrent(), dto.getSize());
+        // 1.查询评论和订单基础信息
+        page = this.baseMapper.getMerchantComment(page, dto);
+        if(ObjectUtil.isNotNull(page) && ObjectUtil.isNotNull(page.getRecords())){
+            List<MerchantCommentVO> records = page.getRecords();
+
+            // 2. 提取所有评论ID
+            List<String> commentIds = records.stream()
+                    .map(MerchantCommentVO::getId)
+                    .collect(Collectors.toList());
+
+            // 3. 批量查询图片
+            List<TCommentPicture> pictures = tCommentPictureService.selectByCommentIds(commentIds);
+
+            // 4. 将图片分组并填充到 VO 中
+            Map<String, List<String>> pictureMap = pictures.stream()
+                    .collect(Collectors.groupingBy(
+                            TCommentPicture::getCommentId,
+                            Collectors.mapping(TCommentPicture::getPictureUrl, Collectors.toList())
+                    ));
+
+            for (MerchantCommentVO vo : records) {
+                // 设置图片列表,如果没有图片则为空列表
+                vo.setPictures(pictureMap.getOrDefault(vo.getId(), Collections.emptyList()));
+            }
+            page.setRecords(records);
+            return page;
+        }
+        return page;
+    }
+
     /**
      * 校验评论参数
      */

+ 25 - 0
nightFragrance-massage/src/main/resources/mapper/order/TCommentUserMapper.xml

@@ -91,5 +91,30 @@
         <include refid="CommentUserAuditBaseWhere"/>
     </select>
 
+    <select id="getMerchantComment" resultType="com.ylx.merchant.domain.vo.MerchantCommentVO">
+        SELECT
+            c.id,
+            c.nick_name,
+            c.user_icon,
+            c.star,
+            c.text,
+            o.project_name,
+            o.create_time,
+            o.final_amount,
+            o.project_duration
+        FROM
+            t_comment_user c
+        INNER JOIN t_comment_user_audit a ON c.id = a.comment_id
+        INNER JOIN t_order o ON c.order_id = o.id
+        WHERE
+            c.merchant_id = #{dto.id}
+        AND a.audit_status = 1
+        AND a.is_published = 1
+        AND c.is_delete = 0
+        AND a.is_delete = 0
+        ORDER BY
+            c.comment_time DESC
+    </select>
+
 </mapper>