瀏覽代碼

新增获取商品详情逻辑;新增获取商品评价列表逻辑;

woody 1 年之前
父節點
當前提交
22aa45816f
共有 23 個文件被更改,包括 343 次插入10 次删除
  1. 7 0
      vehicle-api/pom.xml
  2. 12 1
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/CommentDTO.java
  3. 2 2
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/GoodsDTO.java
  4. 36 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/GoodsDetailDTO.java
  5. 37 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/CommentQueryParam.java
  6. 3 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/MerchantQueryParam.java
  7. 13 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/CommentService.java
  8. 9 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/GoodsService.java
  9. 7 0
      vehicle-server/pom.xml
  10. 29 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/GoodsCopier.java
  11. 13 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/CommentMapper.java
  12. 14 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/CouponMapper.java
  13. 7 2
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Comment.java
  14. 4 2
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Goods.java
  15. 12 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/CommentService.java
  16. 12 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/CouponService.java
  17. 32 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/CommentServiceImpl.java
  18. 9 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/CouponServiceImpl.java
  19. 33 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/GoodsServiceImpl.java
  20. 4 3
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java
  21. 25 0
      vehicle-server/src/main/resources/mapper/CommentMapper.xml
  22. 22 0
      vehicle-server/src/main/resources/mapper/CouponMapper.xml
  23. 1 0
      vehicle-server/src/main/resources/mapper/GoodsMapper.xml

+ 7 - 0
vehicle-api/pom.xml

@@ -16,10 +16,17 @@
     <version>1.0.0-SNAPSHOT</version>
 
     <properties>
+        <uc-api.version>1.0.0-SNAPSHOT</uc-api.version>
         <framework-base.version>1.0.0-RELEASE</framework-base.version>
     </properties>
 
     <dependencies>
+        <dependency>
+            <groupId>com.chelvc.cloud</groupId>
+            <artifactId>uc-api</artifactId>
+            <version>${uc-api.version}</version>
+            <optional>true</optional>
+        </dependency>
         <dependency>
             <groupId>com.chelvc.framework</groupId>
             <artifactId>framework-base</artifactId>

+ 12 - 1
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/CommentDTO.java

@@ -4,6 +4,7 @@ import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
 
+import com.chelvc.cloud.uc.api.dto.UserDTO;
 import com.chelvc.framework.base.model.File;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -11,7 +12,7 @@ import lombok.NoArgsConstructor;
 import lombok.experimental.SuperBuilder;
 
 /**
- * 商家评论信息
+ * 商品评价信息
  *
  * @author xp
  * @data 2023/3/31
@@ -46,6 +47,11 @@ public class CommentDTO implements Serializable {
      */
     private Long merchantId;
 
+    /**
+     * 评价打分
+     */
+    private Double score;
+
     /**
      * 评论内容
      */
@@ -60,4 +66,9 @@ public class CommentDTO implements Serializable {
      * 创建时间
      */
     private Date createTime;
+
+    /**
+     * 用户信息
+     */
+    private UserDTO user;
 }

+ 2 - 2
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/GoodsDTO.java

@@ -84,9 +84,9 @@ public class GoodsDTO implements Serializable {
     private Integer sale;
 
     /**
-     * 优惠券列表
+     * 优惠券ID列表
      */
-    private String coupons;
+    private List<Long> couponIds;
 
     /**
      * 商品状态

+ 36 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/GoodsDetailDTO.java

@@ -0,0 +1,36 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import java.io.Serializable;
+import java.util.List;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 商品详情
+ *
+ * @author Woody
+ * @date 2023/8/6
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class GoodsDetailDTO implements Serializable {
+    /**
+     * 商品信息
+     */
+    private GoodsDTO goods;
+
+    /**
+     * 优惠券列表
+     */
+    private List<CouponDTO> coupons;
+
+    /**
+     * 评价列表
+     */
+    private List<CommentDTO> comments;
+}

+ 37 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/CommentQueryParam.java

@@ -0,0 +1,37 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import java.io.Serializable;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 商品评价查询参数
+ *
+ * @author Woody
+ * @date 2023/8/7
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class CommentQueryParam implements Serializable {
+    /**
+     * 偏移评价ID
+     */
+    @Min(value = 1, message = "偏移评价ID不能小于1")
+    private Long offset;
+
+    /**
+     * 查询数量
+     */
+    @NotNull(message = "查询数量不能为空")
+    @Min(value = 1, message = "查询数量不能小于1")
+    @Max(value = 20, message = "查询数量不能大于20")
+    private Integer size;
+}

+ 3 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/MerchantQueryParam.java

@@ -1,5 +1,6 @@
 package com.chelvc.cloud.vehicle.api.param;
 
+import java.util.List;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
@@ -57,4 +58,6 @@ public class MerchantQueryParam extends LocationQueryParam {
     @Min(value = 1, message = "查询数量不能小于1")
     @Max(value = 20, message = "查询数量不能大于20")
     private Integer size;
+
+    private List<String> a;
 }

+ 13 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/CommentService.java

@@ -1,5 +1,10 @@
 package com.chelvc.cloud.vehicle.api.service;
 
+import java.util.List;
+
+import com.chelvc.cloud.vehicle.api.dto.CommentDTO;
+import com.chelvc.cloud.vehicle.api.param.CommentQueryParam;
+
 /**
  * 商家评论业务接口
  *
@@ -7,4 +12,12 @@ package com.chelvc.cloud.vehicle.api.service;
  * @data 2023/3/31
  */
 public interface CommentService {
+    /**
+     * 获取商品评价列表
+     *
+     * @param goodsId 商品ID
+     * @param param   查询参数
+     * @return 评价列表
+     */
+    List<CommentDTO> listGoodsComments(Long goodsId, CommentQueryParam param);
 }

+ 9 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/GoodsService.java

@@ -3,6 +3,7 @@ package com.chelvc.cloud.vehicle.api.service;
 import java.util.List;
 
 import com.chelvc.cloud.vehicle.api.dto.GoodsDTO;
+import com.chelvc.cloud.vehicle.api.dto.GoodsDetailDTO;
 import com.chelvc.cloud.vehicle.api.param.GoodsQueryParam;
 
 /**
@@ -12,6 +13,14 @@ import com.chelvc.cloud.vehicle.api.param.GoodsQueryParam;
  * @date 2023/8/6
  */
 public interface GoodsService {
+    /**
+     * 获取商品详情
+     *
+     * @param id 商品ID
+     * @return 商品详情
+     */
+    GoodsDetailDTO getGoodsDetail(Long id);
+
     /**
      * 查询商家商品
      *

+ 7 - 0
vehicle-server/pom.xml

@@ -16,6 +16,7 @@
     <version>1.0.0-SNAPSHOT</version>
 
     <properties>
+        <uc-api.version>1.0.0-SNAPSHOT</uc-api.version>
         <vehicle-api.version>1.0.0-SNAPSHOT</vehicle-api.version>
         <framework-base.version>1.0.0-RELEASE</framework-base.version>
         <framework-redis.version>1.0.0-RELEASE</framework-redis.version>
@@ -24,6 +25,12 @@
     </properties>
 
     <dependencies>
+        <dependency>
+            <groupId>com.chelvc.cloud</groupId>
+            <artifactId>uc-api</artifactId>
+            <version>${uc-api.version}</version>
+            <optional>true</optional>
+        </dependency>
         <dependency>
             <groupId>com.chelvc.cloud</groupId>
             <artifactId>vehicle-api</artifactId>

+ 29 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/GoodsCopier.java

@@ -0,0 +1,29 @@
+package com.chelvc.cloud.vehicle.server.copier;
+
+import com.chelvc.cloud.vehicle.api.dto.GoodsDTO;
+import com.chelvc.cloud.vehicle.server.entity.Goods;
+import org.mapstruct.Builder;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 商品信息拷贝接口
+ *
+ * @author Woody
+ * @date 2023/8/6
+ */
+@Mapper(builder = @Builder(disableBuilder = true))
+public interface GoodsCopier {
+    /**
+     * 对象拷贝接口实例
+     */
+    GoodsCopier INSTANCE = Mappers.getMapper(GoodsCopier.class);
+
+    /**
+     * 商品信息拷贝
+     *
+     * @param detail 商品详情
+     * @return 商品信息
+     */
+    GoodsDTO copying(Goods goods);
+}

+ 13 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/CommentMapper.java

@@ -1,8 +1,13 @@
 package com.chelvc.cloud.vehicle.server.dao;
 
+import java.util.List;
+
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.api.dto.CommentDTO;
+import com.chelvc.cloud.vehicle.api.param.CommentQueryParam;
 import com.chelvc.cloud.vehicle.server.entity.Comment;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 商家评价数据操作接口
@@ -12,4 +17,12 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface CommentMapper extends BaseMapper<Comment> {
+    /**
+     * 获取商品评价列表
+     *
+     * @param goodsId 商品ID
+     * @param param   查询参数
+     * @return 评价列表
+     */
+    List<CommentDTO> listGoodsComments(@Param("goodsId") Long goodsId, @Param("param") CommentQueryParam param);
 }

+ 14 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/CouponMapper.java

@@ -1,8 +1,13 @@
 package com.chelvc.cloud.vehicle.server.dao;
 
+import java.util.Collection;
+import java.util.List;
+
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.api.dto.CouponDTO;
 import com.chelvc.cloud.vehicle.server.entity.Coupon;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 优惠券数据操作接口
@@ -12,4 +17,13 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface CouponMapper extends BaseMapper<Coupon> {
+    /**
+     * 获取用户针对某个商品的可用优惠券
+     *
+     * @param userId         用户ID
+     * @param goodsCouponIds 商品优惠券ID集合
+     * @return 优惠券列表
+     */
+    List<CouponDTO> listUserGoodsActiveCoupons(@Param("userId") Long userId,
+                                               @Param("goodsCouponIds") Collection<Long> goodsCouponIds);
 }

+ 7 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Comment.java

@@ -16,7 +16,7 @@ import lombok.NoArgsConstructor;
 import lombok.experimental.SuperBuilder;
 
 /**
- * 服务评价数据模型
+ * 商品评价数据模型
  *
  * @author xp
  * @data 2023/4/1
@@ -54,7 +54,12 @@ public class Comment implements Entity<Long> {
     private Long merchantId;
 
     /**
-     * 评论内容
+     * 评价打分
+     */
+    private Double score;
+
+    /**
+     * 评价内容
      */
     private String content;
 

+ 4 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Goods.java

@@ -11,6 +11,7 @@ import com.chelvc.cloud.vehicle.api.constant.GoodsStatus;
 import com.chelvc.framework.base.model.File;
 import com.chelvc.framework.database.entity.ModifyEntity;
 import com.chelvc.framework.database.interceptor.FilesTypeHandler;
+import com.chelvc.framework.database.interceptor.LongsTypeHandler;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -95,9 +96,10 @@ public class Goods extends ModifyEntity<Long> {
     private Integer sale;
 
     /**
-     * 优惠券列表
+     * 优惠券ID列表
      */
-    private String coupons;
+    @TableField(typeHandler = LongsTypeHandler.class)
+    private List<Long> couponIds;
 
     /**
      * 商品状态

+ 12 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/CommentService.java

@@ -1,6 +1,10 @@
 package com.chelvc.cloud.vehicle.server.service;
 
+import java.util.List;
+
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.chelvc.cloud.vehicle.api.dto.CommentDTO;
+import com.chelvc.cloud.vehicle.api.param.CommentQueryParam;
 import com.chelvc.cloud.vehicle.server.entity.Comment;
 
 /**
@@ -10,4 +14,12 @@ import com.chelvc.cloud.vehicle.server.entity.Comment;
  * @data 2023/3/31
  */
 public interface CommentService extends IService<Comment> {
+    /**
+     * 获取商品评价列表
+     *
+     * @param goodsId 商品ID
+     * @param param   查询参数
+     * @return 评价列表
+     */
+    List<CommentDTO> listGoodsComments(Long goodsId, CommentQueryParam param);
 }

+ 12 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/CouponService.java

@@ -1,6 +1,10 @@
 package com.chelvc.cloud.vehicle.server.service;
 
+import java.util.Collection;
+import java.util.List;
+
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.chelvc.cloud.vehicle.api.dto.CouponDTO;
 import com.chelvc.cloud.vehicle.server.entity.Coupon;
 
 /**
@@ -10,4 +14,12 @@ import com.chelvc.cloud.vehicle.server.entity.Coupon;
  * @date 2023/7/17
  */
 public interface CouponService extends IService<Coupon> {
+    /**
+     * 获取用户针对某个商品的可用优惠券
+     *
+     * @param userId         用户ID
+     * @param goodsCouponIds 商品优惠券ID集合
+     * @return 优惠券列表
+     */
+    List<CouponDTO> listUserGoodsActiveCoupons(Long userId, Collection<Long> goodsCouponIds);
 }

+ 32 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/CommentServiceImpl.java

@@ -1,10 +1,24 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.uc.api.dto.UserDTO;
+import com.chelvc.cloud.uc.api.service.UserService;
+import com.chelvc.cloud.vehicle.api.dto.CommentDTO;
+import com.chelvc.cloud.vehicle.api.param.CommentQueryParam;
 import com.chelvc.cloud.vehicle.server.dao.CommentMapper;
 import com.chelvc.cloud.vehicle.server.entity.Comment;
 import com.chelvc.cloud.vehicle.server.service.CommentService;
+import lombok.NonNull;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.util.CollectionUtils;
 
 /**
  * 商家评论业务操作实现
@@ -15,4 +29,22 @@ import org.apache.dubbo.config.annotation.DubboService;
 @DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.CommentService.class)
 public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> implements CommentService,
         com.chelvc.cloud.vehicle.api.service.CommentService {
+    @DubboReference
+    private UserService userService;
+
+    @Override
+    public List<CommentDTO> listGoodsComments(@NonNull Long goodsId, @NonNull CommentQueryParam param) {
+        // 获取商品评价列表
+        List<CommentDTO> comments = this.baseMapper.listGoodsComments(goodsId, param);
+
+        // 加载评价用户信息
+        Set<Long> userIds = CollectionUtils.isEmpty(comments) ? Collections.emptySet() :
+                comments.stream().map(CommentDTO::getUserId).filter(Objects::nonNull).collect(Collectors.toSet());
+        if (!CollectionUtils.isEmpty(userIds)) {
+            Map<Long, UserDTO> users = this.userService.listUsers(userIds).stream()
+                    .collect(Collectors.toMap(UserDTO::getId, user -> user));
+            comments.forEach(comment -> comment.setUser(users.get(comment.getUserId())));
+        }
+        return comments;
+    }
 }

+ 9 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/CouponServiceImpl.java

@@ -1,9 +1,14 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
+import java.util.Collection;
+import java.util.List;
+
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.vehicle.api.dto.CouponDTO;
 import com.chelvc.cloud.vehicle.server.dao.CouponMapper;
 import com.chelvc.cloud.vehicle.server.entity.Coupon;
 import com.chelvc.cloud.vehicle.server.service.CouponService;
+import lombok.NonNull;
 import org.springframework.stereotype.Service;
 
 /**
@@ -14,4 +19,8 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> implements CouponService {
+    @Override
+    public List<CouponDTO> listUserGoodsActiveCoupons(@NonNull Long userId, Collection<Long> goodsCouponIds) {
+        return this.baseMapper.listUserGoodsActiveCoupons(userId, goodsCouponIds);
+    }
 }

+ 33 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/GoodsServiceImpl.java

@@ -5,12 +5,21 @@ import java.util.List;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chelvc.cloud.vehicle.api.constant.CategoryType;
 import com.chelvc.cloud.vehicle.api.dto.GoodsDTO;
+import com.chelvc.cloud.vehicle.api.dto.GoodsDetailDTO;
+import com.chelvc.cloud.vehicle.api.param.CommentQueryParam;
 import com.chelvc.cloud.vehicle.api.param.GoodsQueryParam;
+import com.chelvc.cloud.vehicle.server.copier.GoodsCopier;
 import com.chelvc.cloud.vehicle.server.dao.GoodsMapper;
 import com.chelvc.cloud.vehicle.server.entity.Goods;
+import com.chelvc.cloud.vehicle.server.service.CommentService;
+import com.chelvc.cloud.vehicle.server.service.CouponService;
 import com.chelvc.cloud.vehicle.server.service.GoodsService;
+import com.chelvc.framework.base.context.SessionContextHolder;
+import com.chelvc.framework.database.context.DatabaseContextHolder;
 import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 
 /**
@@ -19,9 +28,13 @@ import org.springframework.util.CollectionUtils;
  * @author Woody
  * @date 2023/7/17
  */
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
 @DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.GoodsService.class)
 public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements GoodsService,
         com.chelvc.cloud.vehicle.api.service.GoodsService {
+    private final CouponService couponService;
+    private final CommentService commentService;
+
     @Override
     public List<CategoryType> listMerchantGoodsCategoryTypes(@NonNull Long merchantId) {
         List<CategoryType> types = this.baseMapper.listMerchantGoodsCategoryTypes(merchantId);
@@ -31,6 +44,26 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         return types;
     }
 
+    @Override
+    public GoodsDetailDTO getGoodsDetail(@NonNull Long id) {
+        GoodsDetailDTO detail = GoodsDetailDTO.builder().build();
+
+        // 获取商品信息
+        Goods goods = DatabaseContextHolder.getRequireEntity(this, id, "商品不存在");
+        detail.setGoods(GoodsCopier.INSTANCE.copying(goods));
+
+        // 获取用户可用优惠券
+        if (!CollectionUtils.isEmpty(goods.getCouponIds())) {
+            Long userId = SessionContextHolder.getId();
+            detail.setCoupons(this.couponService.listUserGoodsActiveCoupons(userId, goods.getCouponIds()));
+        }
+
+        // 获取商品评价列表
+        CommentQueryParam param = CommentQueryParam.builder().size(10).build();
+        detail.setComments(this.commentService.listGoodsComments(id, param));
+        return detail;
+    }
+
     @Override
     public List<GoodsDTO> listMerchantSimpleGoods(@NonNull Long merchantId, @NonNull GoodsQueryParam param) {
         return this.baseMapper.listMerchantSimpleGoods(merchantId, param);

+ 4 - 3
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java

@@ -15,7 +15,7 @@ import com.chelvc.cloud.vehicle.server.dao.MerchantMapper;
 import com.chelvc.cloud.vehicle.server.entity.Merchant;
 import com.chelvc.cloud.vehicle.server.service.GoodsService;
 import com.chelvc.cloud.vehicle.server.service.MerchantService;
-import com.chelvc.framework.base.util.ErrorUtils;
+import com.chelvc.framework.database.context.DatabaseContextHolder;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboService;
@@ -51,8 +51,9 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
     @Override
     public MerchantDetailDTO getMerchantDetail(@NonNull Long id) {
         // 获取商家信息
-        MerchantDTO merchant = MerchantCopier.INSTANCE.copying(this.getById(id));
-        ErrorUtils.requireResource(merchant, "商家信息不存在");
+        MerchantDTO merchant = MerchantCopier.INSTANCE.copying(
+                DatabaseContextHolder.getRequireEntity(this, id, "商家不存在")
+        );
 
         // 获取商家全部商品列表
         List<GoodsDTO> goods = this.goodsService.listMerchantSimpleGoods(

+ 25 - 0
vehicle-server/src/main/resources/mapper/CommentMapper.xml

@@ -0,0 +1,25 @@
+<?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.chelvc.cloud.vehicle.server.dao.CommentMapper">
+    <resultMap id="SIMPLE_COMMENT_RESULT_MAP" type="com.chelvc.cloud.vehicle.api.dto.CommentDTO">
+        <id column="id" property="id" jdbcType="BIGINT"/>
+        <result column="user_id" property="userId" jdbcType="BIGINT"/>
+        <result column="score" property="score" jdbcType="DOUBLE"/>
+        <result column="content" property="content" jdbcType="VARCHAR"/>
+        <result column="attachments" property="attachments" jdbcType="VARCHAR"
+                typeHandler="com.chelvc.framework.database.interceptor.FilesTypeHandler"/>
+        <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <select id="listGoodsComments" resultMap="SIMPLE_COMMENT_RESULT_MAP">
+        select id, user_id, score, content, attachments, create_time
+        from `comment`
+        <where>
+            goods_id = #{goodsId}
+            <if test="param.offset != null">
+                and id > #{param.offset}
+            </if>
+        </where>
+        order by create_time desc limit #{param.size}
+    </select>
+</mapper>

+ 22 - 0
vehicle-server/src/main/resources/mapper/CouponMapper.xml

@@ -0,0 +1,22 @@
+<?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.chelvc.cloud.vehicle.server.dao.CouponMapper">
+    <select id="listUserGoodsActiveCoupons" resultType="com.chelvc.cloud.vehicle.api.dto.CouponDTO">
+        select cn.id, cn.type, cn.name, cn.amount, cn.reduce, cn.discount, cn.expiration
+        from `coupon` cn
+        left join `user_coupon` ucn on ucn.coupon_id = cn.id and ucn.user_id = #{userId}
+        <where>
+            ucn.id is null
+            and (
+            cn.merchant_id = 0
+            <if test="goodsCouponIds != null and !goodsCouponIds.isEmpty()">
+                or cn.id in
+                <foreach collection="goodsCouponIds" item="id" open="(" close=")" separator=",">
+                    #{id}
+                </foreach>
+            </if>
+            )
+            and cn.expiration > now() and cn.status = 'ONLINE'
+        </where>
+    </select>
+</mapper>

+ 1 - 0
vehicle-server/src/main/resources/mapper/GoodsMapper.xml

@@ -12,6 +12,7 @@
             <if test="param.type != null">
                 and type = #{param.type}
             </if>
+            and status = 'ONLINE'
         </where>
         limit #{param.size}
     </select>