Parcourir la source

商家列表优化,支持分页、服务名称模糊查询

liude il y a 4 mois
Parent
commit
b651e5eb94

+ 11 - 0
vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/MerchantClient.java

@@ -12,6 +12,7 @@ import com.chelvc.cloud.vehicle.client.param.LocationQueryParam;
 import com.chelvc.cloud.vehicle.client.param.MerchantModifyParam;
 import com.chelvc.cloud.vehicle.client.param.MerchantPagingParam;
 import com.chelvc.cloud.vehicle.client.param.MerchantQueryParam;
+import com.chelvc.cloud.vehicle.client.param.MerchantQueryParamPaging;
 import com.chelvc.cloud.vehicle.client.param.MerchantRankParam;
 import com.chelvc.cloud.vehicle.client.param.OmsCartItemPagingParam;
 import com.chelvc.cloud.vehicle.client.param.ReportModifyParam;
@@ -70,6 +71,16 @@ public interface MerchantClient {
     @GetMapping("/merchant/listSimpleMerchants")
     List<MerchantDTO> listSimpleMerchants(@SpringQueryMap MerchantQueryParam param);
 
+
+    /**
+     * 分页查询商家
+     *
+     * @param param 查询参数
+     * @return 商家信息列表
+     */
+    @GetMapping("/merchant/merchantPagingList")
+    Pagination<MerchantDTO> merchantPagingList(@SpringQueryMap MerchantQueryParamPaging param);
+
     /**
      * 获取商家详情
      *

+ 53 - 0
vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/param/MerchantQueryParamPaging.java

@@ -0,0 +1,53 @@
+package com.chelvc.cloud.vehicle.client.param;
+
+import com.chelvc.cloud.vehicle.client.constant.Sort;
+import com.chelvc.framework.common.model.Paging;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+/**
+ * 商家查询参数
+ *
+ * @author Woody
+ * @date 2023/7/20
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+public class MerchantQueryParamPaging extends LocationQueryParam {
+    /**
+     * 关键字
+     */
+    @Size(max = 50, message = "关键字长度不能大于50")
+    private String keyword;
+
+    /**
+     * 分类ID
+     */
+    @Min(value = 1, message = "分类ID不能小于1")
+    private Long categoryId;
+
+    /**
+     * 排序规则
+     */
+    @NotNull(message = "排序规则不能为空")
+    private Sort sort;
+
+    /**
+     * 分页信息
+     */
+    @NotNull(message = "分页不能为空")
+    private Paging paging;
+}

+ 12 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/controller/MerchantController.java

@@ -12,6 +12,7 @@ import com.chelvc.cloud.vehicle.client.param.LocationQueryParam;
 import com.chelvc.cloud.vehicle.client.param.MerchantModifyParam;
 import com.chelvc.cloud.vehicle.client.param.MerchantPagingParam;
 import com.chelvc.cloud.vehicle.client.param.MerchantQueryParam;
+import com.chelvc.cloud.vehicle.client.param.MerchantQueryParamPaging;
 import com.chelvc.cloud.vehicle.client.param.MerchantRankParam;
 import com.chelvc.cloud.vehicle.client.param.OmsCartItemPagingParam;
 import com.chelvc.cloud.vehicle.client.param.ReportModifyParam;
@@ -88,6 +89,17 @@ public class MerchantController {
         return merchantService.listSimpleMerchants(param);
     }
 
+    /**
+     * 分页查询商家
+     *
+     * @param param 查询参数
+     * @return 商家信息列表
+     */
+    @GetMapping("/merchant/merchantPagingList")
+    public Pagination<MerchantDTO> merchantPagingList(MerchantQueryParamPaging param) {
+        return merchantService.merchantPagingList(param);
+    }
+
     /**
      * 获取商家详情
      *

+ 9 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/MerchantMapper.java

@@ -9,6 +9,7 @@ import com.chelvc.cloud.vehicle.client.dto.MerchantRankDTO;
 import com.chelvc.cloud.vehicle.client.param.LocationQueryPagingParam;
 import com.chelvc.cloud.vehicle.client.param.LocationQueryParam;
 import com.chelvc.cloud.vehicle.client.param.MerchantQueryParam;
+import com.chelvc.cloud.vehicle.client.param.MerchantQueryParamPaging;
 import com.chelvc.cloud.vehicle.server.entity.Merchant;
 import com.chelvc.framework.common.model.Pagination;
 import org.apache.ibatis.annotations.Mapper;
@@ -71,6 +72,14 @@ public interface MerchantMapper extends BaseMapper<Merchant> {
      */
     List<MerchantDTO> listSimpleMerchants(MerchantQueryParam param);
 
+    /**
+     * 分页查询商家
+     *
+     * @param param 查询参数
+     * @return 商家信息列表
+     */
+    Page<MerchantDTO> merchantPagingList(IPage<MerchantQueryParamPaging> page, @Param("param")MerchantQueryParamPaging param);
+
     /**
      * 获取商家详情
      *

+ 2 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/OmsOrderMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.chelvc.cloud.vehicle.client.dto.*;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrder;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrderItem;
+import com.chelvc.framework.database.support.EnhanceMapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -19,7 +20,7 @@ import java.util.Map;
  * @date 2023-11-08
  */
 @Mapper
-public interface OmsOrderMapper extends BaseMapper<OmsOrder>
+public interface OmsOrderMapper extends EnhanceMapper<OmsOrder>
 {
     /**
      * 查询订单

+ 8 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/MerchantService.java

@@ -102,6 +102,14 @@ public interface MerchantService extends IService<Merchant> {
      */
     List<MerchantDTO> listSimpleMerchants(MerchantQueryParam param);
 
+    /**
+     * 分页查询商家
+     *
+     * @param param 查询参数
+     * @return 商家信息列表
+     */
+    Pagination<MerchantDTO> merchantPagingList(MerchantQueryParamPaging param);
+
     /**
      * 获取商家详情
      *

+ 2 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/OmsOrderService.java

@@ -6,6 +6,7 @@ import com.chelvc.cloud.vehicle.client.param.OmsOrderModifyParam;
 import com.chelvc.cloud.vehicle.client.param.OrderPagingParam;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrder;
 import com.chelvc.framework.common.model.Pagination;
+import com.chelvc.framework.database.support.EnhanceService;
 import com.chelvc.framework.wechat.WechatUnifiedOrder;
 
 import java.math.BigDecimal;
@@ -17,7 +18,7 @@ import java.util.Map;
  * @author liude
  * @date 2023-11-08
  */
-public interface OmsOrderService extends IService<OmsOrder>
+public interface OmsOrderService extends EnhanceService<OmsOrder>
 {
     /**
      * 查询商家上个月的营业额

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

@@ -114,6 +114,18 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
         return list;
     }
 
+    @Override
+    public Pagination<MerchantDTO> merchantPagingList(@NonNull MerchantQueryParamPaging param) {
+        IPage<MerchantQueryParamPaging> iPage = new Page<>();
+        iPage.setCurrent(param.getPaging().getNumber());
+        iPage.setSize(param.getPaging().getSize());
+        Page<MerchantDTO> page = this.baseMapper.merchantPagingList(iPage,param);
+        page.getRecords().forEach(item ->{
+            item.setMainBusinessName(this.categoryService.getById(item.getMainBusiness()).getName());
+        });
+        return DatabaseContextHolder.pagination(page);
+    }
+
     @Override
     public MerchantDetailDTO getMerchantDetail(@NonNull Long id) {
         // 获取商家信息
@@ -428,6 +440,7 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
 //    @Scheduled(cron = "5 * * * * ?")
     public void batchMerchantBusinessStatus() {
         List<Merchant> merchantList = this.lambdaQuery().list();
+        //星期一至星期六: 09:00~18:00
         merchantList.forEach(item -> {
             String opening = "10:00:00,18:00:00";
             String[] openStr = opening.split(",");

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

@@ -66,6 +66,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
 
     private final MerchantService merchantService;
 
+
     private final OrderHandleService orderHandleService;
     private final OmsOrderOperateHistoryService omsOrderOperateHistoryService;
 
@@ -268,7 +269,10 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
             order.setAutoConfirmDay(orderSettings.get(0).getConfirmOvertime());
         }
         //插入order表和order_item表
-        this.baseMapper.insert(order);
+        if (!this.createIgnore(order)){
+            order.setOrderSn(generateOrderSn(6));
+            this.createIgnore(order);
+        }
         for (OmsOrderItem orderItem : orderItemList) {
             orderItem.setOrderId(order.getId());
             orderItem.setOrderSn(order.getOrderSn());

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

@@ -50,6 +50,36 @@
         order by distance asc
     </select>
 
+    <select id="merchantPagingList" resultType="com.chelvc.cloud.vehicle.client.dto.MerchantDTO">
+        select mt.id, mt.name, mt.logo, mt.score,mt.opening, mt.sale, mt.address,mt.business_status,c.name as mainBusinessName,mt.main_business,
+        round(st_distance_sphere(
+        point(mt.longitude, mt.latitude), point(#{param.longitude}, #{param.latitude})
+        )) distance
+        from `merchant` mt left join category c on mt.main_business = c.id
+        <where>
+            mt.region between #{param.code} and #{param.boundary} and mt.status = 'ONLINE'
+            <if test="param.keyword != null and !param.keyword.isEmpty()">
+                and (mt.name like concat('%', #{param.keyword}, '%')
+                or mt.id in (select gds.merchant_id from goods gds where gds.name like concat('%', #{param.keyword}, '%')))
+            </if>
+            <if test="param.categoryId != null">
+                and  (mt.main_business = #{param.categoryId} or mt.ancillary_business like concat('%',#{param.categoryId} , '%'))
+            </if>
+        </where>
+        <if test="param.sort != null and param.sort.name == 'SYNTHESE'">
+            order by mt.recommend desc
+        </if>
+        <if test="param.sort != null and param.sort.name == 'NEAREST'">
+            order by distance desc
+        </if>
+        <if test="param.sort != null and param.sort.name == 'FAVORITE'">
+            order by mt.score desc
+        </if>
+        <if test="param.sort != null and param.sort.name == 'BESTSELLING'">
+            order by mt.sale desc
+        </if>
+    </select>
+
     <select id="listSimpleMerchants" resultType="com.chelvc.cloud.vehicle.client.dto.MerchantDTO">
         select mt.id, mt.name, mt.logo, mt.score,mt.opening, mt.sale, mt.address,mt.business_status,c.name as mainBusinessName,mt.main_business,
         round(st_distance_sphere(
@@ -62,7 +92,8 @@
             </if>
             mt.region between #{code} and #{boundary} and mt.status = 'ONLINE'
             <if test="keyword != null and !keyword.isEmpty()">
-                and mt.name like concat('%', #{keyword}, '%')
+                and (mt.name like concat('%', #{keyword}, '%')
+                or mt.id in (select gds.merchant_id from goods gds where gds.name like concat('%', #{keyword}, '%')))
             </if>
             <if test="categoryId != null">
                 and  (mt.main_business = #{categoryId} or mt.ancillary_business like concat('%',#{categoryId} , '%'))