Преглед на файлове

新增获取商品详情接口;新增获取商品评价列表接口;

woody преди 1 година
родител
ревизия
7725980c38

+ 44 - 0
src/main/java/com/chelvc/cloud/maintain/controller/CommentController.java

@@ -0,0 +1,44 @@
+package com.chelvc.cloud.maintain.controller;
+
+import java.util.List;
+import javax.validation.Valid;
+import javax.validation.constraints.Min;
+
+import com.chelvc.cloud.maintain.copier.CommentCopier;
+import com.chelvc.cloud.maintain.vo.CommentVO;
+import com.chelvc.cloud.vehicle.api.param.CommentQueryParam;
+import com.chelvc.cloud.vehicle.api.service.CommentService;
+import com.chelvc.framework.base.annotation.UnifiedResponseBody;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 商品评价接口
+ *
+ * @author Woody
+ * @date 2023/8/7
+ */
+@Validated
+@RestController
+@UnifiedResponseBody
+public class CommentController {
+    @DubboReference
+    private CommentService commentService;
+
+    /**
+     * 获取商品评价列表
+     *
+     * @param goodsId 商品ID
+     * @param param   查询参数
+     * @return 商品评价列表
+     */
+    @GetMapping("/goods/{goodsId}/comments")
+    public List<CommentVO> listGoodsComments(
+            @PathVariable("goodsId") @Min(value = 1, message = "商品ID不能小于1") Long goodsId,
+            @Valid CommentQueryParam param) {
+        return CommentCopier.INSTANCE.copying(this.commentService.listGoodsComments(goodsId, param));
+    }
+}

+ 12 - 0
src/main/java/com/chelvc/cloud/maintain/controller/GoodsController.java

@@ -5,6 +5,7 @@ import javax.validation.Valid;
 import javax.validation.constraints.Min;
 
 import com.chelvc.cloud.maintain.copier.GoodsCopier;
+import com.chelvc.cloud.maintain.vo.GoodsDetailVO;
 import com.chelvc.cloud.maintain.vo.SimpleGoodsVO;
 import com.chelvc.cloud.vehicle.api.param.GoodsQueryParam;
 import com.chelvc.cloud.vehicle.api.service.GoodsService;
@@ -28,6 +29,17 @@ public class GoodsController {
     @DubboReference
     private GoodsService goodsService;
 
+    /**
+     * 获取商品详情
+     *
+     * @param id 商品ID
+     * @return 商品详情
+     */
+    @GetMapping("/goods/{id}")
+    public GoodsDetailVO getGoodsDetail(@PathVariable("id") @Min(value = 1, message = "商品ID不能小于1") Long id) {
+        return GoodsCopier.INSTANCE.copying(this.goodsService.getGoodsDetail(id));
+    }
+
     /**
      * 获取商家商品列表
      *

+ 32 - 0
src/main/java/com/chelvc/cloud/maintain/copier/CommentCopier.java

@@ -0,0 +1,32 @@
+package com.chelvc.cloud.maintain.copier;
+
+import java.util.Collection;
+import java.util.List;
+
+import com.chelvc.cloud.maintain.vo.CommentVO;
+import com.chelvc.cloud.vehicle.api.dto.CommentDTO;
+import org.mapstruct.Builder;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 评价信息拷贝接口
+ *
+ * @author Woody
+ * @date 2023/8/7
+ */
+@Mapper(builder = @Builder(disableBuilder = true))
+public interface CommentCopier {
+    /**
+     * 对象拷贝接口实例
+     */
+    CommentCopier INSTANCE = Mappers.getMapper(CommentCopier.class);
+
+    /**
+     * 评价信息拷贝
+     *
+     * @param comments 评价信息集合
+     * @return 评价信息列表
+     */
+    List<CommentVO> copying(Collection<CommentDTO> comments);
+}

+ 10 - 0
src/main/java/com/chelvc/cloud/maintain/copier/GoodsCopier.java

@@ -3,8 +3,10 @@ package com.chelvc.cloud.maintain.copier;
 import java.util.Collection;
 import java.util.List;
 
+import com.chelvc.cloud.maintain.vo.GoodsDetailVO;
 import com.chelvc.cloud.maintain.vo.SimpleGoodsVO;
 import com.chelvc.cloud.vehicle.api.dto.GoodsDTO;
+import com.chelvc.cloud.vehicle.api.dto.GoodsDetailDTO;
 import org.mapstruct.Builder;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
@@ -22,6 +24,14 @@ public interface GoodsCopier {
      */
     GoodsCopier INSTANCE = Mappers.getMapper(GoodsCopier.class);
 
+    /**
+     * 商品信息拷贝
+     *
+     * @param detail 商品详情
+     * @return 商品信息
+     */
+    GoodsDetailVO copying(GoodsDetailDTO detail);
+
     /**
      * 商品信息拷贝
      *

+ 53 - 0
src/main/java/com/chelvc/cloud/maintain/vo/CommentVO.java

@@ -0,0 +1,53 @@
+package com.chelvc.cloud.maintain.vo;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import com.chelvc.framework.base.model.File;
+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 CommentVO implements Serializable {
+    /**
+     * 评价ID
+     */
+    private Long id;
+
+    /**
+     * 用户信息
+     */
+    private UserVO user;
+
+    /**
+     * 评价打分
+     */
+    private Double score;
+
+    /**
+     * 评价内容
+     */
+    private String content;
+
+    /**
+     * 附件列表
+     */
+    private List<File> attachments;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}

+ 57 - 0
src/main/java/com/chelvc/cloud/maintain/vo/CouponVO.java

@@ -0,0 +1,57 @@
+package com.chelvc.cloud.maintain.vo;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.chelvc.cloud.vehicle.api.constant.CouponType;
+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 CouponVO implements Serializable {
+    /**
+     * 优惠券ID
+     */
+    private Long id;
+
+    /**
+     * 优惠券类型
+     */
+    private CouponType type;
+
+    /**
+     * 优惠券名称
+     */
+    private String name;
+
+    /**
+     * 优惠金额
+     */
+    private Double amount;
+
+    /**
+     * 满减金额
+     */
+    private Double reduce;
+
+    /**
+     * 优惠折扣
+     */
+    private Double discount;
+
+    /**
+     * 过期时间
+     */
+    private Date expiration;
+}

+ 36 - 0
src/main/java/com/chelvc/cloud/maintain/vo/GoodsDetailVO.java

@@ -0,0 +1,36 @@
+package com.chelvc.cloud.maintain.vo;
+
+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 GoodsDetailVO implements Serializable {
+    /**
+     * 商品信息
+     */
+    private GoodsVO goods;
+
+    /**
+     * 优惠券列表
+     */
+    private List<CouponVO> coupons;
+
+    /**
+     * 评价列表
+     */
+    private List<CommentVO> comments;
+}

+ 57 - 0
src/main/java/com/chelvc/cloud/maintain/vo/GoodsVO.java

@@ -0,0 +1,57 @@
+package com.chelvc.cloud.maintain.vo;
+
+import java.io.Serializable;
+import java.util.List;
+
+import com.chelvc.framework.base.model.File;
+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 GoodsVO implements Serializable {
+    /**
+     * 商品ID
+     */
+    private Long id;
+
+    /**
+     * 商品名称
+     */
+    private String name;
+
+    /**
+     * 商品评分
+     */
+    private Double score;
+
+    /**
+     * 商品原价
+     */
+    private Double originalPrice;
+
+    /**
+     * 优惠价格
+     */
+    private Double specialPrice;
+
+    /**
+     * 商品描述
+     */
+    private String description;
+
+    /**
+     * 轮播图列表
+     */
+    private List<File> banners;
+}

+ 35 - 0
src/main/java/com/chelvc/cloud/maintain/vo/UserVO.java

@@ -0,0 +1,35 @@
+package com.chelvc.cloud.maintain.vo;
+
+import java.io.Serializable;
+
+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 UserVO implements Serializable {
+    /**
+     * 用户ID
+     */
+    private Long id;
+
+    /**
+     * 用户头像
+     */
+    private String avatar;
+
+    /**
+     * 用户昵称
+     */
+    private String nickname;
+}