Browse Source

锁定房间接口开发

wangzhengliang 3 years ago
parent
commit
1f07130a74

+ 15 - 0
src/main/java/com/chuanghai/ihotel/controller/RoomRealtimeStatuController.java

@@ -5,6 +5,7 @@ import com.chuanghai.ihotel.anno.ParamCheck;
 import com.chuanghai.ihotel.common.exception.BizCodeEnume;
 import com.chuanghai.ihotel.common.exception.BizCodeEnume;
 import com.chuanghai.ihotel.common.exception.RRException;
 import com.chuanghai.ihotel.common.exception.RRException;
 import com.chuanghai.ihotel.common.utils.CommonResult;
 import com.chuanghai.ihotel.common.utils.CommonResult;
+import com.chuanghai.ihotel.controller.request.RoomLockRequest;
 import com.chuanghai.ihotel.controller.request.RoomRealtimeStatuRequest;
 import com.chuanghai.ihotel.controller.request.RoomRealtimeStatuRequest;
 import com.chuanghai.ihotel.service.RoomRealtimeStatuService;
 import com.chuanghai.ihotel.service.RoomRealtimeStatuService;
 import com.chuanghai.ihotel.vo.RoomRealDataStatuVO;
 import com.chuanghai.ihotel.vo.RoomRealDataStatuVO;
@@ -12,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PathVariable;
 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.RequestHeader;
 import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
@@ -79,4 +81,17 @@ public class RoomRealtimeStatuController {
         return CommonResult.ok();
         return CommonResult.ok();
     }
     }
 
 
+    /**
+     * 锁定房间
+     * @param roomLockRequest 锁定参数
+     * @param adminToken 管理员token
+     * @return
+     */
+    @ParamCheck
+    @AdminLoginCheck
+    @PutMapping("lock")
+    public CommonResult<String> lock(@RequestBody RoomLockRequest roomLockRequest, @RequestHeader("admin_token") String adminToken) {
+        roomRealtimeStatuService.lock(roomLockRequest);
+        return CommonResult.ok();
+    }
 }
 }

+ 42 - 0
src/main/java/com/chuanghai/ihotel/controller/request/RoomLockRequest.java

@@ -0,0 +1,42 @@
+package com.chuanghai.ihotel.controller.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.time.LocalDate;
+import java.util.Set;
+
+/**
+ * @Author: codingliang
+ * @Description: 房间锁定request
+ * @Date: 2022-08-17 16:54
+ * @Version: V1.0
+ **/
+@Data
+public class RoomLockRequest {
+
+    /**
+     * 房间id
+     */
+    @Size(min = 1, message = "最少需要一个房间id")
+    @NotNull(message = "不能为空")
+    private Set<Long> roomId;
+
+    /**
+     * 锁定开始时间 yyyy-MM-dd
+     */
+    @NotNull(message = "不能为空")
+    private LocalDate startDate;
+
+    /**
+     * 锁定结束时间 yyyy-MM-dd
+     */
+    @NotNull(message = "不能为空")
+    private LocalDate endDate;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 7 - 0
src/main/java/com/chuanghai/ihotel/service/RoomRealtimeStatuService.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.RoomLockRequest;
 import com.chuanghai.ihotel.controller.request.RoomRealtimeStatuRequest;
 import com.chuanghai.ihotel.controller.request.RoomRealtimeStatuRequest;
 import com.chuanghai.ihotel.dto.LockRoomDTO;
 import com.chuanghai.ihotel.dto.LockRoomDTO;
 import com.chuanghai.ihotel.entity.RoomRealtimeStatuEntity;
 import com.chuanghai.ihotel.entity.RoomRealtimeStatuEntity;
@@ -71,5 +72,11 @@ public interface RoomRealtimeStatuService extends IService<RoomRealtimeStatuEnti
      * @param statuId
      * @param statuId
      */
      */
     void cleanByStatuId(Long statuId);
     void cleanByStatuId(Long statuId);
+
+    /**
+     * 锁定房间
+     * @param roomLockRequest
+     */
+    void lock(RoomLockRequest roomLockRequest);
 }
 }
 
 

+ 3 - 0
src/main/java/com/chuanghai/ihotel/service/RoomService.java

@@ -7,6 +7,7 @@ import com.chuanghai.ihotel.controller.request.RoomQueryRequest;
 import com.chuanghai.ihotel.entity.RoomEntity;
 import com.chuanghai.ihotel.entity.RoomEntity;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Set;
 
 
 /**
 /**
  * 房间 
  * 房间 
@@ -34,5 +35,7 @@ public interface RoomService extends IService<RoomEntity> {
     boolean myUpdate(RoomEntity room);
     boolean myUpdate(RoomEntity room);
 
 
     boolean myRemoveByIds(List<Long> ids);
     boolean myRemoveByIds(List<Long> ids);
+
+    List<RoomEntity> getByRoomIds(Set<Long> roomIds);
 }
 }
 
 

+ 40 - 2
src/main/java/com/chuanghai/ihotel/service/impl/RoomRealtimeStatuServiceImpl.java

@@ -10,9 +10,11 @@ import com.chuanghai.ihotel.common.utils.PageParam;
 import com.chuanghai.ihotel.common.utils.PageUtils;
 import com.chuanghai.ihotel.common.utils.PageUtils;
 import com.chuanghai.ihotel.constant.RedisKey;
 import com.chuanghai.ihotel.constant.RedisKey;
 import com.chuanghai.ihotel.constant.TimeConstant;
 import com.chuanghai.ihotel.constant.TimeConstant;
+import com.chuanghai.ihotel.controller.request.RoomLockRequest;
 import com.chuanghai.ihotel.controller.request.RoomRealtimeStatuRequest;
 import com.chuanghai.ihotel.controller.request.RoomRealtimeStatuRequest;
 import com.chuanghai.ihotel.dao.RoomRealtimeStatuDao;
 import com.chuanghai.ihotel.dao.RoomRealtimeStatuDao;
 import com.chuanghai.ihotel.dto.LockRoomDTO;
 import com.chuanghai.ihotel.dto.LockRoomDTO;
+import com.chuanghai.ihotel.entity.RoomEntity;
 import com.chuanghai.ihotel.entity.RoomRealtimeStatuEntity;
 import com.chuanghai.ihotel.entity.RoomRealtimeStatuEntity;
 import com.chuanghai.ihotel.entity.RoomTypeEntity;
 import com.chuanghai.ihotel.entity.RoomTypeEntity;
 import com.chuanghai.ihotel.enums.RoomStatuEnum;
 import com.chuanghai.ihotel.enums.RoomStatuEnum;
@@ -28,6 +30,8 @@ import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
@@ -182,14 +186,48 @@ public class RoomRealtimeStatuServiceImpl extends ServiceImpl<RoomRealtimeStatuD
             throw new RRException(BizCodeEnume.PARAMETER_ERROR, "无效的statuId");
             throw new RRException(BizCodeEnume.PARAMETER_ERROR, "无效的statuId");
         }
         }
 
 
-        if (!RoomStatuEnum.DIRTY.getCode().equals(statu.getStatu())) {
-            throw new RRException(BizCodeEnume.PERMISSION_DENIED, "房间非脏房,不可以置为空闲房间");
+        if (!(RoomStatuEnum.DIRTY.getCode().equals(statu.getStatu())
+                || RoomStatuEnum.LOCK.getCode().equals(statu.getStatu()))) {
+            throw new RRException(BizCodeEnume.PERMISSION_DENIED, "房间非脏房或锁定房,不可以置为空闲房间");
         }
         }
 
 
         statu.setStatu(RoomStatuEnum.FREE.getCode());
         statu.setStatu(RoomStatuEnum.FREE.getCode());
         this.updateById(statu);
         this.updateById(statu);
     }
     }
 
 
+    @Override
+    public void lock(RoomLockRequest roomLockRequest) {
+        Set<Long> roomIds = roomLockRequest.getRoomId();
+        if (roomIds.size() <= 0) {
+            return;
+        }
+
+        List<RoomEntity> roomEntities = roomService.getByRoomIds(roomIds);
+        if (roomIds.size() > roomEntities.size()) {
+            throw new RRException(BizCodeEnume.PARAMETER_ERROR, "存在无效的roomId");
+        }
+
+        Map<Long, RoomEntity> roomEntityMap = roomEntities.stream().collect(Collectors.toMap(RoomEntity::getId, e -> e));
+
+
+        LocalDateTime startTime = CommonUtil.localDateToTime(roomLockRequest.getStartDate(), TimeConstant.INTO_TIME);
+        LocalDateTime endTime = CommonUtil.localDateToTime(roomLockRequest.getEndDate(), TimeConstant.OUT_TIME);
+        List<RoomRealtimeStatuEntity> collect = roomIds.stream().map(roomId -> {
+            RoomRealtimeStatuEntity statuEntity = new RoomRealtimeStatuEntity();
+            statuEntity.setBizId(-1L);
+            statuEntity.setStatu(RoomStatuEnum.LOCK.getCode());
+            statuEntity.setRoomId(roomId);
+            statuEntity.setRoomTypeId(roomEntityMap.get(roomId).getRoomTypeId());
+            statuEntity.setRemark(roomLockRequest.getRemark());
+            statuEntity.setStartTime(startTime);
+            statuEntity.setEndTime(endTime);
+
+            return statuEntity;
+        }).collect(Collectors.toList());
+
+        this.saveBatch(collect);
+    }
+
     private RoomRealtimeStatuEntity findByBizId(Long bizId) {
     private RoomRealtimeStatuEntity findByBizId(Long bizId) {
         QueryWrapper<RoomRealtimeStatuEntity> queryWrapper = new QueryWrapper<>();
         QueryWrapper<RoomRealtimeStatuEntity> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("biz_id", bizId);
         queryWrapper.eq("biz_id", bizId);

+ 8 - 0
src/main/java/com/chuanghai/ihotel/service/impl/RoomServiceImpl.java

@@ -24,6 +24,7 @@ import org.springframework.util.StringUtils;
 
 
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.Set;
 
 
 
 
 @Service("roomService")
 @Service("roomService")
@@ -112,4 +113,11 @@ public class RoomServiceImpl extends ServiceImpl<RoomDao, RoomEntity> implements
     public boolean myRemoveByIds(List<Long> ids) {
     public boolean myRemoveByIds(List<Long> ids) {
         return this.removeByIds(ids);
         return this.removeByIds(ids);
     }
     }
+
+    @Override
+    public List<RoomEntity> getByRoomIds(Set<Long> roomIds) {
+        QueryWrapper<RoomEntity> queryWrapper = new QueryWrapper<>();
+        queryWrapper.in("id", roomIds);
+        return this.list(queryWrapper);
+    }
 }
 }