Browse Source

新增商家查询接口;新增获取商家详情接口;

woody 1 năm trước cách đây
mục cha
commit
b3e24e2d4e
16 tập tin đã thay đổi với 314 bổ sung6 xóa
  1. 42 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/constant/Sort.java
  2. 5 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/GoodsDTO.java
  3. 1 1
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/MerchantDTO.java
  4. 36 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/MerchantDetailDTO.java
  5. 31 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/MerchantGoodsDTO.java
  6. 69 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/MerchantQueryParam.java
  7. 18 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/MerchantService.java
  8. 0 4
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/CategoryCopier.java
  9. 37 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/MerchantCopier.java
  10. 10 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/GoodsMapper.java
  11. 5 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Goods.java
  12. 1 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Merchant.java
  13. 9 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/GoodsService.java
  14. 7 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/GoodsServiceImpl.java
  15. 34 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java
  16. 9 0
      vehicle-server/src/main/resources/mapper/GoodsMapper.xml

+ 42 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/constant/Sort.java

@@ -0,0 +1,42 @@
+package com.chelvc.cloud.vehicle.api.constant;
+
+import com.chelvc.framework.base.model.Enumerable;
+import lombok.Getter;
+
+/**
+ * 排序规则枚举
+ *
+ * @author Woody
+ * @date 2023/7/20
+ */
+@Getter
+public enum Sort implements Enumerable {
+    /**
+     * 综合排序
+     */
+    SYNTHESE("综合排序"),
+
+    /**
+     * 离我最近
+     */
+    NEAREST("离我最近"),
+
+    /**
+     * 好评优先
+     */
+    FAVORITE("好评优先"),
+
+    /**
+     * 销量优先
+     */
+    BESTSELLING("销量优先");
+
+    /**
+     * 排序描述
+     */
+    private final String description;
+
+    Sort(String description) {
+        this.description = description;
+    }
+}

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

@@ -42,6 +42,11 @@ public class GoodsDTO implements Serializable {
      */
     private String name;
 
+    /**
+     * 商品Logo
+     */
+    private String logo;
+
     /**
      * 轮播图列表
      */

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

@@ -38,7 +38,7 @@ public class MerchantDTO implements Serializable {
     private String name;
 
     /**
-     * Logo
+     * 商家Logo
      */
     private String logo;
 

+ 36 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/MerchantDetailDTO.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/7/20
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MerchantDetailDTO implements Serializable {
+    /**
+     * 商家信息
+     */
+    private MerchantDTO merchant;
+
+    /**
+     * 分类列表
+     */
+    private List<CategoryDTO> categories;
+
+    /**
+     * 商品信息
+     */
+    private MerchantGoodsDTO goods;
+}

+ 31 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/MerchantGoodsDTO.java

@@ -0,0 +1,31 @@
+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/7/20
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MerchantGoodsDTO implements Serializable {
+    /**
+     * 商品总数
+     */
+    private Integer total;
+
+    /**
+     * 商品列表
+     */
+    private List<GoodsDTO> goods;
+}

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

@@ -0,0 +1,69 @@
+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 javax.validation.constraints.Size;
+
+import com.chelvc.cloud.vehicle.api.constant.Sort;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 商家查询参数
+ *
+ * @author Woody
+ * @date 2023/7/20
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MerchantQueryParam implements Serializable {
+    /**
+     * 经度
+     */
+    @NotNull(message = "经度不能为空")
+    private Double longitude;
+
+    /**
+     * 纬度
+     */
+    @NotNull(message = "纬度不能为空")
+    private Double latitude;
+
+    /**
+     * 关键字
+     */
+    @Size(max = 50, message = "关键字长度不能大于50")
+    private String keyword;
+
+    /**
+     * 分类ID
+     */
+    @Min(value = 1, message = "分类ID不能小于1")
+    private Long categoryId;
+
+    /**
+     * 偏移商家ID
+     */
+    @Min(value = 1, message = "偏移商家ID不能小于1")
+    private Long offset;
+
+    /**
+     * 排序规则
+     */
+    @NotNull(message = "排序规则不能为空")
+    private Sort sort;
+
+    /**
+     * 查询数量
+     */
+    @NotNull(message = "查询数量不能为空")
+    @Min(value = 1, message = "查询数量不能小于1")
+    @Max(value = 20, message = "查询数量不能大于20")
+    private Integer size;
+}

+ 18 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/MerchantService.java

@@ -3,6 +3,8 @@ package com.chelvc.cloud.vehicle.api.service;
 import java.util.List;
 
 import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
+import com.chelvc.cloud.vehicle.api.dto.MerchantDetailDTO;
+import com.chelvc.cloud.vehicle.api.param.MerchantQueryParam;
 import com.chelvc.cloud.vehicle.api.param.NearbyQueryParam;
 import com.chelvc.cloud.vehicle.api.param.PointQueryParam;
 
@@ -30,4 +32,20 @@ public interface MerchantService {
      * @return 商家信息列表
      */
     List<MerchantDTO> listNearbyMerchants(NearbyQueryParam param, int size);
+
+    /**
+     * 查询商家
+     *
+     * @param param 查询参数
+     * @return 商家信息列表
+     */
+    List<MerchantDTO> listSimpleMerchants(MerchantQueryParam param);
+
+    /**
+     * 获取商家详情
+     *
+     * @param id 商家ID
+     * @return 商家详情
+     */
+    MerchantDetailDTO getMerchantDetail(Long id);
 }

+ 0 - 4
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/CategoryCopier.java

@@ -7,10 +7,8 @@ import com.chelvc.cloud.vehicle.api.dto.CategoryDTO;
 import com.chelvc.cloud.vehicle.api.param.CategoryModifyParam;
 import com.chelvc.cloud.vehicle.server.entity.Category;
 import org.mapstruct.Builder;
-import org.mapstruct.IterableMapping;
 import org.mapstruct.Mapper;
 import org.mapstruct.MappingTarget;
-import org.mapstruct.Named;
 import org.mapstruct.factory.Mappers;
 
 /**
@@ -32,7 +30,6 @@ public interface CategoryCopier {
      * @param category 分类信息
      * @return 分类信息
      */
-    @Named("entity2dto")
     CategoryDTO copying(Category category);
 
     /**
@@ -41,7 +38,6 @@ public interface CategoryCopier {
      * @param categories 分类信息集合
      * @return 分类信息列表
      */
-    @IterableMapping(qualifiedByName = "entity2dto")
     List<CategoryDTO> copying(Collection<Category> categories);
 
     /**

+ 37 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/MerchantCopier.java

@@ -0,0 +1,37 @@
+package com.chelvc.cloud.vehicle.server.copier;
+
+import java.util.Collection;
+import java.util.List;
+
+import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
+import com.chelvc.cloud.vehicle.server.entity.Merchant;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 商家信息拷贝接口
+ *
+ * @author Woody
+ * @date 2023/7/20
+ */
+public interface MerchantCopier {
+    /**
+     * 对象拷贝接口实例
+     */
+    MerchantCopier INSTANCE = Mappers.getMapper(MerchantCopier.class);
+
+    /**
+     * 商家信息拷贝
+     *
+     * @param merchant 商家信息
+     * @return 商家信息
+     */
+    MerchantDTO copying(Merchant merchant);
+
+    /**
+     * 商家信息拷贝
+     *
+     * @param merchants 商家信息集合
+     * @return 商家信息列表
+     */
+    List<MerchantDTO> copying(Collection<Merchant> merchants);
+}

+ 10 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/GoodsMapper.java

@@ -1,8 +1,11 @@
 package com.chelvc.cloud.vehicle.server.dao;
 
+import java.util.List;
+
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.chelvc.cloud.vehicle.server.entity.Goods;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 商品数据操作接口
@@ -12,4 +15,11 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface GoodsMapper extends BaseMapper<Goods> {
+    /**
+     * 获取商家商品分类ID
+     *
+     * @param merchantId 商家ID
+     * @return 分类ID列表
+     */
+    List<Long> listMerchantGoodsCategoryIdentities(@Param("merchantId") Long merchantId);
 }

+ 5 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Goods.java

@@ -52,6 +52,11 @@ public class Goods extends ModifyEntity<Long> {
      */
     private String name;
 
+    /**
+     * 商品Logo
+     */
+    private String logo;
+
     /**
      * 轮播图列表
      */

+ 1 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Merchant.java

@@ -48,7 +48,7 @@ public class Merchant extends ModifyEntity<Long> {
     private String name;
 
     /**
-     * Logo
+     * 商家Logo
      */
     private String logo;
 

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

@@ -1,5 +1,7 @@
 package com.chelvc.cloud.vehicle.server.service;
 
+import java.util.List;
+
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.chelvc.cloud.vehicle.server.entity.Goods;
 
@@ -10,4 +12,11 @@ import com.chelvc.cloud.vehicle.server.entity.Goods;
  * @date 2023/7/17
  */
 public interface GoodsService extends IService<Goods> {
+    /**
+     * 获取商家商品分类ID
+     *
+     * @param merchantId 商家ID
+     * @return 分类ID列表
+     */
+    List<Long> listMerchantGoodsCategoryIdentities(Long merchantId);
 }

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

@@ -1,9 +1,12 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
+import java.util.List;
+
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chelvc.cloud.vehicle.server.dao.GoodsMapper;
 import com.chelvc.cloud.vehicle.server.entity.Goods;
 import com.chelvc.cloud.vehicle.server.service.GoodsService;
+import lombok.NonNull;
 import org.springframework.stereotype.Service;
 
 /**
@@ -14,4 +17,8 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements GoodsService {
+    @Override
+    public List<Long> listMerchantGoodsCategoryIdentities(@NonNull Long merchantId) {
+        return this.baseMapper.listMerchantGoodsCategoryIdentities(merchantId);
+    }
 }

+ 34 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java

@@ -3,14 +3,25 @@ package com.chelvc.cloud.vehicle.server.service.impl;
 import java.util.List;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.vehicle.api.dto.CategoryDTO;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
+import com.chelvc.cloud.vehicle.api.dto.MerchantDetailDTO;
+import com.chelvc.cloud.vehicle.api.param.MerchantQueryParam;
 import com.chelvc.cloud.vehicle.api.param.NearbyQueryParam;
 import com.chelvc.cloud.vehicle.api.param.PointQueryParam;
+import com.chelvc.cloud.vehicle.server.copier.CategoryCopier;
+import com.chelvc.cloud.vehicle.server.copier.MerchantCopier;
 import com.chelvc.cloud.vehicle.server.dao.MerchantMapper;
 import com.chelvc.cloud.vehicle.server.entity.Merchant;
+import com.chelvc.cloud.vehicle.server.service.CategoryService;
+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.base.util.ObjectUtils;
 import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * 商家业务操作实现
@@ -18,9 +29,13 @@ import org.apache.dubbo.config.annotation.DubboService;
  * @author Woody
  * @date 2023/5/2
  */
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
 @DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.MerchantService.class)
 public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> implements MerchantService,
         com.chelvc.cloud.vehicle.api.service.MerchantService {
+    private final GoodsService goodsService;
+    private final CategoryService categoryService;
+
     @Override
     public List<MerchantDTO> listRecommendMerchants(@NonNull PointQueryParam param, int size) {
         return this.baseMapper.listRecommendMerchants(param, size);
@@ -30,4 +45,23 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
     public List<MerchantDTO> listNearbyMerchants(@NonNull NearbyQueryParam param, int size) {
         return this.baseMapper.listNearbyMerchants(param, size);
     }
+
+    @Override
+    public List<MerchantDTO> listSimpleMerchants(@NonNull MerchantQueryParam param) {
+        return MerchantCopier.INSTANCE.copying(this.list());
+    }
+
+    @Override
+    public MerchantDetailDTO getMerchantDetail(@NonNull Long id) {
+        // 获取商家信息
+        MerchantDTO merchant = MerchantCopier.INSTANCE.copying(this.getById(id));
+        ErrorUtils.requireResource(merchant, "商家信息不存在");
+
+        // 获取商家商品分类信息
+        List<Long> categoryIds = this.goodsService.listMerchantGoodsCategoryIdentities(id);
+        List<CategoryDTO> categories = CategoryCopier.INSTANCE.copying(
+                ObjectUtils.ifEmpty(categoryIds, this.categoryService::listByIds)
+        );
+        return MerchantDetailDTO.builder().merchant(merchant).categories(categories).build();
+    }
 }

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

@@ -0,0 +1,9 @@
+<?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.GoodsMapper">
+    <select id="listMerchantGoodsCategoryIdentities" resultType="long">
+        select distinct category_id
+        from `goods`
+        where merchant_id = #{merchantId} and status = 'ONLINE'
+    </select>
+</mapper>