浏览代码

优化商家查询接口

liude 1 年之前
父节点
当前提交
d89f3ed698

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

@@ -140,9 +140,18 @@ public class MerchantDTO implements Serializable {
      * 商家主营业务
      */
     private Long mainBusiness;
+    /**
+     * 商家主营业务名称
+     */
+    private String mainBusinessName;
     /**
      * 商家副营业务
      */
     private List<Long> ancillaryBusiness;
 
+    /**
+     * 商家副营业务名称
+     */
+    private List<String> ancillaryBusinessName;
+
 }

+ 5 - 2
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/HotMerchantService.java

@@ -1,7 +1,10 @@
 package com.chelvc.cloud.vehicle.api.service;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
 import com.chelvc.cloud.vehicle.api.param.HotMerchantModifyParam;
+import com.chelvc.cloud.vehicle.api.param.LocationQueryParam;
+import com.chelvc.cloud.vehicle.api.param.MerchantQueryParam;
 
+import javax.validation.Valid;
 import java.util.List;
 
 /**
@@ -24,14 +27,14 @@ public interface HotMerchantService {
      * 热门搜索商家
      * @return
      */
-    List<MerchantDTO> listHotMerchant();
+    List<MerchantDTO> listHotMerchant(LocationQueryParam param);
 
 
     /**
      * 猜你喜欢的商家
      * @return
      */
-    List<MerchantDTO> likeMerchant();
+    List<MerchantDTO> likeMerchant(LocationQueryParam param);
 
 
 

+ 6 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/HotMerchantMapper.java

@@ -2,9 +2,13 @@ package com.chelvc.cloud.vehicle.server.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
+import com.chelvc.cloud.vehicle.api.param.LocationQueryParam;
+import com.chelvc.cloud.vehicle.api.param.MerchantQueryParam;
 import com.chelvc.cloud.vehicle.server.entity.HotMerchant;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
+import javax.validation.Valid;
 import java.util.List;
 
 /**
@@ -19,11 +23,11 @@ public interface HotMerchantMapper extends BaseMapper<HotMerchant> {
      * 热门搜索商家
      * @return
      */
-    List<MerchantDTO> listHotMerchant();
+    List<MerchantDTO> listHotMerchant(@Param("param") LocationQueryParam param);
 
     /**
      * 猜你喜欢的商家
      * @return
      */
-    List<MerchantDTO> likeMerchant(Long userId);
+    List<MerchantDTO> likeMerchant(@Param("userId")Long userId,@Param("param")LocationQueryParam param);
 }

+ 7 - 4
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/HotMerchantServiceImpl.java

@@ -2,6 +2,8 @@ package com.chelvc.cloud.vehicle.server.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
+import com.chelvc.cloud.vehicle.api.param.LocationQueryParam;
+import com.chelvc.cloud.vehicle.api.param.MerchantQueryParam;
 import com.chelvc.cloud.vehicle.server.dao.HotMerchantMapper;
 import com.chelvc.cloud.vehicle.server.entity.HotMerchant;
 import com.chelvc.cloud.vehicle.server.service.HotMerchantService;
@@ -9,6 +11,7 @@ import com.chelvc.framework.base.context.SessionContextHolder;
 import lombok.NonNull;
 import org.apache.dubbo.config.annotation.DubboService;
 
+import javax.validation.Valid;
 import java.util.Date;
 import java.util.List;
 
@@ -35,14 +38,14 @@ public class HotMerchantServiceImpl extends ServiceImpl<HotMerchantMapper, HotMe
     }
 
     @Override
-    public List<MerchantDTO> listHotMerchant(){
-        return this.baseMapper.listHotMerchant();
+    public List<MerchantDTO> listHotMerchant(LocationQueryParam param){
+        return this.baseMapper.listHotMerchant(param);
     }
 
 
     @Override
-    public List<MerchantDTO> likeMerchant(){
+    public List<MerchantDTO> likeMerchant(@Valid LocationQueryParam param){
         Long userId = SessionContextHolder.getId();
-        return this.baseMapper.likeMerchant(userId);
+        return this.baseMapper.likeMerchant(userId,param);
     }
  }

+ 13 - 6
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java

@@ -108,6 +108,15 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
         MerchantDTO merchant = MerchantCopier.INSTANCE.copying(
                 AssertUtils.available(this.baseMapper.getMerchantById(id, param), "商家不存在")
         );
+        Category category = this.categoryService.getById(merchant.getMainBusiness());
+        if (null != category){
+            merchant.setMainBusinessName(category.getName());
+        }
+        List<Category> categoryList = this.categoryService.getCategories(merchant.getAncillaryBusiness());
+        List<String> ancillaryBusinessNames = categoryList.stream()
+                .map(Category::getName) //
+                .collect(Collectors.toList());
+        merchant.setAncillaryBusinessName(ancillaryBusinessNames);
         Long userId = SessionContextHolder.getSession().getId();
         //查询商家是否被收藏
         Integer count = this.baseMapper.merchantFavorite(id, userId);
@@ -117,14 +126,12 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
 
         // 获取商家全部商品列表
         List<GoodsDTO> goods = this.goodsService.listMerchantSimpleGoods(
-                id, GoodsQueryParam.builder().size(10).build()
+                id, GoodsQueryParam.builder().size(100).build()
         );
-
         // 获取商家商品分类类型列表
-//        List<CategoryType> types = this.goodsService.listMerchantGoodsCategoryTypes(id);
-        List<Long> idSet = goods.stream()
-                .map(GoodsDTO::getCategoryId) // 将每个Person对象映射到其id
-                .collect(Collectors.toList());
+        List<Long> idSet = new ArrayList<>();
+        idSet.add(merchant.getMainBusiness());
+        idSet.addAll(merchant.getAncillaryBusiness());
         if (idSet.isEmpty()) {
             return MerchantDetailDTO.builder().merchant(merchant).goods(goods).build();
         }

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

@@ -449,12 +449,12 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
      */
     private String generateOrderSn(OmsOrder order) {
         StringBuilder sb = new StringBuilder();
-        String date = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
+//        String date = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
 //        String key = REDIS_DATABASE+":"+ REDIS_KEY_ORDER_ID + date;
 //        Long increment = redisService.incr(key, 1);
-        sb.append(date);
+//        sb.append(date);
 //        sb.append(String.format("%02d", order.getSourceType()));
-        sb.append(String.format("%02d", new Random().nextInt(9000) + 1000));
+        sb.append(String.format("%02d", new Random().nextInt(900000) + 100000));
 //        String incrementStr = increment.toString();
 //        if (incrementStr.length() <= 6) {
 //            sb.append(String.format("%06d", increment));

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

@@ -2,7 +2,7 @@
 <!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="listMerchantSimpleGoods" resultType="com.chelvc.cloud.vehicle.api.dto.GoodsDTO">
-        select id, name, logo, original_price, special_price, score, sale,category_id categoryId
+        select id, name, logo, original_price, special_price, score, sale,category_id
         from `goods`
         <where>
             merchant_id = #{merchantId}

+ 13 - 3
vehicle-server/src/main/resources/mapper/HotmerchantMapper.xml

@@ -2,23 +2,33 @@
 <!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.HotMerchantMapper">
 
-    <select id="listHotMerchant" resultType="com.chelvc.cloud.vehicle.api.dto.MerchantDTO">
+    <select id="listHotMerchant" resultType="com.chelvc.cloud.vehicle.api.dto.MerchantDTO" parameterType="com.chelvc.cloud.vehicle.api.param.LocationQueryParam">
         select mt.id, mt.user_id as userId, mt.name, mt.logo, mt.banners, mt.liaison, mt.mobile,
                mt.opening, mt.address, mt.score, mt.sale, mt.good_review as goodReview,mt.region, mt.longitude,
                mt.latitude, mt.recommend, mt.status, mt.creator,
+               round(st_distance_sphere(
+                       point(mt.longitude, mt.latitude), point(#{param.longitude}, #{param.latitude})
+                   )) distance,
                mt.create_time as createTime FROM
             ( SELECT merchant_id, count( merchant_id ) FROM hot_merchant GROUP BY merchant_id ORDER BY count( merchant_id ) DESC ) t
                 LEFT JOIN merchant mt ON t.merchant_id = mt.id
+                where mt.region = #{param.region} and mt.status = 'ONLINE' and mt.recommend = 1
+                order by distance asc limit 20
     </select>
 
-    <select id="likeMerchant" resultType="com.chelvc.cloud.vehicle.api.dto.MerchantDTO">
+    <select id="likeMerchant" resultType="com.chelvc.cloud.vehicle.api.dto.MerchantDTO" parameterType="com.chelvc.cloud.vehicle.api.param.LocationQueryParam">
         select mt.id, mt.user_id as userId, mt.name, mt.logo, mt.banners, mt.liaison, mt.mobile,
                mt.opening, mt.address, mt.score, mt.sale, mt.good_review as goodReview,mt.region, mt.longitude,
                mt.latitude, mt.recommend, mt.status, mt.creator,
-               mt.create_time as createTime
+               mt.create_time as createTime,
+            round(st_distance_sphere(
+                       point(mt.longitude, mt.latitude), point(#{param.longitude}, #{param.latitude})
+                   )) distance
             FROM
                 ( SELECT merchant_id,user_id, count( merchant_id) FROM hot_merchant GROUP BY merchant_id,user_id ORDER BY count( merchant_id ) DESC ) t
                 LEFT JOIN merchant mt ON t.merchant_id = mt.id where t.user_id = #{userId}
+                and mt.region = #{param.region} and mt.status = 'ONLINE' and mt.recommend = 1
+            order by distance asc limit 20
     </select>
 
 </mapper>

+ 4 - 11
vehicle-server/src/main/resources/mapper/MerchantMapper.xml

@@ -34,16 +34,6 @@
             point(mt.longitude, mt.latitude), point(#{longitude}, #{latitude})
         )) distance
         from `merchant` mt
-        <if test="categoryId != null or (keyword != null and !keyword.isEmpty())">
-            left join `goods` gs on gs.merchant_id = mt.id
-            <if test="categoryId != null">
-                and gs.category_id = #{categoryId}
-            </if>
-            <if test="keyword != null and !keyword.isEmpty()">
-                and (gs.name like concat('%', #{keyword}, '%') or gs.description like concat('%', #{keyword}, '%'))
-            </if>
-            and gs.status = 'ONLINE'
-        </if>
         <where>
             <if test="offset != null">
                 mt.id > #{offset}
@@ -52,6 +42,9 @@
             <if test="keyword != null and !keyword.isEmpty()">
                 and mt.name like concat('%', #{keyword}, '%')
             </if>
+            <if test="categoryId != null">
+                and  (mt.main_business = #{categoryId} or mt.ancillary_business like concat('%',#{categoryId} , '%'))
+            </if>
         </where>
         <if test="sort != null and sort.name == 'SYNTHESE'">
             order by mt.recommend desc
@@ -71,7 +64,7 @@
     <select id="getMerchantById" resultType="com.chelvc.cloud.vehicle.server.entity.Merchant">
         select mt.id, mt.user_id as userId, mt.name, mt.logo, mt.banners, mt.liaison, mt.mobile,
         mt.opening, mt.address, mt.score, mt.sale, mt.good_review as goodReview,mt.region, mt.longitude,
-        mt.latitude, mt.recommend, mt.status, mt.creator,mt.business_status,
+        mt.latitude, mt.recommend, mt.status, mt.creator,mt.business_status,mt.main_business,mt.ancillary_business,
         mt.create_time as createTime,
         round(st_distance_sphere(
         point(mt.longitude, mt.latitude), point(#{param.longitude}, #{param.latitude})