Browse Source

房间开发完成

wangzhengliang 3 years ago
parent
commit
33ff671849

+ 2 - 3
src/main/java/com/chuanghai/ihotel/aop/ParamCheckAspect.java

@@ -32,8 +32,7 @@ public class ParamCheckAspect {
      */
      */
     private Validator validator = Validation.byProvider(HibernateValidator.class)
     private Validator validator = Validation.byProvider(HibernateValidator.class)
             .configure()
             .configure()
-            // 快速失败模式
-            .failFast(true)
+            .failFast(true) // 快速失败模式
             .buildValidatorFactory()
             .buildValidatorFactory()
             .getValidator();
             .getValidator();
 
 
@@ -44,7 +43,7 @@ public class ParamCheckAspect {
         MethodSignature methodSignature = (MethodSignature) signature;
         MethodSignature methodSignature = (MethodSignature) signature;
         Method method = methodSignature.getMethod();
         Method method = methodSignature.getMethod();
 
 
-        // 参数列表
+        // 参数列表
         Object[] args = point.getArgs();
         Object[] args = point.getArgs();
 
 
         ParamCheck paramCheck = method.getAnnotation(ParamCheck.class);
         ParamCheck paramCheck = method.getAnnotation(ParamCheck.class);

+ 2 - 0
src/main/java/com/chuanghai/ihotel/common/utils/PageUtils.java

@@ -1,6 +1,7 @@
 package com.chuanghai.ihotel.common.utils;
 package com.chuanghai.ihotel.common.utils;
 
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.NoArgsConstructor;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.List;
 import java.util.List;
@@ -9,6 +10,7 @@ import java.util.List;
  * 分页工具类
  * 分页工具类
  * @author Mark sunlightcs@gmail.com
  * @author Mark sunlightcs@gmail.com
  */
  */
+@NoArgsConstructor
 public class PageUtils<T> implements Serializable {
 public class PageUtils<T> implements Serializable {
 	private static final long serialVersionUID = 1L;
 	private static final long serialVersionUID = 1L;
 	/**
 	/**

+ 23 - 0
src/main/java/com/chuanghai/ihotel/config/MybatisPlusPageConfig.java

@@ -0,0 +1,23 @@
+package com.chuanghai.ihotel.config;
+
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @Author: codingliang
+ * @Description: mp.mybatis 分页配置
+ * @Date: 2021-11-22 9:15
+ * @Version: V1.0
+ **/
+@Configuration
+public class MybatisPlusPageConfig {
+
+    @Bean
+    public PaginationInterceptor paginationInterceptor() {
+        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
+        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
+        return paginationInterceptor;
+    }
+}

+ 29 - 24
src/main/java/com/chuanghai/ihotel/controller/RoomController.java

@@ -1,23 +1,23 @@
 package com.chuanghai.ihotel.controller;
 package com.chuanghai.ihotel.controller;
 
 
-import java.util.Arrays;
-
+import com.chuanghai.ihotel.anno.ParamCheck;
+import com.chuanghai.ihotel.common.utils.CommonResult;
+import com.chuanghai.ihotel.common.utils.PageParam;
+import com.chuanghai.ihotel.common.utils.PageUtils;
+import com.chuanghai.ihotel.controller.request.RoomQueryRequest;
+import com.chuanghai.ihotel.entity.RoomEntity;
+import com.chuanghai.ihotel.service.RoomService;
+import com.chuanghai.ihotel.vo.RoomGroupVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 
 
-import com.chuanghai.ihotel.entity.RoomEntity;
-import com.chuanghai.ihotel.service.RoomService;
-import com.chuanghai.ihotel.common.utils.PageUtils;
-import com.chuanghai.ihotel.common.utils.CommonResult;
-import com.chuanghai.ihotel.common.utils.PageParam;
-
+import java.util.Arrays;
 
 
 /**
 /**
  * 房间 
  * 房间 
@@ -33,41 +33,46 @@ public class RoomController {
     private RoomService roomService;
     private RoomService roomService;
 
 
     /**
     /**
-     * 列表
+     * 房间列表(分页)
      */
      */
-    @GetMapping("/list")
-    public CommonResult<PageUtils<RoomEntity>> list(PageParam pageParam){
-        PageUtils page = roomService.queryPage(pageParam);
+    @GetMapping("/page")
+    public CommonResult<PageUtils<RoomEntity>> page(PageParam pageParam, RoomQueryRequest request){
+        PageUtils page = roomService.queryPage(pageParam, request);
 
 
         return CommonResult.ok().setResult(page);
         return CommonResult.ok().setResult(page);
     }
     }
 
 
-
     /**
     /**
-     * 信息
+     * 房间列表(分页分组)
      */
      */
-    @GetMapping("/info/{id}")
-    public CommonResult<RoomEntity> info(@PathVariable("id") Long id){
-		RoomEntity room = roomService.getById(id);
+    @GetMapping("/page/group")
+    public CommonResult<PageUtils<RoomGroupVO>> pageGroup(PageParam pageParam, RoomQueryRequest request){
+        PageUtils page = roomService.queryPageGroup(pageParam, request);
 
 
-        return CommonResult.ok().setResult(room);
+        return CommonResult.ok().setResult(page);
     }
     }
 
 
+
     /**
     /**
-     * 保存
+     * 新增房间
      */
      */
     @PostMapping("/save")
     @PostMapping("/save")
+    @ParamCheck
     public CommonResult<String> save(@RequestBody RoomEntity room){
     public CommonResult<String> save(@RequestBody RoomEntity room){
-		roomService.save(room);
+		roomService.mySave(room);
 
 
         return CommonResult.ok();
         return CommonResult.ok();
     }
     }
 
 
     /**
     /**
-     * 修改
+     * 修改房间
+     * @apiNote 修改房间,房型数据不能被修改,若要修改房间房型,请先删除后新增
      */
      */
     @PutMapping("/update")
     @PutMapping("/update")
+    @ParamCheck
     public CommonResult<String> update(@RequestBody RoomEntity room){
     public CommonResult<String> update(@RequestBody RoomEntity room){
+        room.setRoomTypeId(null);
+        room.setRoomTypeName(null);
 		boolean flag = roomService.updateById(room);
 		boolean flag = roomService.updateById(room);
 
 
 		if (flag) {
 		if (flag) {
@@ -78,7 +83,7 @@ public class RoomController {
     }
     }
 
 
     /**
     /**
-     * 删除
+     * 删除房间
      */
      */
     @DeleteMapping("/delete")
     @DeleteMapping("/delete")
     public CommonResult<String> delete(@RequestBody Long[] ids){
     public CommonResult<String> delete(@RequestBody Long[] ids){

+ 30 - 0
src/main/java/com/chuanghai/ihotel/controller/request/RoomQueryRequest.java

@@ -0,0 +1,30 @@
+package com.chuanghai.ihotel.controller.request;
+
+import lombok.Data;
+
+/**
+ * @Author: codingliang
+ * @Description: 房间查询
+ * @Date: 2022-07-27 16:59
+ * @Version: V1.0
+ **/
+@Data
+public class RoomQueryRequest {
+
+    /**
+     * 房间号
+     */
+    private String roomNo;
+    /**
+     * 所处楼栋
+     */
+    private String build;
+    /**
+     * 所处楼层
+     */
+    private String floor;
+    /**
+     * 房型id
+     */
+    private Long roomTypeId;
+}

+ 6 - 1
src/main/java/com/chuanghai/ihotel/dao/RoomDao.java

@@ -1,8 +1,12 @@
 package com.chuanghai.ihotel.dao;
 package com.chuanghai.ihotel.dao;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.chuanghai.ihotel.controller.request.RoomQueryRequest;
 import com.chuanghai.ihotel.entity.RoomEntity;
 import com.chuanghai.ihotel.entity.RoomEntity;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.ihotel.vo.RoomGroupVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 
 /**
 /**
  * 房间 
  * 房间 
@@ -13,5 +17,6 @@ import org.apache.ibatis.annotations.Mapper;
  */
  */
 @Mapper
 @Mapper
 public interface RoomDao extends BaseMapper<RoomEntity> {
 public interface RoomDao extends BaseMapper<RoomEntity> {
-	
+
+    IPage<RoomGroupVO> queryPageGroup(@Param("page") IPage<RoomEntity> page, @Param("request") RoomQueryRequest request);
 }
 }

+ 12 - 2
src/main/java/com/chuanghai/ihotel/entity/RoomEntity.java

@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.Data;
 
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
 import java.io.Serializable;
 import java.io.Serializable;
 
 
 /**
 /**
@@ -19,33 +22,40 @@ public class RoomEntity implements Serializable {
 	private static final long serialVersionUID = 2128502599530103348L;
 	private static final long serialVersionUID = 2128502599530103348L;
 
 
 	/**
 	/**
-	 * id
+	 * id,新增时不需要传
 	 */
 	 */
 	@TableId
 	@TableId
 	private Long id;
 	private Long id;
 	/**
 	/**
 	 * 房屋号
 	 * 房屋号
 	 */
 	 */
+	@NotBlank(message = "房屋号不能为空")
 	private String roomNo;
 	private String roomNo;
 	/**
 	/**
 	 * 所处楼栋
 	 * 所处楼栋
 	 */
 	 */
+	@NotBlank(message = "所处楼栋不能为空")
 	private String build;
 	private String build;
 	/**
 	/**
 	 * 所处楼层
 	 * 所处楼层
 	 */
 	 */
+	@NotBlank(message = "所处楼层不能为空")
 	private String floor;
 	private String floor;
 	/**
 	/**
 	 * 房型id
 	 * 房型id
 	 */
 	 */
+	@NotNull(message = "房型id不能为空")
 	private Long roomTypeId;
 	private Long roomTypeId;
 	/**
 	/**
-	 * 房型名称 冗余
+	 * 房型名称
 	 */
 	 */
+	@NotBlank(message = "房型名称不能为空")
 	private String roomTypeName;
 	private String roomTypeName;
 	/**
 	/**
 	 * 是否可用 0否,1是
 	 * 是否可用 0否,1是
 	 */
 	 */
+	@NotBlank(message = "是否可用不能为空")
+	@Pattern(regexp = "[0-1]", message = "是否可用只能为0或者为1")
 	private String enableUse;
 	private String enableUse;
 
 
 }
 }

+ 6 - 1
src/main/java/com/chuanghai/ihotel/service/RoomService.java

@@ -3,6 +3,7 @@ package com.chuanghai.ihotel.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.chuanghai.ihotel.common.utils.PageUtils;
 import com.chuanghai.ihotel.common.utils.PageUtils;
 import com.chuanghai.ihotel.common.utils.PageParam;
 import com.chuanghai.ihotel.common.utils.PageParam;
+import com.chuanghai.ihotel.controller.request.RoomQueryRequest;
 import com.chuanghai.ihotel.entity.RoomEntity;
 import com.chuanghai.ihotel.entity.RoomEntity;
 
 
 /**
 /**
@@ -14,6 +15,10 @@ import com.chuanghai.ihotel.entity.RoomEntity;
  */
  */
 public interface RoomService extends IService<RoomEntity> {
 public interface RoomService extends IService<RoomEntity> {
 
 
-    PageUtils queryPage(PageParam pageParam);
+    PageUtils queryPage(PageParam pageParam, RoomQueryRequest request);
+
+    PageUtils queryPageGroup(PageParam pageParam, RoomQueryRequest request);
+
+    void mySave(RoomEntity room);
 }
 }
 
 

+ 59 - 2
src/main/java/com/chuanghai/ihotel/service/impl/RoomServiceImpl.java

@@ -1,5 +1,13 @@
 package com.chuanghai.ihotel.service.impl;
 package com.chuanghai.ihotel.service.impl;
 
 
+import com.chuanghai.ihotel.common.exception.BizCodeEnume;
+import com.chuanghai.ihotel.common.exception.RRException;
+import com.chuanghai.ihotel.controller.request.RoomQueryRequest;
+import com.chuanghai.ihotel.entity.RoomTypeEntity;
+import com.chuanghai.ihotel.service.RoomTypeService;
+import com.chuanghai.ihotel.vo.RoomGroupVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -11,19 +19,68 @@ import com.chuanghai.ihotel.common.utils.PageParam;
 import com.chuanghai.ihotel.dao.RoomDao;
 import com.chuanghai.ihotel.dao.RoomDao;
 import com.chuanghai.ihotel.entity.RoomEntity;
 import com.chuanghai.ihotel.entity.RoomEntity;
 import com.chuanghai.ihotel.service.RoomService;
 import com.chuanghai.ihotel.service.RoomService;
+import org.springframework.util.StringUtils;
+
+import java.util.Map;
 
 
 
 
 @Service("roomService")
 @Service("roomService")
 public class RoomServiceImpl extends ServiceImpl<RoomDao, RoomEntity> implements RoomService {
 public class RoomServiceImpl extends ServiceImpl<RoomDao, RoomEntity> implements RoomService {
 
 
+    @Autowired
+    private RoomTypeService roomTypeService;
+
+    @Cacheable(value = {"room"}, key = "#root.method.name " +
+            "+ '-' + #pageParam.curPage " +
+            "+ '-' + #pageParam.pageSize " +
+            "+ '-' + #pageParam.orderField " +
+            "+ '-' + #pageParam.order " +
+            "+ '-' + #request.roomNo " +
+            "+ '-' + #request.build " +
+            "+ '-' + #request.floor " +
+            "+ '-' + #request.roomTypeId")
     @Override
     @Override
-    public PageUtils queryPage(PageParam pageParam) {
+    public PageUtils queryPage(PageParam pageParam, RoomQueryRequest request) {
+        QueryWrapper<RoomEntity> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(StringUtils.hasText(request.getRoomNo()), "room_no", request.getRoomNo());
+        queryWrapper.eq(StringUtils.hasText(request.getBuild()), "build", request.getBuild());
+        queryWrapper.eq(StringUtils.hasText(request.getFloor()), "floor", request.getFloor());
+        queryWrapper.eq(request.getRoomTypeId() != null, "room_type_id", request.getRoomTypeId());
+
         IPage<RoomEntity> page = this.page(
         IPage<RoomEntity> page = this.page(
                 new MyQuery<RoomEntity>().getPage(pageParam),
                 new MyQuery<RoomEntity>().getPage(pageParam),
-                new QueryWrapper<RoomEntity>()
+                queryWrapper
         );
         );
 
 
         return new PageUtils(page);
         return new PageUtils(page);
     }
     }
 
 
+    @Cacheable(value = {"room"},
+            key = "#root.method.name " +
+                    "+ '-' + #pageParam.curPage " +
+                    "+ '-' + #pageParam.pageSize " +
+                    "+ '-' + #pageParam.orderField " +
+                    "+ '-' + #pageParam.order " +
+                    "+ '-' + #request.roomNo " +
+                    "+ '-' + #request.build " +
+                    "+ '-' + #request.floor " +
+                    "+ '-' + #request.roomTypeId")
+    @Override
+    public PageUtils queryPageGroup(PageParam pageParam, RoomQueryRequest request) {
+        IPage<RoomGroupVO> page =this.getBaseMapper().queryPageGroup(new MyQuery<RoomEntity>().getPage(pageParam), request);
+        return new PageUtils<>(page);
+    }
+
+    @Override
+    public void mySave(RoomEntity room) {
+        // 检测房型是否存在
+        RoomTypeEntity roomType = roomTypeService.getById(room.getRoomTypeId());
+        if (roomType == null) {
+            throw new RRException(BizCodeEnume.PARAMETER_ERROR, "无效的roomTypeId");
+        }
+
+        room.setRoomTypeName(roomType.getTypeName());
+
+        this.save(room);
+    }
 }
 }

+ 41 - 0
src/main/java/com/chuanghai/ihotel/vo/RoomGroupVO.java

@@ -0,0 +1,41 @@
+package com.chuanghai.ihotel.vo;
+
+import com.chuanghai.ihotel.entity.RoomEntity;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author: codingliang
+ * @Description: 房间分组vo
+ * @Date: 2022-07-27 17:13
+ * @Version: V1.0
+ **/
+@Data
+public class RoomGroupVO {
+
+    /**
+     * 楼栋号
+     */
+    private String build;
+    /**
+     * 楼层列表
+     */
+    private List<FloorVO> floors;
+
+    /**
+     * 楼层
+     */
+    @Data
+    public static class FloorVO {
+        /**
+         * 楼层
+         */
+        private String floor;
+
+        /**
+         * 房间列表
+         */
+        private List<RoomEntity> room;
+    }
+}

+ 37 - 0
src/main/resources/mapper/ihotel/RoomDao.xml

@@ -14,5 +14,42 @@
         <result property="enableUse" column="enable_use"/>
         <result property="enableUse" column="enable_use"/>
     </resultMap>
     </resultMap>
 
 
+    <resultMap id="groupResult" type="com.chuanghai.ihotel.vo.RoomGroupVO">
+        <result property="build" column="build"/>
+        <collection property="floors" ofType="com.chuanghai.ihotel.vo.RoomGroupVO$FloorVO">
+            <result property="floor" column="floor"/>
+            <collection property="room" ofType="com.chuanghai.ihotel.entity.RoomEntity">
+                <result property="id" column="id"/>
+                <result property="roomNo" column="room_no"/>
+                <result property="build" column="build"/>
+                <result property="floor" column="floor"/>
+                <result property="roomTypeId" column="room_type_id"/>
+                <result property="roomTypeName" column="room_type_name"/>
+                <result property="enableUse" column="enable_use"/>
+            </collection>
+        </collection>
+    </resultMap>
+
+    <select id="queryPageGroup" resultType="com.chuanghai.ihotel.vo.RoomGroupVO" resultMap="groupResult">
+        select id, room_no, build, floor, room_type_id, room_type_name, enable_use
+        from room
+        <where>
+            <if test="request.roomNo != null and request.roomNo != ''">
+                and room_no = #{request.roomNo}
+            </if>
+            <if test="request.build != null and request.build != ''">
+                and build = #{request.build}
+            </if>
+            <if test="request.floor != null and request.floor != ''">
+                and floor = #{request.floor}
+            </if>
+            <if test="request.roomTypeId != null">
+                and room_type_id = #{request.roomTypeId}
+            </if>
+        </where>
+        group by build,id
+        order by build asc,floor asc
+    </select>
+
 
 
 </mapper>
 </mapper>