Просмотр исходного кода

1.修改锁房列表序号为从1开始
2.修改锁房选择房间窗口列表排序未按房号正序
3.修改解锁房间未清除redis缓存问题

baiyun 1 год назад
Родитель
Сommit
a4ed406745

+ 1 - 1
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/controller/KfOrderController.java

@@ -191,7 +191,7 @@ public class KfOrderController extends BaseController {
     }
 
     /**
-     * 删除散客入住
+     * 解锁房间
      *
      * @param ids 主键串
      */

+ 50 - 9
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfOrderServiceImpl.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.dromara.backstage.api.RemotePtRoomService;
 import org.dromara.common.core.config.DefaultConfig;
@@ -43,6 +44,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import java.util.stream.Collectors;
 
 /**
  * 散客入住Service业务层处理
@@ -52,6 +54,7 @@ import java.util.concurrent.LinkedBlockingQueue;
  */
 @RequiredArgsConstructor
 @Service
+@Slf4j
 public class KfOrderServiceImpl implements IKfOrderService {
     @DubboReference
     private final RemotePtRoomService roomService;
@@ -237,7 +240,7 @@ public class KfOrderServiceImpl implements IKfOrderService {
             for (int i = 0; i < orders.size(); i++) {
                 orders.get(i).setOrderStatus(HotelBusinessConstants.ORDER_STATUS_SF);
                 orders.get(i).setOrderType(HotelBusinessConstants.ORDER_TYPE_TK);
-                orders.get(i).setOrderIndex(i);
+                orders.get(i).setOrderIndex(i+1);
             }
             // 根据teamId 删除历史锁房
             baseMapper.delete(new LambdaQueryWrapper<KfOrder>()
@@ -455,15 +458,53 @@ public class KfOrderServiceImpl implements IKfOrderService {
      */
     @Override
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if (isValid) {
-            // TODO 做一些业务上的校验,判断是否需要校验
+        if (ids == null || ids.isEmpty()) {
+            return false;
+        }
+
+        try {
+            // 1. 根据id查询要解锁的订单列表
+            List<KfOrderVo> delOrders = baseMapper.selectVoList(
+                Wrappers.lambdaQuery(KfOrder.class)
+                    .select(KfOrder::getRoomCode, KfOrder::getTeamId)
+                    .in(KfOrder::getId, ids));
+
+            if (delOrders.isEmpty()) {
+                return false;
+            }
+
+            // 2. 批量删除要解锁的订单
+            int count = baseMapper.deleteByIds(ids);
+
+            // 3. 批量修改房间状态
+            List<String> roomCodes = delOrders.stream().map(KfOrderVo::getRoomCode).toList();
+            baseMapper.updateRoomStatusBatch(roomCodes, HotelBusinessConstants.ROOM_STATUS_OK);
+            // 4. 重设锁房缓存
+            if (count > 0) {
+                Long teamId = delOrders.get(0).getTeamId();
+                RedisUtils.deleteObject(CacheNames.CLASS_ROOM + "_" + teamId);
+                // 获取当前团队的所有房间代码
+                Set<String> allRoomCodes = new HashSet<>();
+                allRoomCodes.addAll(
+                    baseMapper.selectVoList(
+                            Wrappers.lambdaQuery(KfOrder.class)
+                                .select(KfOrder::getRoomCode)
+                                .eq(KfOrder::getTeamId, teamId)
+                                .eq(KfOrder::getOrderStatus, HotelBusinessConstants.ORDER_STATUS_SF))
+                        .stream()
+                        .map(KfOrderVo::getRoomCode)
+                        .collect(Collectors.toSet())
+                );
+
+                RedisUtils.setCacheObject(CacheNames.CLASS_ROOM + "_" + teamId, allRoomCodes);
+            }
+
+            return count > 0;
+        } catch (Exception e) {
+            // 记录异常日志
+            log.error("解锁房间失败", e);
+            return false;
         }
-        int count = 0;
-        List<KfOrderVo> vo =
-            baseMapper.selectVoList(Wrappers.lambdaQuery(KfOrder.class).select(KfOrder::getRoomCode).in(KfOrder::getId, ids));
-        count = baseMapper.deleteByIds(ids);
-        baseMapper.updateRoomStatusBatch(vo.stream().map(KfOrderVo::getRoomCode).toList() , HotelBusinessConstants.ROOM_STATUS_OK);
-        return count > 0;
     }
 
     /**