浏览代码

团客身份证报到功能开发

baiyun 1 年之前
父节点
当前提交
bba66461cd

+ 12 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/HotelBusinessConstants.java

@@ -1,5 +1,9 @@
 package org.dromara.common.core.constant;
 
+import org.dromara.common.core.enums.HotelRoomStatusEnum;
+
+import java.util.Map;
+
 /**
  * @author Hz
  * @date 2024/11/15
@@ -31,4 +35,12 @@ public class HotelBusinessConstants {
     /** 是 */
     public static final String YES = "1";
 
+
+    /** 订单状态和房间状态对应关系*/
+    public static final Map<String, String> orderStatusRoomStatusMap = Map.of(
+        ORDER_STATUS_YD, HotelRoomStatusEnum.YD.code()
+        , ORDER_STATUS_SF, HotelRoomStatusEnum.SF.code()
+        , ORDER_STATUS_RZ, HotelRoomStatusEnum.YZ.code()
+        , ORDER_STATUS_TF, HotelRoomStatusEnum.ZF.code());
+
 }

+ 2 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/mq/KafkaNormalConsumer.java

@@ -16,6 +16,7 @@ import org.dromara.common.core.domain.R;
 import org.dromara.common.core.enums.CreditTypeEnum;
 import org.springframework.kafka.annotation.KafkaListener;
 import org.dromara.common.message.kafka.domain.KafkaMessage;
+import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
 import java.util.HashMap;
@@ -50,7 +51,7 @@ public class KafkaNormalConsumer {
 
                 //uploadtest();
             } catch (Exception e) {
-                log.info(e.getMessage());
+                log.error("消费记录处理失败:", e);
             }
         }
         log.info("【消费者】received the message key {},value:{}", key, value);

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

@@ -132,6 +132,17 @@ public class KfOrderController extends BaseController {
         return toAjax(kfOrderService.updateByBo(bo));
     }
 
+    /**
+     * 团客报到
+     */
+    @SaCheckPermission("business:guestOrder:edit")
+    @Log(title = "团客报到", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping("teamGuestCheckIn")
+    public R<Void> teamGuestCheckIn(@RequestBody KfTeamGuestVo vo) {
+        return toAjax(kfOrderService.teamGuestCheckIn(vo));
+    }
+
     /**
      * 退房|取消预定
      */

+ 4 - 0
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/IKfOrderService.java

@@ -73,6 +73,10 @@ public interface IKfOrderService {
      */
     Boolean updateByBo(KfOrderBo bo);
 
+    Boolean teamGuestCheckIn(KfTeamGuestVo bo);
+
+    /** 修改订单信息和房间状态*/
+    Boolean updateOrderAndRoomStatus(KfOrderBo bo);
     /**
      * 退房
      */

+ 64 - 1
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfOrderServiceImpl.java

@@ -8,6 +8,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 org.dromara.common.core.constant.CacheNames;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.dromara.backstage.api.RemotePtRoomService;
 import org.dromara.common.core.constant.DefaultConstants;
@@ -19,6 +20,7 @@ import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.redis.utils.RedisUtils;
 import org.dromara.hotel.api.domain.bo.RemoteOrderBo;
 import org.dromara.hotel.api.domain.vo.RemoteOrderVo;
 import org.dromara.hotel.domain.KfOrder;
@@ -34,6 +36,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.concurrent.LinkedBlockingQueue;
 
 /**
  * 散客入住Service业务层处理
@@ -125,7 +128,7 @@ public class KfOrderServiceImpl implements IKfOrderService {
         //2.查询团客入住信息
         KfOrder order = baseMapper.selectOne(Wrappers.<KfOrder>lambdaQuery()
             .eq(KfOrder::getGuestId, teamGuest.getId())
-            .eq(KfOrder::getGuestId, teamGuest.getId()));
+            .eq(KfOrder::getTeamId, teamGuest.getTeamId()));
         if(ObjectUtil.isNotEmpty(order)) {
             teamGuest.setRoomCode(order.getRoomCode());
             teamGuest.setRoomName(order.getRoomName());
@@ -229,6 +232,66 @@ public class KfOrderServiceImpl implements IKfOrderService {
         return baseMapper.updateById(update) > 0;
     }
 
+    /**
+     * 团客报到
+     */
+    @Override
+    public Boolean teamGuestCheckIn(KfTeamGuestVo bo) {
+        boolean flag = false;
+        //1.根据客人ID和客团ID修改客人客团关系表的报到状态,并发送kafka消息
+        flag = guestTeamService.setGuestCheckInStatus(bo.getId(), bo.getTeamId());
+        String roomCode = bo.getRoomCode();
+        //2.修改订单信息
+        if (bo.getOrderId() != null) {
+            // 参数里面有OrderId,设置订单状态为入住
+            KfOrderBo orderBo = new KfOrderBo();
+            orderBo.setId(bo.getOrderId());
+            orderBo.setOrderStatus(HotelBusinessConstants.ORDER_STATUS_RZ);
+            //3.删除锁房缓存,根据roomCode修改房间状态
+            updateOrderAndRoomStatus(orderBo);
+        } else {
+            // 参数里面没有OrderId,根据团客ID查询锁房订单信息,设置订单状态为入住
+            LambdaQueryWrapper<KfOrder> queryWrapper = new LambdaQueryWrapper<KfOrder>()
+                .eq(KfOrder::getTeamId, bo.getTeamId())
+                .eq(KfOrder::getOrderStatus, HotelBusinessConstants.ORDER_STATUS_SF)
+                .orderByAsc(KfOrder::getOrderIndex);
+
+            List<KfOrderVo> list = baseMapper.selectVoList(queryWrapper);
+            if(ObjectUtil.isNotEmpty(list)){
+                KfOrderVo orderVo = list.get(0);
+                KfOrderBo orderBo = new KfOrderBo();
+                orderBo.setId(orderVo.getId());
+                orderBo.setGuestId(bo.getId());
+                orderBo.setGuestName(bo.getName());
+                orderBo.setOrderStatus(HotelBusinessConstants.ORDER_STATUS_RZ);
+                //3.删除锁房缓存,根据roomCode修改房间状态
+                updateOrderAndRoomStatus(orderBo);
+            }
+        }
+        return flag;
+        }
+
+    @Override
+    public Boolean updateOrderAndRoomStatus(KfOrderBo bo) {
+        if(ObjectUtil.isNotEmpty(bo)){
+            //更新订单
+            boolean flag = updateByBo(bo);
+            if(flag){
+                String roomStatus = HotelBusinessConstants.orderStatusRoomStatusMap.get(bo.getOrderStatus());
+                //更新房间状态
+                baseMapper.updateRoomStatus(bo.getRoomCode(), roomStatus);
+                //清除缓存
+                String key = CacheNames.CLASS_ROOM + "_" + bo.getTeamId();
+                if(RedisUtils.isExistsObject(key)){
+                    LinkedBlockingQueue<String> concurrentLinkedQueue = RedisUtils.getCacheObject(key);
+                    concurrentLinkedQueue.poll();
+                    RedisUtils.setCacheObject(key, concurrentLinkedQueue);
+                }
+            }
+        }
+        return null;
+    }
+
     @Override
     public Boolean distributeOrder(KfOrderBo bo) {
         boolean flag = false;