瀏覽代碼

用户端订单评价

郭子栋 1 天之前
父節點
當前提交
027b76cccc
共有 18 個文件被更改,包括 518 次插入44 次删除
  1. 1 8
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TCommentUserController.java
  2. 7 2
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/CommentUserAudit.java
  3. 1 2
      nightFragrance-massage/src/main/java/com/ylx/massage/mapper/TCommentUserMapper.java
  4. 8 2
      nightFragrance-massage/src/main/java/com/ylx/massage/service/TCommentUserService.java
  5. 1 1
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TCommentUserAuditServiceImpl.java
  6. 110 1
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TCommentUserServiceImpl.java
  7. 39 0
      nightFragrance-massage/src/main/java/com/ylx/order/controller/OrderCommentController.java
  8. 41 0
      nightFragrance-massage/src/main/java/com/ylx/order/domain/TCommentPicture.java
  9. 35 21
      nightFragrance-massage/src/main/java/com/ylx/order/domain/TCommentUser.java
  10. 86 0
      nightFragrance-massage/src/main/java/com/ylx/order/domain/dto/OrderCommentDTO.java
  11. 10 1
      nightFragrance-massage/src/main/java/com/ylx/order/domain/vo/OrderDetailVO.java
  12. 51 0
      nightFragrance-massage/src/main/java/com/ylx/order/enums/AuditStatusEnum.java
  13. 18 0
      nightFragrance-massage/src/main/java/com/ylx/order/mapper/TCommentPictureMapper.java
  14. 30 0
      nightFragrance-massage/src/main/java/com/ylx/order/service/TCommentPictureService.java
  15. 59 0
      nightFragrance-massage/src/main/java/com/ylx/order/service/impl/TCommentPictureServiceImpl.java
  16. 3 1
      nightFragrance-massage/src/main/java/com/ylx/order/service/impl/TOrderServiceImpl.java
  17. 5 5
      nightFragrance-massage/src/main/resources/mapper/massage/TCommentUserMapper.xml
  18. 13 0
      nightFragrance-massage/src/main/resources/mapper/order/TCommentPictureMapper.xml

+ 1 - 8
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TCommentUserController.java

@@ -1,26 +1,19 @@
 package com.ylx.web.controller.massage;
 
 import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.ylx.common.core.controller.BaseController;
 import com.ylx.common.core.domain.R;
 import com.ylx.common.core.domain.model.WxLoginUser;
 import com.ylx.common.utils.SecurityUtils;
-import com.ylx.massage.domain.TComment;
-import com.ylx.massage.domain.TCommentUser;
 import com.ylx.massage.service.TCommentUserAuditService;
 import com.ylx.massage.service.TCommentUserService;
+import com.ylx.order.domain.TCommentUser;
 import com.ylx.system.domain.vo.ReviewUserCommentsDto;
 import com.ylx.system.domain.vo.BatchAuditCommentsDto;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;

+ 7 - 2
nightFragrance-massage/src/main/java/com/ylx/massage/domain/CommentUserAudit.java

@@ -32,9 +32,9 @@ public class CommentUserAudit implements Serializable {
     private String commentId;
 
     /**
-     * 订单
+     * 订单id
      */
-    private String orderNo;
+    private String orderId;
 
     /**
      * 评论内容
@@ -81,4 +81,9 @@ public class CommentUserAudit implements Serializable {
      */
     @TableLogic
     private Integer isDelete;
+
+    /**
+     * 是否上架:1=上架,0=下架
+     */
+    private Integer isPublished;
 }

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

@@ -3,9 +3,8 @@ package com.ylx.massage.mapper;
 import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
-import com.ylx.massage.domain.TCommentUser;
+import com.ylx.order.domain.TCommentUser;
 
 /**
  * 用户评论表(TCommentUser)表数据库访问层

+ 8 - 2
nightFragrance-massage/src/main/java/com/ylx/massage/service/TCommentUserService.java

@@ -2,8 +2,8 @@ package com.ylx.massage.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ylx.common.core.domain.model.WxLoginUser;
-import com.ylx.lottery.domain.vo.LocalActivityTableVO;
-import com.ylx.massage.domain.TCommentUser;
+import com.ylx.order.domain.TCommentUser;
+import com.ylx.order.domain.dto.OrderCommentDTO;
 
 import java.util.List;
 
@@ -32,5 +32,11 @@ public interface TCommentUserService extends IService<TCommentUser> {
      */
      List<TCommentUser> selectAll(TCommentUser tCommentUser);
 
+    /**
+     * 提交评论(入库+生成审核记录)
+     * @param dto 评论DTO
+     */
+    void submitComment(OrderCommentDTO dto);
+
 }
 

+ 1 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TCommentUserAuditServiceImpl.java

@@ -5,10 +5,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ylx.common.exception.ServiceException;
 import com.ylx.common.utils.StringUtils;
 import com.ylx.massage.domain.CommentUserAudit;
-import com.ylx.massage.domain.TCommentUser;
 import com.ylx.massage.mapper.TCommentUserAuditMapper;
 import com.ylx.massage.service.TCommentUserAuditService;
 import com.ylx.massage.service.TCommentUserService;
+import com.ylx.order.domain.TCommentUser;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 

+ 110 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TCommentUserServiceImpl.java

@@ -1,14 +1,25 @@
 package com.ylx.massage.service.impl;
 
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ylx.common.core.domain.model.WxLoginUser;
-import com.ylx.massage.domain.TCommentUser;
+import com.ylx.common.exception.ServiceException;
+import com.ylx.massage.domain.CommentUserAudit;
+import com.ylx.massage.mapper.TCommentUserAuditMapper;
+import com.ylx.order.domain.TCommentUser;
 import com.ylx.massage.mapper.TCommentUserMapper;
 import com.ylx.massage.service.TCommentUserService;
+import com.ylx.order.domain.dto.OrderCommentDTO;
+import com.ylx.order.enums.AuditStatusEnum;
+import com.ylx.order.service.TCommentPictureService;
 import lombok.extern.slf4j.Slf4j;
 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;
 
 /**
@@ -21,6 +32,14 @@ import java.util.List;
 @Service("tCommentUserService")
 public class TCommentUserServiceImpl extends ServiceImpl<TCommentUserMapper, TCommentUser> implements TCommentUserService {
 
+    @Resource
+    private TCommentUserMapper tCommentUserMapper;
+    @Resource
+    private TCommentUserAuditMapper tCommentUserAuditMapper;
+
+    @Resource
+    private TCommentPictureService tCommentPictureService;
+
     @Override
     public Boolean saveComment(TCommentUser comment, WxLoginUser wxLoginUser) {
         return null;
@@ -30,4 +49,94 @@ public class TCommentUserServiceImpl extends ServiceImpl<TCommentUserMapper, TCo
     public List<TCommentUser> selectAll(TCommentUser tCommentUser) {
         return Collections.emptyList();
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void submitComment(OrderCommentDTO dto) {
+        // 1. 参数校验
+        validateComment(dto);
+
+        // 1. 获取并校验当前用户
+//        WxLoginUser wxLoginUser = SecurityUtils.getWxLoginUser();
+//        if (ObjectUtil.isNull(wxLoginUser)) {
+//            throw new ServiceException("用户未登录");
+//        }
+
+        // 2. 构建评论实体 TCommentUser
+        TCommentUser comment = new TCommentUser();
+        String userId = "2052914416724815873";
+        comment.setUserId(userId);
+        comment.setOrderId(dto.getOrderId());
+        comment.setMerchantId(Math.toIntExact(dto.getMerchantId()));
+        comment.setMerchantName(dto.getMerchantName());
+        comment.setText(dto.getText());
+        comment.setExperienceComment(dto.getExperienceComment());
+        comment.setPriceComment(dto.getPriceComment());
+        comment.setAttitudeComment(dto.getAttitudeComment());
+        comment.setGroomingComment(dto.getGroomingComment());
+        comment.setCommentTime(new Date());
+        comment.setCreateTime(new Date());
+        comment.setUpdateTime(new Date());
+        comment.setIsDelete(0);
+
+        // 4. 保存评论到 t_comment_user
+        int insertResult = tCommentUserMapper.insert(comment);
+        if (insertResult <= 0) {
+            throw new RuntimeException("评论入库失败");
+        }
+
+        // 5. 构建审核记录 CommentUserAudit
+        CommentUserAudit audit = new CommentUserAudit();
+        audit.setCommentId(comment.getId());
+        audit.setOrderId(dto.getOrderId());
+        audit.setText(dto.getText());
+        audit.setAuditStatus(AuditStatusEnum.PENDING.getCode());
+        audit.setAuditReason(null);
+        audit.setAuditorId(null);
+        audit.setAuditorName(null);
+        audit.setAuditTime(null);
+        audit.setCreateTime(new Date());
+        audit.setUpdateTime(new Date());
+        audit.setIsDelete(0);
+        audit.setIsPublished(0);
+
+        int auditResult = tCommentUserAuditMapper.insert(audit);
+        if (auditResult <= 0) {
+            throw new ServiceException("评论审核记录入库失败");
+        }
+        // 5. 保存评论图片(新增)
+        List<String> pictureUrls = dto.getCommentPictures();
+        if (CollectionUtils.isNotEmpty(pictureUrls)) {
+            tCommentPictureService.batchSavePictures(comment.getId(), pictureUrls);
+        }
+        log.info("评论入库成功,评论ID:{},订单号:{},用户ID:{}", comment.getId(), dto.getOrderId(), userId);
+    }
+    /**
+     * 校验评论参数
+     */
+    private void validateComment(OrderCommentDTO dto) {
+        if (dto == null) {
+            throw new IllegalArgumentException("评论信息不能为空");
+        }
+        if (StrUtil.isBlank(dto.getOrderId())) {
+            throw new IllegalArgumentException("订单ID不能为空");
+        }
+        if (dto.getMerchantId() == null) {
+            throw new IllegalArgumentException("商户ID不能为空");
+        }
+        if (StrUtil.isBlank(dto.getText())) {
+            throw new IllegalArgumentException("评论内容不能为空");
+        }
+        // 评分校验:1-5分
+        checkScore(dto.getExperienceComment(), "体验评价");
+        checkScore(dto.getPriceComment(), "价格评价");
+        checkScore(dto.getAttitudeComment(), "态度评价");
+        checkScore(dto.getGroomingComment(), "仪表仪容评价");
+    }
+
+    private void checkScore(Integer score, String fieldName) {
+        if (score == null || score < 1 || score > 5) {
+            throw new IllegalArgumentException(fieldName + "必须在1~5分之间");
+        }
+    }
 }

+ 39 - 0
nightFragrance-massage/src/main/java/com/ylx/order/controller/OrderCommentController.java

@@ -0,0 +1,39 @@
+package com.ylx.order.controller;
+
+import com.ylx.common.core.domain.R;
+import com.ylx.massage.service.TCommentUserService;
+import com.ylx.order.domain.dto.OrderCommentDTO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 类描述:订单评论控制器
+ *
+ * @author Administrator
+ * @version 1.0
+ * @date 2026/6/9 15:59
+ */
+
+@Api(tags = "订单评论")
+@RestController
+@RequestMapping("/order/comment")
+@RequiredArgsConstructor
+public class OrderCommentController {
+
+    private final TCommentUserService tCommentUserService;
+
+    @ApiOperation("提交评论(用户评论技师)")
+    @PostMapping("/submit")
+    public R<?> submitComment(@Validated  @RequestBody OrderCommentDTO dto) {
+        tCommentUserService.submitComment(dto);
+        return R.ok("评价完成");
+    }
+
+
+}

+ 41 - 0
nightFragrance-massage/src/main/java/com/ylx/order/domain/TCommentPicture.java

@@ -0,0 +1,41 @@
+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;
+
+/**
+ * 类描述:评论图片关联表
+ *
+ * @author Administrator
+ * @version 1.0
+ * @date 2026/6/9 16:42
+ */
+@Data
+@ApiModel("评论图片关联表")
+@TableName("t_comment_picture")
+public class TCommentPicture extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("评论ID(关联 t_comment_user.id)")
+    private String commentId;
+
+    @ApiModelProperty("图片URL")
+    private String pictureUrl;
+
+    @ApiModelProperty("排序顺序(从小到大显示)")
+    private Integer sortOrder;
+
+
+}

+ 35 - 21
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TCommentUser.java → nightFragrance-massage/src/main/java/com/ylx/order/domain/TCommentUser.java

@@ -1,4 +1,4 @@
-package com.ylx.massage.domain;
+package com.ylx.order.domain;
 
 
 
@@ -41,23 +41,15 @@ public class TCommentUser extends Model<TCommentUser> {
     private String id;
 
     /**
-     * 用户OpenID
+     * 用户id
      * 微信用户的唯一标识,用于关联评论发布者
      */
-    @ApiModelProperty("用户openid")
-    private String openId;
-
-    /**
-     * 订单号
-     * 关联的订单编号,用于关联具体的服务订单
-     */
-    @ApiModelProperty("订单号")
-    private String orderNo;
+    @ApiModelProperty("用户id")
+    private String userId;
 
     /**
      * 订单id
      */
-    @TableField(exist = false)
     @ApiModelProperty("订单id")
     private String orderId;
 
@@ -76,20 +68,25 @@ public class TCommentUser extends Model<TCommentUser> {
     private Integer sensitiveWord;
 
     /**
-     * 技师ID
+     * 商户id
      * 被评论技师的唯一标识
      */
-    @ApiModelProperty("技师id")
-    private String jsId;
+    @ApiModelProperty("商户id")
+    private Integer merchantId;
 
     /**
      * 技师姓名
      * 冗余字段,存储被评论技师的姓名,便于查询展示
      */
     @ApiModelProperty("技师姓名")
-    private String name;
-
+    private String merchantName;
 
+    /**
+     * 头像地址
+     */
+    @TableField("user_icon")
+    @ApiModelProperty("头像地址")
+    private String userIcon;
     /**
      * 评论时间
      * 用户发布评论的时间戳
@@ -128,12 +125,29 @@ public class TCommentUser extends Model<TCommentUser> {
     @ApiModelProperty("昵称")
     private String nickName;
 
-     /**
-     * 分数
+    /**
+     *  体验评价等级1-5
+     */
+    @ApiModelProperty("体验评价等级1-5")
+    private Integer experienceComment;
+
+    /**
+     *  价格评价等级1-5
+     */
+    @ApiModelProperty("价格评价等级1-5")
+    private Integer priceComment;
+
+    /**
+     *  态度评价等级1-5
      */
-    @ApiModelProperty("分数")
-    private Integer star;
+    @ApiModelProperty("态度评价等级1-5")
+    private Integer attitudeComment;
 
+    /**
+     *  仪表仪容等级1-5
+     */
+    @ApiModelProperty("仪表仪容等级1-5")
+    private Integer groomingComment;
     /**
      * 审核状态:0待审核 1通过 2拒绝
      */

+ 86 - 0
nightFragrance-massage/src/main/java/com/ylx/order/domain/dto/OrderCommentDTO.java

@@ -0,0 +1,86 @@
+package com.ylx.order.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.List;
+
+/**
+ * 类描述:订单评论DTO
+ *
+ * @author Administrator
+ * @version 1.0
+ * @date 2026/6/9 15:27
+ */
+@Data
+public class OrderCommentDTO {
+
+    /**
+     * 订单id
+     */
+    @NotBlank(message = "订单id不能为空")
+    @ApiModelProperty("订单id")
+    private String orderId;
+
+    /**
+     * 商户id
+     * 被评论技师的唯一标识
+     */
+    @NotNull(message = "商户id不能为空")
+    @ApiModelProperty("商户id")
+    private Long merchantId;
+
+    /**
+     * 商户姓名
+     * 冗余字段,存储被评论技师的姓名,便于查询展示
+     */
+    @NotBlank(message = "商户姓名不能为空")
+    @ApiModelProperty("商户姓名")
+    private String merchantName;
+    /**
+     *  体验评价等级1-5
+     */
+    @NotNull(message = "体验评价等级不能为空")
+    @ApiModelProperty("体验评价等级1-5")
+    private Integer experienceComment;
+
+    /**
+     *  价格评价等级1-5
+     */
+    @NotNull(message = "价格评价等级不能为空")
+    @ApiModelProperty("价格评价等级1-5")
+    private Integer priceComment;
+
+    /**
+     *  态度评价等级1-5
+     */
+    @NotNull(message = "态度评价等级不能为空")
+    @ApiModelProperty("态度评价等级1-5")
+    private Integer attitudeComment;
+
+    /**
+     *  仪表仪容等级1-5
+     */
+    @NotNull(message = "仪表仪容等级不能为空")
+    @ApiModelProperty("仪表仪容等级1-5")
+    private Integer groomingComment;
+
+    /**
+     * 评论内容
+     * 用户对本次服务评价的文本内容
+     */
+    @NotBlank(message = "评论内容不能为空")
+    @ApiModelProperty("评论内容")
+    private String text;
+
+    /**
+     * 评论图片列表(多张)
+     * 最多支持9张图片,URL格式为完整http路径
+     */
+    @Size(max = 9, message = "最多上传9张图片")
+    @ApiModelProperty("评论图片列表")
+    private List<String> commentPictures;
+}

+ 10 - 1
nightFragrance-massage/src/main/java/com/ylx/order/domain/vo/OrderDetailVO.java

@@ -59,7 +59,13 @@ public class OrderDetailVO {
      */
     @ApiModelProperty("项目名称")
     private String projectName;
-
+    @ApiModelProperty("商户id")
+    private Long merchantId;
+    /**
+     * 商家名字
+     */
+    @ApiModelProperty("商家名字")
+    private String merchantName;
     /**
      * 项目时长
      */
@@ -116,6 +122,9 @@ public class OrderDetailVO {
     @ApiModelProperty("订单号")
     private String orderNo;
 
+    @ApiModelProperty("订单id")
+    private String orderId;
+
     @ApiModelProperty("下单时间")
     private String createTime;
 

+ 51 - 0
nightFragrance-massage/src/main/java/com/ylx/order/enums/AuditStatusEnum.java

@@ -0,0 +1,51 @@
+package com.ylx.order.enums;
+
+public enum AuditStatusEnum {
+    /**
+     * 待审核
+     */
+    PENDING(0, "待审核"),
+
+    /**
+     * 通过
+     */
+    APPROVED(1, "通过"),
+
+    /**
+     * 拒绝
+     */
+    REJECTED(2, "拒绝");
+
+    private final Integer code;
+    private final String desc;
+
+    AuditStatusEnum(Integer code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    /**
+     * 根据code获取枚举
+     * @param code 状态码
+     * @return 枚举对象,找不到返回null
+     */
+    public static AuditStatusEnum fromCode(Integer code) {
+        if (code == null) {
+            return null;
+        }
+        for (AuditStatusEnum status : values()) {
+            if (status.code.equals(code)) {
+                return status;
+            }
+        }
+        return null;
+    }
+}

+ 18 - 0
nightFragrance-massage/src/main/java/com/ylx/order/mapper/TCommentPictureMapper.java

@@ -0,0 +1,18 @@
+package com.ylx.order.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ylx.order.domain.TCommentPicture;
+import org.apache.ibatis.annotations.Mapper;
+
+
+/**
+ * 类描述:
+ *
+ * @author Administrator
+ * @version 1.0
+ * @date 2026/6/9 16:49
+ */
+@Mapper
+public interface TCommentPictureMapper extends BaseMapper<TCommentPicture> {
+}

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

@@ -0,0 +1,30 @@
+package com.ylx.order.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ylx.order.domain.TCommentPicture;
+
+import java.util.List;
+
+/**
+ * 类描述:
+ *
+ * @author Administrator
+ * @version 1.0
+ * @date 2026/6/9 16:51
+ */
+public interface TCommentPictureService extends IService<TCommentPicture> {
+
+    /**
+     * 批量保存评论图片
+     * @param commentId 评论ID
+     * @param pictureUrls 图片URL列表
+     */
+    void batchSavePictures(String commentId, List<String> pictureUrls);
+
+    /**
+     * 根据评论ID查询图片列表(已按排序顺序)
+     * @param commentId 评论ID
+     * @return 图片列表
+     */
+    List<TCommentPicture> getByCommentId(String commentId);
+}

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

@@ -0,0 +1,59 @@
+package com.ylx.order.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ylx.order.domain.TCommentPicture;
+import com.ylx.order.mapper.TCommentPictureMapper;
+import com.ylx.order.service.TCommentPictureService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 类描述:
+ *
+ * @author Administrator
+ * @version 1.0
+ * @date 2026/6/9 16:56
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class TCommentPictureServiceImpl extends ServiceImpl<TCommentPictureMapper, TCommentPicture> implements TCommentPictureService {
+
+    private final TCommentPictureMapper pictureMapper;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void batchSavePictures(String commentId, List<String> pictureUrls) {
+        if (commentId == null || CollectionUtil.isEmpty(pictureUrls)) {
+            return;
+        }
+        List<TCommentPicture> pictureList = new ArrayList<>();
+        for (int i = 0; i < pictureUrls.size(); i++) {
+            TCommentPicture picture = new TCommentPicture();
+            picture.setCommentId(commentId);
+            picture.setPictureUrl(pictureUrls.get(i));
+            picture.setSortOrder(i);
+            picture.setCreateTime(new Date());
+            pictureList.add(picture);
+        }
+        this.saveBatch(pictureList);
+        log.info("批量保存评论图片成功,commentId: {},图片数量: {}", commentId, pictureUrls.size());
+    }
+
+    @Override
+    public List<TCommentPicture> getByCommentId(String commentId) {
+        LambdaQueryWrapper<TCommentPicture> wrapper = Wrappers.lambdaQuery(TCommentPicture.class)
+                .eq(TCommentPicture::getCommentId, commentId)
+                .orderByAsc(TCommentPicture::getSortOrder);
+        return this.list(wrapper);
+    }
+}

+ 3 - 1
nightFragrance-massage/src/main/java/com/ylx/order/service/impl/TOrderServiceImpl.java

@@ -660,7 +660,9 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         vo.setTrafficFee(order.getTrafficFee());
         vo.setCouponDiscount(order.getCouponDiscount());
         vo.setOrderNo(order.getOrderNo());
-
+        vo.setOrderId(String.valueOf(order.getId()));
+        vo.setMerchantName(order.getMerchantNickName());
+        vo.setMerchantId(order.getMerchantId());
         // 时间处理
         if (order.getAppointmentStartTime() != null) {
             LocalDateTime start = order.getAppointmentStartTime();

+ 5 - 5
nightFragrance-massage/src/main/resources/mapper/massage/TCommentUserMapper.xml

@@ -2,12 +2,12 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ylx.massage.mapper.TCommentUserMapper">
 
-    <resultMap type="com.ylx.massage.domain.TCommentUser" id="TCommentUserMap">
+    <resultMap type="com.ylx.order.domain.TCommentUser" id="TCommentUserMap">
         <result property="id" column="id" jdbcType="VARCHAR"/>
         <result property="text" column="text" jdbcType="VARCHAR"/>
-        <result property="orderNo" column="order_no" jdbcType="VARCHAR"/>
-        <result property="jsId" column="js_id" jdbcType="VARCHAR"/>
-        <result property="openId" column="open_id" jdbcType="VARCHAR"/>
+        <result property="orderId" column="order_id" jdbcType="VARCHAR"/>
+        <result property="merchantId" column="merchant_id" jdbcType="INTEGER"/>
+        <result property="user_id" column="user_id" jdbcType="VARCHAR"/>
         <result property="commentTime" column="comment_time" jdbcType="TIMESTAMP"/>
         <result property="name" column="name" jdbcType="VARCHAR"/>
         <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
@@ -37,7 +37,7 @@
     </insert>
 
     <!-- 分页查询用户评论 -->
-    <select id="selectAll" resultType="com.ylx.massage.domain.TCommentUser">
+    <select id="selectAll" resultType="com.ylx.order.domain.TCommentUser">
         SELECT
             tcu.id as id,
             tcu.nick_name as nickName,

+ 13 - 0
nightFragrance-massage/src/main/resources/mapper/order/TCommentPictureMapper.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ylx.order.mapper.TCommentPictureMapper">
+    <!-- 通用结果映射 -->
+    <resultMap id="BaseResultMap" type="com.ylx.order.domain.TCommentPicture">
+        <id column="id" property="id"/>
+        <result column="comment_id" property="commentId"/>
+        <result column="picture_url" property="pictureUrl"/>
+        <result column="sort_order" property="sortOrder"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+</mapper>