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

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

@@ -43,4 +43,11 @@ public class HotelBusinessConstants {
         , ORDER_STATUS_RZ, HotelRoomStatusEnum.YZ.code()
         , ORDER_STATUS_TF, HotelRoomStatusEnum.ZF.code());
 
+    /** 房间用途类型*/
+    //客房
+    public static final String ROOM_TYPE_KF = "10";
+    //餐厅
+    public static final String ROOM_TYPE_CT = "6";
+    //教室
+    public static final String ROOM_TYPE_JS = "3";
 }

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

@@ -114,7 +114,7 @@ public class KfOrderController extends BaseController {
     }
 
     /**
-     * 团客锁房指定房间
+     * 团客指定房间
      */
     @SaCheckPermission("business:guestOrder:add")
     @Log(title = "指定房间", businessType = BusinessType.INSERT)
@@ -124,6 +124,17 @@ public class KfOrderController extends BaseController {
         return toAjax(kfOrderService.roomAssign(bo));
     }
 
+    /**
+     * 团客锁房
+     */
+    @SaCheckPermission("business:guestOrder:add")
+    @Log(title = "团客锁房", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping("/lockRoom")
+    public R<Void> lockRoom(@RequestBody List<KfOrderBo> bos) {
+        return toAjax(kfOrderService.lockRoom(bos));
+    }
+
     /**
      * 修改散客入住
      */

+ 5 - 1
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/domain/vo/KfLockPowerVo.java

@@ -45,6 +45,9 @@ public class KfLockPowerVo implements Serializable {
      */
     @ExcelProperty(value = "房间名称")
     private String roomName;
+    private String roomStatus;
+
+    private String areaName;
 
     /**
      * 电量
@@ -70,5 +73,6 @@ public class KfLockPowerVo implements Serializable {
     @ExcelProperty(value = "维修状态")
     private String repairStatus;
 
-
+    @ExcelProperty(value = "检查时间")
+    private Date createTime;
 }

+ 3 - 0
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/domain/vo/KfOrderVo.java

@@ -81,6 +81,9 @@ public class KfOrderVo implements Serializable {
     @ExcelDictFormat(dictType = "kf_order_status")
     private String orderStatus;
 
+    @ExcelProperty(value = "订单类型", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "kf_order_type")
+    private String orderType;
     /**
      * 应收金额
      */

+ 22 - 0
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/domain/vo/KfRoomAreaVo.java

@@ -0,0 +1,22 @@
+package org.dromara.hotel.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @author Hz
+ * @date 2024/12/5
+ * @description 房间区域信息
+ */
+
+@Data
+public class KfRoomAreaVo {
+
+    private String roomCode;
+    private String roomName;
+    private String roomType;
+    private String roomStatus;
+    private Long areaId;
+    private String areaName;
+    private Long parentId;
+    private String areaType;
+}

+ 7 - 0
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/mapper/KfLockPowerMapper.java

@@ -1,8 +1,14 @@
 package org.dromara.hotel.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import org.apache.ibatis.annotations.Param;
 import org.dromara.hotel.domain.KfLockPower;
 import org.dromara.hotel.domain.vo.KfLockPowerVo;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.hotel.domain.vo.KfRoomAreaVo;
+
+import java.util.List;
 
 /**
  * 门锁电量Mapper接口
@@ -12,4 +18,5 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
  */
 public interface KfLockPowerMapper extends BaseMapperPlus<KfLockPower, KfLockPowerVo> {
 
+    List<KfRoomAreaVo> selectRoomArea(@Param(Constants.WRAPPER) Wrapper<KfRoomAreaVo> ew);
 }

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

@@ -67,6 +67,8 @@ public interface IKfOrderService {
     Boolean insertByBo(KfOrderBo bo);
 
     Boolean roomAssign(KfOrderBo bo);
+
+    Boolean lockRoom(List<KfOrderBo> bos);
     /**
      * 修改散客入住
      *

+ 14 - 2
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfLockPowerServiceImpl.java

@@ -1,5 +1,6 @@
 package org.dromara.hotel.service.impl;
 
+import org.dromara.common.core.constant.HotelBusinessConstants;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
+import org.dromara.hotel.domain.vo.KfRoomAreaVo;
 import org.springframework.stereotype.Service;
 import org.dromara.hotel.domain.bo.KfLockPowerBo;
 import org.dromara.hotel.domain.vo.KfLockPowerVo;
@@ -19,6 +21,7 @@ import org.dromara.hotel.service.IKfLockPowerService;
 import java.util.List;
 import java.util.Map;
 import java.util.Collection;
+import java.util.stream.Collectors;
 
 /**
  * 门锁电量Service业务层处理
@@ -53,7 +56,15 @@ public class KfLockPowerServiceImpl implements IKfLockPowerService {
     @Override
     public TableDataInfo<KfLockPowerVo> queryPageList(KfLockPowerBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<KfLockPower> lqw = buildQueryWrapper(bo);
+        Map<String, KfRoomAreaVo> roomArea = baseMapper.selectRoomArea(new QueryWrapper<KfRoomAreaVo>()
+            .eq("r.room_type", HotelBusinessConstants.ROOM_TYPE_KF))
+            .stream().collect(Collectors.toMap(KfRoomAreaVo::getRoomCode, e -> e));
         Page<KfLockPowerVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        result.getRecords().forEach(e -> {
+            e.setRoomStatus(roomArea.get(e.getRoomCode()).getRoomStatus());
+            e.setAreaName(roomArea.get(e.getRoomCode()).getAreaName());
+        });
+
         return TableDataInfo.build(result);
     }
 
@@ -72,12 +83,13 @@ public class KfLockPowerServiceImpl implements IKfLockPowerService {
     private LambdaQueryWrapper<KfLockPower> buildQueryWrapper(KfLockPowerBo bo) {
         Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<KfLockPower> lqw = Wrappers.lambdaQuery();
-        lqw.eq(StringUtils.isNotBlank(bo.getRoomCode()), KfLockPower::getRoomCode, bo.getRoomCode());
+        lqw.like(StringUtils.isNotBlank(bo.getRoomCode()), KfLockPower::getRoomCode, bo.getRoomCode());
         lqw.like(StringUtils.isNotBlank(bo.getRoomName()), KfLockPower::getRoomName, bo.getRoomName());
-        lqw.eq(bo.getPower() != null, KfLockPower::getPower, bo.getPower());
+        lqw.le(bo.getPower() != null, KfLockPower::getPower, bo.getPower());
         lqw.eq(bo.getRepairUserId() != null, KfLockPower::getRepairUserId, bo.getRepairUserId());
         lqw.like(StringUtils.isNotBlank(bo.getRepairUserName()), KfLockPower::getRepairUserName, bo.getRepairUserName());
         lqw.eq(StringUtils.isNotBlank(bo.getRepairStatus()), KfLockPower::getRepairStatus, bo.getRepairStatus());
+        lqw.orderByAsc(KfLockPower::getPower);
         return lqw;
     }
 

+ 33 - 0
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfOrderServiceImpl.java

@@ -222,6 +222,39 @@ public class KfOrderServiceImpl implements IKfOrderService {
         return flag;
     }
 
+    @Override
+    public Boolean lockRoom(List<KfOrderBo> bos) {
+        if(ObjectUtil.isNotEmpty(bos)){
+            List<KfOrder> orders = MapstructUtils.convert(bos, KfOrder.class);
+            Long teamId = bos.get(0).getTeamId();
+            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++);
+            }
+            //根据teamId 删除历史锁房
+            baseMapper.delete(new LambdaQueryWrapper<KfOrder>()
+                .eq(KfOrder::getTeamId, teamId)
+                .eq(KfOrder::getOrderStatus, HotelBusinessConstants.ORDER_STATUS_SF));
+            //新增锁房订单
+            baseMapper.insertBatch(orders);
+            //重设缓存
+            String key = CacheNames.CLASS_ROOM + "_" + teamId;
+            if(RedisUtils.isExistsObject(key)){
+                RedisUtils.deleteObject(key);
+                LinkedBlockingQueue<String> concurrentLinkedQueue = new LinkedBlockingQueue<>();
+                orders.forEach(k -> concurrentLinkedQueue.add(k.getRoomCode()));
+                RedisUtils.setCacheObject(key, concurrentLinkedQueue);
+            }
+            //刷新房间状态
+            orders.forEach(k -> {
+                baseMapper.updateRoomStatus(k.getRoomCode(), HotelRoomStatusEnum.SF.code());
+            });
+        }
+
+        return null;
+    }
+
     /**
      * 修改散客入住
      *

+ 11 - 0
ruoyi-modules/ruoyi-hotel/src/main/resources/mapper/hotel/basics/KfLockPowerMapper.xml

@@ -20,4 +20,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <result property="tenantId"    column="tenant_id"    />
             <result property="delFlag"    column="del_flag"    />
     </resultMap>
+
+    <select id="selectRoomArea" resultType="org.dromara.hotel.domain.vo.KfRoomAreaVo">
+        select
+            r.room_code, r.room_name, r.room_type, r.status as roomStatus,concat(a2.area_name,a1.area_name) as areaName
+            from t_pt_room r
+                left join t_pt_area a1 on r.area_id = a1.area_id
+                left join t_pt_area a2 on a1.parent_id = a2.area_id
+        <where>
+            ${ew.sqlSegment}
+        </where>
+    </select>
 </mapper>

+ 2 - 1
ruoyi-modules/ruoyi-hotel/src/main/resources/mapper/hotel/business/KfOrderMapper.xml

@@ -31,7 +31,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectPageByBo" resultType="org.dromara.hotel.domain.vo.KfOrderVo">
         select
             o.id,o.guest_id,g.name as guestName,o.team_id,o.team_name,o.room_code,o.room_name,o.start_time
-            ,o.end_time, o.order_status,o.plan_money,o.actual_money,o.remark,g.phone,g.sex,g.id_card as idCard,
+            ,o.end_time, o.order_status, o.order_type,o.plan_money,o.actual_money,o.remark,g.phone,g.sex,g.id_card as
+        idCard,
             rt.room_type_name as guestRoomType, rt.bed_number as bedQuantity, o.order_index as orderIndex
         from t_kf_order o
             left join t_kf_guest g on o.guest_id = g.id