【尚庭公寓SpringBoot + Vue 项目实战】看房预约管理(十三)
文章目录
- 【尚庭公寓SpringBoot + Vue 项目实战】看房预约管理(十三)
- 1、业务说明
- 2、代码开发
- 2.1、根据条件分页查询预约信息
- 2.2、根据ID更新预约状态
1、业务说明
看房预约包括两个接口
- 根据条件分页查询预约信息
- 根据ID更新预约状态
2、代码开发
2.1、根据条件分页查询预约信息
查看接口
代码开发
-
查看请求和响应的数据结构
-
请求数据结构
-
current
和size
为分页相关参数,分别表示当前所处页面和每个页面的记录数。 -
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_namefrom view_appointment valeft joinapartment_info aion 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更新预约状态
查看接口
代码开发
在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();
}