【尚庭公寓SpringBoot + Vue 项目实战】看房预约管理(十三)

作者 : admin 本文共3961个字,预计阅读时间需要10分钟 发布时间: 2024-06-17 共1人阅读

【尚庭公寓SpringBoot + Vue 项目实战】看房预约管理(十三)


文章目录

      • 【尚庭公寓SpringBoot + Vue 项目实战】看房预约管理(十三)
        • 1、业务说明
        • 2、代码开发
          • 2.1、根据条件分页查询预约信息
          • 2.2、根据ID更新预约状态
1、业务说明

看房预约包括两个接口

  • 根据条件分页查询预约信息
  • 根据ID更新预约状态
2、代码开发
2.1、根据条件分页查询预约信息

查看接口

【尚庭公寓SpringBoot + Vue 项目实战】看房预约管理(十三)插图

代码开发

  • 查看请求和响应的数据结构

    • 请求数据结构

      • currentsize为分页相关参数,分别表示当前所处页面每个页面的记录数

      • AppointmentQueryVo为看房预约的查询条件,详细结构如下:

        @Data
        @Schema(description = "预约看房查询实体")
        public class AppointmentQueryVo {
        
            @Schema(description="预约公寓所在省份")
            private Long provinceId;
        
            @Schema(description="预约公寓所在城市")
            private Long cityId;
        
            @Schema(description="预约公寓所在区")
            private Long districtId;
        
            @Schema(description="预约公寓所在公寓")
            private Long apartmentId;
        
            @Schema(description="预约用户姓名")
            private String name;
        
            @Schema(description="预约用户手机号码")
            private String phone;
        }
        
    • 响应数据结构

      单个看房预约信息的结构可查看web-admin模块下的com.atguigu.lease.web.admin.vo.appointment.AppointmentVo,内容如下:

      @Data
      @Schema(description = "预约看房信息")
      public class AppointmentVo extends ViewAppointment {
      
          @Schema(description = "预约公寓信息")
          private ApartmentInfo apartmentInfo;
      }
      
  • 编写Controller层逻辑

    ViewAppointmentController中增加如下内容

    @Operation(summary = "分页查询预约信息")
    @GetMapping("page")
    public Result<IPage<AppointmentVo>> page(@RequestParam long current, @RequestParam long size, AppointmentQueryVo queryVo) {
        IPage<AppointmentVo> page = new Page<>(current, size);
        IPage<AppointmentVo> list = service.pageAppointmentByQuery(page, queryVo);
        return Result.ok(list);
    }
    
  • 编写Service层逻辑

    • ViewAppointmentService中增加如下内容

      IPage<AppointmentVo> pageAppointmentByQuery(IPage<AppointmentVo> page, AppointmentQueryVo queryVo);
      
    • ViewAppointmentServiceImpl中增加如下内容

      @Override
      public IPage<AppointmentVo> pageAppointmentByQuery(IPage<AppointmentVo> page, AppointmentQueryVo queryVo) {
          return viewAppointmentMapper.pageAppointmentByQuery(page, queryVo);
      }
      
  • 编写Mapper层逻辑

    • ViewAppointmentMapper中增加如下内容

      IPage<AppointmentVo> pageAppointmentByQuery(IPage<AppointmentVo> page, AppointmentQueryVo queryVo);
      
    • ViewAppointmentMapper.xml中增加如下内容

      <resultMap id="AppointmentVoMap" type="com.atguigu.lease.web.admin.vo.appointment.AppointmentVo" autoMapping="true">
      <id property="id" column="id"/>
      <association property="apartmentInfo" javaType="com.atguigu.lease.model.entity.ApartmentInfo" autoMapping="true">
      <id property="id" column="apartment_id"/>
      <result property="name" column="apartment_name"/>
      </association>
      </resultMap>
      <select id="pageAppointmentByQuery" resultMap="AppointmentVoMap">
      select va.id,
      va.user_id,
      va.name,
      va.phone,
      va.appointment_time,
      va.additional_info,
      va.appointment_status,
      ai.id   apartment_id,
      ai.name apartment_name,
      ai.district_id,
      ai.district_name,
      ai.city_id,
      ai.city_name,
      ai.province_id,
      ai.province_name
      from view_appointment va
      left join
      apartment_info ai
      on va.apartment_id = ai.id and ai.is_deleted=0
      <where>
      va.is_deleted = 0
      <if test="queryVo.provinceId != null">
      and ai.province_id = #{queryVo.provinceId}
      </if>
      <if test="queryVo.cityId != null">
      and ai.city_id = #{queryVo.cityId}
      </if>
      <if test="queryVo.districtId != null">
      and ai.district_id = #{queryVo.districtId}
      </if>
      <if test="queryVo.apartmentId != null">
      and va.apartment_id = #{queryVo.apartmentId}
      </if>
      <if test="queryVo.name != null and queryVo.name != ''">
      and va.name like concat('%',#{queryVo.name},'%')
      </if>
      <if test="queryVo.phone != null and queryVo.phone != ''">
      and va.phone like concat('%',#{queryVo.phone},'%')
      </if>
      </where>
      </select>
      

    知识点

    ViewAppointment实体类中的appointmentTime字段为Date类型,Date类型的字段在序列化成JSON字符串时,需要考虑两个点,分别是格式时区。本项目使用JSON序列化框架为Jackson,具体配置如下

    • 格式

      格式可按照字段单独配置,也可全局配置,下面分别介绍

      • 单独配置

        在指定字段增加@JsonFormat注解,如下

        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date appointmentTime;
        
      • 全局配置

        application.yml中增加如下内容

        spring:
        jackson:
        date-format: yyyy-MM-dd HH:mm:ss
        
    • 时区

      时区同样可按照字段单独配置,也可全局配置,下面分别介绍

      • 单独配置

        在指定字段增加@JsonFormat注解,如下

        @JsonFormat(timezone = "GMT+8")
        private Date appointmentTime;
        
      • 全局配置

        spring:
        jackson:
        time-zone: GMT+8
        

    推荐格式按照字段单独配置,时区全局配置。

2.2、根据ID更新预约状态

查看接口

【尚庭公寓SpringBoot + Vue 项目实战】看房预约管理(十三)插图(1)

代码开发

ViewAppointmentController中增加如下内容

@Operation(summary = "根据id更新预约状态")
@PostMapping("updateStatusById")
public Result updateStatusById(@RequestParam Long id, @RequestParam AppointmentStatus status) {
LambdaUpdateWrapper<ViewAppointment> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(ViewAppointment::getId, id);
updateWrapper.set(ViewAppointment::getAppointmentStatus, status);
service.update(updateWrapper);
return Result.ok();
}
本站无任何商业行为
个人在线分享-虚灵IT资料分享 » 【尚庭公寓SpringBoot + Vue 项目实战】看房预约管理(十三)
E-->