Quellcode durchsuchen

查询预约列表功能开发

qizai vor 1 Jahr
Ursprung
Commit
cf61bf579e

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

@@ -10,7 +10,7 @@ import java.io.Serializable;
 import java.util.Date;
 
 /**
- * 用户收藏数据模型
+ * 用户收藏信息
  *
  * @author liude
  * @date 2023/7/19

+ 57 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/ReservationDTO.java

@@ -0,0 +1,57 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import com.chelvc.cloud.vehicle.api.constant.ReserveStatus;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 预约记录信息
+ *
+ * @author qizai
+ * @date 2023/9/9
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ReservationDTO implements Serializable {
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 商家ID
+     */
+    private Long merchantId;
+
+    /**
+     * 联系电话
+     */
+    private String mobile;
+
+    /**
+     * 约定时间
+     */
+    private Date appointTime;
+
+    /**
+     * 预约状态
+     */
+    private ReserveStatus status;
+
+    /**
+     * 商家信息
+     */
+    private MerchantDTO merchant;
+}

+ 44 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/ReservationQueryParam.java

@@ -0,0 +1,44 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import com.chelvc.cloud.vehicle.api.constant.ReserveStatus;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * 预约记录查询参数
+ *
+ * @author qizai
+ * @date 2023/9/9
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ReservationQueryParam 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;
+
+    /**
+     * 预约状态
+     */
+    private ReserveStatus status;
+}

+ 0 - 3
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/FavoriteService.java

@@ -2,11 +2,8 @@ package com.chelvc.cloud.vehicle.api.service;
 
 import com.chelvc.cloud.vehicle.api.dto.FavoriteDTO;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
-import com.chelvc.cloud.vehicle.api.dto.UserCouponDTO;
 import com.chelvc.cloud.vehicle.api.param.FavoritePagingParam;
 import com.chelvc.cloud.vehicle.api.param.FavoriteQueryParam;
-import com.chelvc.cloud.vehicle.api.param.MerchantPagingParam;
-import com.chelvc.cloud.vehicle.api.param.UserCouponQueryParam;
 import com.chelvc.framework.common.model.Pagination;
 
 import java.util.List;

+ 12 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/ReservationService.java

@@ -1,6 +1,10 @@
 package com.chelvc.cloud.vehicle.api.service;
 
+import com.chelvc.cloud.vehicle.api.dto.ReservationDTO;
 import com.chelvc.cloud.vehicle.api.param.ReservationModifyParam;
+import com.chelvc.cloud.vehicle.api.param.ReservationQueryParam;
+
+import java.util.List;
 
 /**
  * 预约业务接口
@@ -16,4 +20,12 @@ public interface ReservationService {
      * @param param      预约参数
      */
     void addReservation(Long merchantId, ReservationModifyParam param);
+
+    /**
+     * 查询用户预约列表
+     *
+     * @param param 查询参数
+     * @return 用户预约列表
+     */
+    List<ReservationDTO> listUserReservations(ReservationQueryParam param);
 }

+ 11 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/ReservationCopier.java

@@ -1,9 +1,11 @@
 package com.chelvc.cloud.vehicle.server.copier;
 
+import com.chelvc.cloud.vehicle.api.dto.ReservationDTO;
 import com.chelvc.cloud.vehicle.api.param.ReservationModifyParam;
 import com.chelvc.cloud.vehicle.server.entity.Reservation;
 import org.mapstruct.Builder;
 import org.mapstruct.Mapper;
+import org.mapstruct.Named;
 import org.mapstruct.factory.Mappers;
 
 /**
@@ -26,4 +28,13 @@ public interface ReservationCopier {
      * @return 预约信息
      */
     Reservation copying(ReservationModifyParam param);
+
+    /**
+     * 预约信息拷贝
+     *
+     * @param reservation 预约信息
+     * @return 预约信息
+     */
+    @Named("entity2dto")
+    ReservationDTO copying(Reservation reservation);
 }

+ 12 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/ReservationMapper.java

@@ -1,8 +1,12 @@
 package com.chelvc.cloud.vehicle.server.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.api.param.ReservationQueryParam;
 import com.chelvc.cloud.vehicle.server.entity.Reservation;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 预约记录数据操作接口
@@ -12,4 +16,12 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface ReservationMapper extends BaseMapper<Reservation> {
+
+    /**
+     * 查询用户预约列表
+     *
+     * @param param 查询参数
+     * @return 用户预约列表
+     */
+    List<Reservation> listUserReservations(@Param("userId") Long userId, @Param("param") ReservationQueryParam param);
 }

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

@@ -3,8 +3,10 @@ package com.chelvc.cloud.vehicle.server.entity;
 import java.util.Date;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.chelvc.cloud.vehicle.api.constant.ReserveStatus;
+import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
 import com.chelvc.framework.database.entity.ModifyEntity;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -29,7 +31,7 @@ public class Reservation extends ModifyEntity<Long> {
     /**
      * 主键
      */
-    @TableId(type = IdType.ASSIGN_ID)
+    @TableId(type = IdType.AUTO)
     private Long id;
 
     /**
@@ -56,4 +58,10 @@ public class Reservation extends ModifyEntity<Long> {
      * 预约状态
      */
     private ReserveStatus status;
+
+    /**
+     * 商家信息
+     */
+    @TableField(exist = false)
+    private MerchantDTO merchant;
 }

+ 6 - 10
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/FavoriteServiceImpl.java

@@ -1,32 +1,28 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chelvc.cloud.vehicle.api.constant.FavoriteType;
-import com.chelvc.cloud.vehicle.api.constant.UserCouponStatus;
 import com.chelvc.cloud.vehicle.api.dto.FavoriteDTO;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
 import com.chelvc.cloud.vehicle.api.param.FavoritePagingParam;
 import com.chelvc.cloud.vehicle.api.param.FavoriteQueryParam;
 import com.chelvc.cloud.vehicle.server.copier.FavoriteCopier;
-import com.chelvc.cloud.vehicle.server.copier.UserCouponCopier;
 import com.chelvc.cloud.vehicle.server.dao.FavoriteMapper;
 import com.chelvc.cloud.vehicle.server.entity.Favorite;
-import com.chelvc.cloud.vehicle.server.entity.UserCoupon;
 import com.chelvc.cloud.vehicle.server.service.FavoriteService;
 import com.chelvc.framework.base.context.SessionContextHolder;
-import com.chelvc.framework.base.model.Session;
 import com.chelvc.framework.base.util.ResourceUtils;
 import com.chelvc.framework.common.model.Pagination;
 import lombok.NonNull;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
 /**
  * 用户收藏业务操作实现
  *

+ 24 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/ReservationServiceImpl.java

@@ -2,7 +2,9 @@ package com.chelvc.cloud.vehicle.server.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chelvc.cloud.vehicle.api.constant.ReserveStatus;
+import com.chelvc.cloud.vehicle.api.dto.ReservationDTO;
 import com.chelvc.cloud.vehicle.api.param.ReservationModifyParam;
+import com.chelvc.cloud.vehicle.api.param.ReservationQueryParam;
 import com.chelvc.cloud.vehicle.server.copier.ReservationCopier;
 import com.chelvc.cloud.vehicle.server.dao.ReservationMapper;
 import com.chelvc.cloud.vehicle.server.entity.Reservation;
@@ -10,6 +12,11 @@ import com.chelvc.cloud.vehicle.server.service.ReservationService;
 import com.chelvc.framework.base.context.SessionContextHolder;
 import lombok.NonNull;
 import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 预约记录业务操作实现
@@ -28,4 +35,21 @@ public class ReservationServiceImpl extends ServiceImpl<ReservationMapper, Reser
         reservation.setStatus(ReserveStatus.PENDING);
         this.save(reservation);
     }
+
+    @Override
+    public List<ReservationDTO> listUserReservations(@NonNull ReservationQueryParam param) {
+        Long userId = SessionContextHolder.getId();
+        List<Reservation> reservations = this.baseMapper.listUserReservations(userId, param);
+        if (CollectionUtils.isEmpty(reservations)) {
+            return Collections.emptyList();
+        }
+        return reservations
+                .stream()
+                .map(o -> {
+                    ReservationDTO reservationDTO = ReservationCopier.INSTANCE.copying(o);
+                    reservationDTO.setMerchant(o.getMerchant());
+                    return reservationDTO;
+                }).collect(Collectors.toList());
+
+    }
 }

+ 42 - 0
vehicle-server/src/main/resources/mapper/ReservationMapper.xml

@@ -0,0 +1,42 @@
+<?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.ReservationMapper">
+
+    <resultMap id="RESERVATION_RESULT_MAP" type="com.chelvc.cloud.vehicle.server.entity.Reservation">
+        <id column="id" property="id" jdbcType="BIGINT"/>
+        <result column="user_id" property="userId" jdbcType="BIGINT"/>
+        <result column="merchant_id" property="merchantId" jdbcType="BIGINT"/>
+        <result column="mobile" property="mobile" jdbcType="VARCHAR"/>
+        <result column="appoint_time" property="appointTime" jdbcType="TIMESTAMP"/>
+        <result column="status" property="status" jdbcType="VARCHAR"/>
+        <result column="creator" property="creator" jdbcType="BIGINT"/>
+        <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
+        <result column="updater" property="updater" jdbcType="BIGINT"/>
+        <result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
+        <association property="merchant" javaType="com.chelvc.cloud.vehicle.api.dto.MerchantDTO">
+            <id column="merchant_id" property="id" jdbcType="BIGINT"/>
+            <result column="name" property="name" jdbcType="VARCHAR"/>
+            <result column="logo" property="logo" jdbcType="VARCHAR"/>
+            <result column="score" property="score" jdbcType="DOUBLE"/>
+            <result column="sale" property="sale" jdbcType="INTEGER"/>
+            <result column="address" property="address" jdbcType="VARCHAR"/>
+            <result column="distance" property="distance" jdbcType="DOUBLE"/>
+        </association>
+    </resultMap>
+
+    <select id="listUserReservations" resultMap="RESERVATION_RESULT_MAP">
+        select rn.id,rn.user_id,rn.merchant_id,rn.mobile,rn.appoint_time,rn.status, mt.name, mt.logo, mt.score,
+        mt.sale, mt.address
+        from reservation rn
+        inner join merchant mt on merchant_id = mt.id and mt.status = 'ONLINE'
+        where rn.user_id = #{userId}
+        <if test="param.offset != null">
+            and rn.id > #{param.offset}
+        </if>
+        <if test="param.status != null">
+            and rn.status = #{param.status}
+        </if>
+        order by rn.appoint_time asc
+        limit #{param.size}
+    </select>
+</mapper>