Pārlūkot izejas kodu

转脏房业务编写

wangzhengliang 3 gadi atpakaļ
vecāks
revīzija
b5dd45270c

+ 28 - 3
src/main/java/com/chuanghai/ihotel/controller/RoomRealtimeStatuController.java

@@ -7,6 +7,7 @@ import com.chuanghai.ihotel.common.exception.RRException;
 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.ToDirtyRequest;
 import com.chuanghai.ihotel.service.RoomRealtimeStatuService;
 import com.chuanghai.ihotel.vo.RoomRealDataStatuVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -67,10 +68,10 @@ public class RoomRealtimeStatuController {
 
     /**
      * 脏房修改为空闲房间
-     * @param adminToken
-     * @param statuId
+     * @param adminToken 管理员token
+     * @param statuId 状态id
      * @return
-     * @apiNote 注意,只有当房间为脏房时,房间状态才可以被置为空闲房间
+     * @apiNote 注意,只有当房间为脏房或被锁定时,房间状态才可以被置为空闲房间
      */
     @AdminLoginCheck
     @PutMapping("clean/{statuId}")
@@ -82,6 +83,30 @@ public class RoomRealtimeStatuController {
     }
 
     /**
+     * 房间转为脏房
+     * @param adminToken  管理员token
+     * @param request 请求参数
+     * @return
+     */
+    @AdminLoginCheck
+    @ParamCheck(index = 2)
+    @PutMapping("toDirty")
+    public CommonResult<String> toDirtyByRoomId(@RequestHeader("admin_token") String adminToken,
+                                                @RequestBody ToDirtyRequest request) {
+        if (request.getEndDay().isBefore(request.getStartDay())) {
+            throw new RRException(BizCodeEnume.PARAMETER_ERROR, "时间参数错误");
+        }
+
+        if (Math.abs(ChronoUnit.DAYS.between(request.getStartDay(), request.getEndDay())) != 1) {
+            throw new RRException(BizCodeEnume.PARAMETER_ERROR, "时间间隔不能为1");
+        }
+
+        roomRealtimeStatuService.toDirtyByRoomId(request);
+
+        return CommonResult.ok();
+    }
+
+    /**
      * 锁定房间
      * @param roomLockRequest 锁定参数
      * @param adminToken 管理员token

+ 35 - 0
src/main/java/com/chuanghai/ihotel/controller/request/ToDirtyRequest.java

@@ -0,0 +1,35 @@
+package com.chuanghai.ihotel.controller.request;
+
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDate;
+
+/**
+ * @Author: codingliang
+ * @Description: 转脏房
+ * @Date: 2022-08-23 9:50
+ * @Version: V1.0
+ **/
+@Data
+public class ToDirtyRequest {
+
+    /**
+     * 房间id
+     */
+    @NotNull(message = "不能为空")
+    private Long roomId;
+    /**
+     * 状态开始时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @NotNull(message = "不能为空")
+    private LocalDate startDay;
+    /**
+     * 状态结束时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @NotNull(message = "不能为空")
+    private LocalDate endDay;
+}

+ 2 - 0
src/main/java/com/chuanghai/ihotel/dao/RoomRealtimeStatuDao.java

@@ -23,4 +23,6 @@ public interface RoomRealtimeStatuDao extends BaseMapper<RoomRealtimeStatuEntity
     List<Long> getBusyRoomId(@Param("roomTypeId") Long roomTypeId, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
 
     List<RoomRealtimeStatuEntity> getByRoomIdsAndTime(@Param("roomIds") List<Long> roomIds, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
+
+    RoomRealtimeStatuEntity getByRoomIdAndTime(@Param("roomId") Long roomId, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
 }

+ 7 - 0
src/main/java/com/chuanghai/ihotel/service/RoomRealtimeStatuService.java

@@ -5,6 +5,7 @@ import com.chuanghai.ihotel.common.utils.PageUtils;
 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.ToDirtyRequest;
 import com.chuanghai.ihotel.dto.LockRoomDTO;
 import com.chuanghai.ihotel.entity.RoomRealtimeStatuEntity;
 import com.chuanghai.ihotel.entity.RoomTypeEntity;
@@ -78,5 +79,11 @@ public interface RoomRealtimeStatuService extends IService<RoomRealtimeStatuEnti
      * @param roomLockRequest
      */
     void lock(RoomLockRequest roomLockRequest);
+
+    /**
+     * 转脏房
+     * @param request
+     */
+    void toDirtyByRoomId(ToDirtyRequest request);
 }
 

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

@@ -12,6 +12,7 @@ import com.chuanghai.ihotel.constant.RedisKey;
 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.ToDirtyRequest;
 import com.chuanghai.ihotel.dao.RoomRealtimeStatuDao;
 import com.chuanghai.ihotel.dto.LockRoomDTO;
 import com.chuanghai.ihotel.entity.RoomEntity;
@@ -30,8 +31,7 @@ import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.HashMap;
 import java.util.List;
@@ -228,6 +228,43 @@ public class RoomRealtimeStatuServiceImpl extends ServiceImpl<RoomRealtimeStatuD
         this.saveBatch(collect);
     }
 
+    @Override
+    public void toDirtyByRoomId(ToDirtyRequest request) {
+        // 房间在当前时间段内不是预定、入住状态时才可以转脏房
+        LocalDate startDay = request.getStartDay();
+        LocalDate endDay = request.getEndDay();
+        LocalDateTime startTime = CommonUtil.localDateToTime(startDay, TimeConstant.INTO_TIME);
+        LocalDateTime endTime = CommonUtil.localDateToTime(endDay, TimeConstant.OUT_TIME);
+        Long roomId = request.getRoomId();
+
+        RoomRealtimeStatuEntity statu = this.getBaseMapper().getByRoomIdAndTime(roomId, startTime, endTime);
+        if (statu == null) {
+            RoomEntity room = roomService.getById(roomId);
+            if (room == null) {
+                throw new RRException(BizCodeEnume.PARAMETER_ERROR, "房间不存在");
+            }
+
+            statu = new RoomRealtimeStatuEntity();
+            statu.setRoomId(roomId);
+            statu.setRoomTypeId(room.getRoomTypeId());
+            statu.setStatu(RoomStatuEnum.DIRTY.getCode());
+            statu.setStartTime(startTime);
+            statu.setEndTime(endTime);
+            statu.setBizId(-1L);
+
+            this.save(statu);
+        } else {
+            String statu1 = statu.getStatu();
+            if (RoomStatuEnum.ORDER.getCode().equals(statu1) || RoomStatuEnum.HOLD.getCode().equals(statu1)) {
+                throw new RRException(BizCodeEnume.PERMISSION_DENIED, "当前房间已经被预定或入住不可转脏房");
+            }
+
+            statu.setStatu(RoomStatuEnum.DIRTY.getCode());
+
+            this.updateById(statu);
+        }
+    }
+
     private RoomRealtimeStatuEntity findByBizId(Long bizId) {
         QueryWrapper<RoomRealtimeStatuEntity> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("biz_id", bizId);

+ 10 - 0
src/main/resources/mapper/ihotel/RoomRealtimeStatuDao.xml

@@ -49,4 +49,14 @@
           )
         group by room_id
     </select>
+
+    <!-- 查询当前时间段内房间状态 -->
+    <select id="getByRoomIdAndTime" resultMap="roomRealtimeStatuMap">
+        select *
+        from room_realtime_statu
+        where
+        room_id = #{roomId}
+        and not(end_time <![CDATA[<]]> #{startTime} or start_time <![CDATA[>]]> #{endTime})
+        limit 1
+    </select>
 </mapper>