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

feature: 学员自助
1.酒店门锁对接发客人卡(学员自助报到)

luoyb 1 год назад
Родитель
Сommit
cfe7d426d6
15 измененных файлов с 509 добавлено и 9 удалено
  1. 5 0
      ruoyi-api/ruoyi-api-hotel/src/main/java/org/dromara/hotel/api/domain/vo/RemoteOrderVo.java
  2. 16 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/LockConstants.java
  3. 88 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/RoomCardTypeEnum.java
  4. 72 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/lock/LockBusiness.java
  5. 28 4
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/self/TraineeBusiness.java
  6. 34 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/config/LockConfig.java
  7. 51 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/controller/lock/LockController.java
  8. 67 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/domain/bo/lock/RoomCardBo.java
  9. 1 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/domain/vo/yc/YcTraineeVo.java
  10. 96 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/util/LockUtils.java
  11. 29 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/util/SignatureUtil.java
  12. 1 0
      ruoyi-modules/ruoyi-backstage/src/main/resources/MET-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  13. 2 0
      ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/dubbo/RemoteOrderServiceImpl.java
  14. 4 2
      ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfOrderServiceImpl.java
  15. 15 2
      ruoyi-modules/ruoyi-hotel/src/main/resources/mapper/hotel/business/KfOrderMapper.xml

+ 5 - 0
ruoyi-api/ruoyi-api-hotel/src/main/java/org/dromara/hotel/api/domain/vo/RemoteOrderVo.java

@@ -93,5 +93,10 @@ public class RemoteOrderVo implements Serializable {
      * 团客锁房时的排序号
      */
     private Integer orderIndex;
+
+    /**
+     * 门锁Id
+     */
+    private String lockId;
     //endregion
 }

+ 16 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/LockConstants.java

@@ -0,0 +1,16 @@
+package org.dromara.common.core.constant;
+
+/**
+ * name: LockConstants
+ * package: org.dromara.common.core.constant
+ * description: 门锁的相关常量定义
+ * date: 2024-11-20 11:27:26 11:27
+ *
+ * @author luoyibo
+ * @version 0.1
+ * @since JDK 1.8
+ */
+public interface LockConstants {
+
+    String YY_CARD_SENDER_ID = "6B4EBB16";
+}

+ 88 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/RoomCardTypeEnum.java

@@ -0,0 +1,88 @@
+package org.dromara.common.core.enums;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * name: BalanceUpdateEnum
+ * package: org.dromara.common.core.enums
+ * description: 房卡类型枚举
+ * date: 2024-08-18 20:57:35 20:57
+ *
+ * @author luoyibo
+ * @version 0.1
+ * @since JDK 1.8
+ */
+public enum RoomCardTypeEnum {
+    /**
+     * 密码
+     */
+    PASSWORD(0,"密码"),
+    /**
+     * 客人卡
+     */
+    GUEST(1,"客人卡"),
+    /**
+     * 管理卡
+     */
+    MANAGE(2,"管理卡");
+
+    private final Integer code;
+    private final String message;
+
+    RoomCardTypeEnum(Integer code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public Integer code() {
+        return this.code;
+    }
+
+    public String message() {
+        return this.message;
+    }
+
+    public static String getMessage(String name) {
+        for (RoomCardTypeEnum item : RoomCardTypeEnum.values()) {
+            if (item.name().equals(name)) {
+                return item.message;
+            }
+        }
+        return name;
+    }
+    public static String getMessage(int code) {
+        for (RoomCardTypeEnum item : RoomCardTypeEnum.values()) {
+            if (item.code().equals(code)) {
+                return item.message;
+            }
+        }
+        return "未知";
+    }
+    public static Integer getCode(String name) {
+        for (RoomCardTypeEnum item : RoomCardTypeEnum.values()) {
+            if (item.name().equals(name)) {
+                return item.code;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public String toString() {
+        return this.name();
+    }
+
+    /***
+     * 校验重复的code值
+     */
+    public static void main(String[] args) {
+        RoomCardTypeEnum[] thisEnums = RoomCardTypeEnum.values();
+        List<Integer> codeList = new ArrayList<>();
+        for (RoomCardTypeEnum thisEnum : thisEnums) {
+            if (!codeList.contains(thisEnum.code)) {
+                codeList.add(thisEnum.code());
+            }
+        }
+    }
+}

+ 72 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/lock/LockBusiness.java

@@ -1,9 +1,21 @@
 package org.dromara.backstage.business.lock;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.backstage.domain.bo.lock.RoomCardBo;
+import org.dromara.backstage.util.LockUtils;
+import org.dromara.common.core.constant.DefaultConstants;
+import org.dromara.common.core.constant.LockConstants;
+import org.dromara.common.core.domain.R;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * @ClassName LockBusiness
  * @Description 门锁业务
@@ -16,4 +28,64 @@ import org.springframework.stereotype.Service;
 @Slf4j
 @RequiredArgsConstructor
 public class LockBusiness {
+    private final LockUtils lockUtils;
+
+    public R<String> getWriteCardData(RoomCardBo bo) {
+        Integer cardType = bo.getCardType();
+        String cardData = "";
+        Map<String, Object> formMap = new HashMap<>();
+        switch (cardType) {
+            case 0:
+                formMap = setPwdCardParam(bo);
+                cardData= lockUtils.getPwdCardData(formMap);
+                break;
+            case 1:
+                formMap = setGuestCardParam(bo);
+                cardData = lockUtils.getWriteCardData(formMap);
+                break;
+            case 2:
+                formMap = setManageCardParam(bo);
+                cardData = lockUtils.getWriteCardData(formMap);
+                break;
+        }
+        if(ObjectUtil.isNotEmpty(cardData)){
+            bo.setCardData(cardData);
+            return R.ok(cardData,cardData);
+        }
+        return R.fail();
+    }
+
+    private Map<String, Object> setGuestCardParam(RoomCardBo bo) {
+        Map<String, Object> formMap = new HashMap<>();
+        formMap.put("cardSenderLockId", LockConstants.YY_CARD_SENDER_ID);
+        formMap.put("cardSenderType", bo.getCardType());
+        formMap.put("endDate", DateUtil.format(bo.getEndTime(), DefaultConstants.DATE_TIME_FORMAT));
+        formMap.put("startDate", DateUtil.format(bo.getStartTime(), DefaultConstants.DATE_TIME_FORMAT));
+        formMap.put("userPhone", bo.getPhone());
+        if (ObjectUtil.isNotEmpty(bo.getLockId())) {
+            formMap.put("lockId", bo.getLockId());
+        } else {
+            // TODO 2024-11-20 13:59:09 luoyibo 根据roomCode查lockId
+        }
+        return formMap;
+    }
+    private Map<String, Object> setManageCardParam(RoomCardBo bo) {
+        Map<String, Object> formMap = this.setGuestCardParam(bo);
+
+        return formMap;
+    }
+    private Map<String, Object> setPwdCardParam(RoomCardBo bo) {
+        int randomPwd = RandomUtil.randomInt(1000, 10000);
+        Map<String, Object> formMap = new HashMap<>();
+        formMap.put("CARDTYPE", "2"); // 类型(参考字典表),值建议限制为: 2(自定义密码),3(M1卡片),4(指纹),5,30,31,当类型为30和31时候,为学卡类型,
+        formMap.put("OPERATETYPE", "1"); // 1:添加
+        formMap.put("KEYUSERID", bo.getPhone()); // 授权的用户手机号
+        formMap.put("STARTDATE", bo.getStartTime());
+        formMap.put("ENDDATE", bo.getEndTime());
+        formMap.put("CARDPSWID", randomPwd); // 自定义密码
+        formMap.put("KEYLOCKID", bo.getLockId());
+
+        return formMap;
+    }
+
 }

+ 28 - 4
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/self/TraineeBusiness.java

@@ -2,12 +2,15 @@ package org.dromara.backstage.business.self;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.backstage.business.lock.LockBusiness;
 import org.dromara.backstage.cardCenter.domain.bo.PtCardBo;
 import org.dromara.backstage.cardCenter.service.IPtCardService;
+import org.dromara.backstage.domain.bo.lock.RoomCardBo;
 import org.dromara.backstage.domain.bo.yc.YcTraineeBo;
 import org.dromara.backstage.domain.convert.YcVoConvert;
 import org.dromara.backstage.domain.vo.card.PtCardVo;
@@ -20,8 +23,10 @@ import org.dromara.backstage.payment.domain.vo.PtBagVo;
 import org.dromara.backstage.payment.service.IPtBagService;
 import org.dromara.backstage.payment.service.IPtUserAccountService;
 import org.dromara.common.core.constant.CacheNames;
+import org.dromara.common.core.constant.HotelBusinessConstants;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.domain.model.ErrorInfo;
+import org.dromara.common.core.enums.RoomCardTypeEnum;
 import org.dromara.common.redis.utils.RedisUtils;
 import org.dromara.hotel.api.domain.bo.RemoteOrderBo;
 import org.dromara.hotel.api.domain.bo.RemoteTeamBo;
@@ -64,6 +69,7 @@ public class TraineeBusiness {
     private final IPtUserAccountService userAccountService;
     private final IPtCardService cardService;
     private final IPtBagService bagService;
+    private final LockBusiness lockBusiness;
 
     /**
      * 获取报到学员信息
@@ -109,7 +115,6 @@ public class TraineeBusiness {
      * @param traineeVo 报到后信息
      * @return 报到结果
      */
-
     public R<ErrorInfo> registerTrainee(YcTraineeBo bo, YcTraineeVo traineeVo) {
         // 学员基本信息
         PtUserAccountBo accountBo = new PtUserAccountBo().setUserId(Long.valueOf(bo.getUserId()));
@@ -130,8 +135,6 @@ public class TraineeBusiness {
             roomCode = bo.getRoomCode();
         }
         if (ObjectUtil.isNotEmpty(roomCode)) {
-            // TODO 2024-11-17 luoyibo 获取房卡信息
-
             // 办理住宿
             RemoteOrderVo kfOrderVo = checkInTeamByBo(bo);
             ycTraineeVo.setGuesterId(kfOrderVo.getGuestId().toString());
@@ -139,6 +142,10 @@ public class TraineeBusiness {
             ycTraineeVo.setRoomId(kfOrderVo.getRoomId());
             ycTraineeVo.setGuestRoomId(kfOrderVo.getRoomId());
             ycTraineeVo.setOrderIndex(ObjectUtil.isNotEmpty(kfOrderVo.getOrderIndex()) ? kfOrderVo.getOrderIndex() : 0);
+
+            // TODO 2024-11-17 luoyibo 获取房卡信息
+            String cardData = getRoomCardData(kfOrderVo);
+            ycTraineeVo.setRoomCardData(cardData);
         }
 
         // 培训班级信息
@@ -273,9 +280,26 @@ public class TraineeBusiness {
         remoteBo.setRoomCode(bo.getRoomCode());
         remoteBo.setStartTime(bo.getCheckInDate());
         remoteBo.setEndTime(bo.getCheckoutDate());
-        remoteBo.setOrderStatus("1");
+        remoteBo.setOrderStatus(HotelBusinessConstants.ORDER_STATUS_RZ);
         remoteBo.setUpdatedBy(Long.valueOf(bo.getUserId()));
 
         return kfOrderService.checkInTeamByBo(remoteBo);
     }
+
+    private String getRoomCardData(RemoteOrderVo orderVo) {
+        RoomCardBo roomCardBo = new RoomCardBo();
+        roomCardBo.setStartTime(DateUtil.toLocalDateTime(orderVo.getCheckinDate()));
+        roomCardBo.setEndTime(DateUtil.toLocalDateTime(orderVo.getCheckoutDate()));
+        roomCardBo.setCardType(RoomCardTypeEnum.GUEST.code());
+        roomCardBo.setRealName(orderVo.getName());
+        roomCardBo.setPhone(orderVo.getPhone());
+        roomCardBo.setRoomCode(orderVo.getRoomCode());
+        roomCardBo.setLockId(orderVo.getLockId());
+        R<String> result= lockBusiness.getWriteCardData(roomCardBo);
+        if(R.isSuccess(result)){
+            return result.getData();
+        } else{
+            return "";
+        }
+    }
 }

+ 34 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/config/LockConfig.java

@@ -0,0 +1,34 @@
+package org.dromara.backstage.config;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * name: LockConfig
+ * package: org.dromara.backstage.config
+ * description: 酒店门锁系统API配置
+ * date: 2024-11-20 08:46:52 08:46
+ *
+ * @author luoyibo
+ * @version 0.1
+ * @since JDK 1.8
+ */
+@Configuration
+@Data
+public class LockConfig {
+    @Value("${hotelLock.appUrl}")
+    private String appUrl;
+
+    @Value("${hotelLock.appId}")
+    private String appId;
+
+    @Value("${hotelLock.appKey}")
+    private String appKey;
+
+    @Value("${hotelLock.userName}")
+    private String userName;
+
+    @Value("${hotelLock.password}")
+    private String password;
+}

+ 51 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/controller/lock/LockController.java

@@ -0,0 +1,51 @@
+package org.dromara.backstage.controller.lock;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.backstage.business.lock.LockBusiness;
+import org.dromara.backstage.domain.bo.lock.RoomCardBo;
+import org.dromara.backstage.util.LockUtils;
+import org.dromara.common.core.api.ResponseResult;
+import org.dromara.common.core.api.ReturnResult;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * name: lockController
+ * package: org.dromara.backstage.controller.lock
+ * description: 门锁操作controller
+ * date: 2024-11-20 09:23:34 09:23
+ *
+ * @author luoyibo
+ * @version 0.1
+ * @since JDK 1.8
+ */
+@RequiredArgsConstructor
+@RestController("LockController")
+@RequestMapping("/lock")
+@ResponseResult
+@Slf4j
+public class LockController {
+    private final LockUtils lockUtils;
+    private final LockBusiness lockBusiness;
+
+    /**
+     * 查询门锁状态
+     * @param lockId 门锁Id
+     * @return 状态
+     */
+    @GetMapping(value = "/device/status", produces = "application/json; charset=utf-8")
+    ReturnResult queryDeviceStatus(@RequestParam("lockId") String lockId) {
+        Map<String, Object> formMap = new HashMap<>();
+        formMap.put("DEVICE_ID", lockId);
+        String result = lockUtils.sendPost(formMap, "queryDeviceStatus");
+        return ReturnResult.success(result);
+    }
+
+    @GetMapping(value = "/card/data")
+    ReturnResult getRoomCardData(@RequestBody RoomCardBo bo) {
+        return ReturnResult.success(lockBusiness.getWriteCardData(bo));
+    }
+}

+ 67 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/domain/bo/lock/RoomCardBo.java

@@ -0,0 +1,67 @@
+package org.dromara.backstage.domain.bo.lock;
+
+import com.mysql.cj.exceptions.StreamingNotifiable;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * name: LockCardBo
+ * package: org.dromara.backstage.domain.bo.lock
+ * description: 房卡业务对象
+ * date: 2024-11-20 10:53:44 10:53
+ *
+ * @author luoyibo
+ * @version 0.1
+ * @since JDK 1.8
+ */
+@Data
+@Accessors(chain = true)
+public class RoomCardBo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 3767309713294164750L;
+    /**
+     * 生效(入住)时间
+     */
+    private LocalDateTime startTime;
+    /**
+     * 失效(退房)时间
+     */
+    private LocalDateTime endTime;
+    /**
+     * 房卡类型 1-客人卡 2-员工卡 0-密码
+     */
+    private Integer cardType;
+    /**
+     * 门锁Id
+     */
+    private String lockId;
+    /**
+     * 持卡人姓名
+     */
+    private String realName;
+    /**
+     * 持卡人电话
+     */
+    private String phone;
+    /**
+     * 分组Id 发员工卡时使用
+     */
+    private String groupIds;
+    /**
+     * 卡使用类型,发员工卡时用 限时256 总卡 1024 周期循环 动态
+     */
+    private String cardUseType;
+    /**
+     * 写卡数据
+     */
+    private String cardData;
+
+    /**
+     * 房间号
+     */
+    private String roomCode;
+}

+ 1 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/domain/vo/yc/YcTraineeVo.java

@@ -139,6 +139,6 @@ public class YcTraineeVo implements Serializable {
     /**
      * 房卡信息
      */
-    private String roomCardData="";
+    private String roomCardData;
     //endregion
 }

+ 96 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/util/LockUtils.java

@@ -0,0 +1,96 @@
+package org.dromara.backstage.util;
+
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.backstage.config.LockConfig;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * name: LockUtils
+ * package: org.dromara.backstage.util
+ * description: 门锁辅助工具类
+ * date: 2024-11-20 09:06:16 09:06
+ *
+ * @author luoyibo
+ * @version 0.1
+ * @since JDK 1.8
+ */
+
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class LockUtils {
+    private final LockConfig lockConfig;
+    private String token;
+    /**
+     * 通过登陆去获取token,23小时刷新一次
+     */
+    @Scheduled(fixedDelay = 23 * 60 * 60 * 1000)
+    public void refreshToken() {
+        Map<String, Object> formMap = new HashMap<String, Object>(7);
+        // APPID
+        formMap.put("APPID", lockConfig.getAppId());
+        // 当前时间的时间戳(毫秒为单位)
+        formMap.put("AT", System.currentTimeMillis());
+        // 随机码(任意16进制的随机数)
+        formMap.put("NONCESTR", RandomUtil.randomString(13));
+        // 登录ip
+        formMap.put("PHONEIP", "127.0.0.1");
+        // android
+        formMap.put("PHONEID", "android");
+        // 用户帐号(二次开发手机号)
+        formMap.put("USERNAME", lockConfig.getUserName());
+        // 用户密码
+        formMap.put("PASSWORD", lockConfig.getPassword());
+        String sign = SignatureUtil.sortMapSign(formMap, lockConfig.getAppKey());
+        // 签名
+        formMap.put("SIGN", sign);
+        HttpRequest req = HttpUtil.createPost(lockConfig.getAppUrl() + "dmsLogin");
+        req.form(formMap);
+        String resultJson = req.execute().body();
+        JSONObject result = JSONUtil.parseObj(resultJson);
+        if (result.getInt("result") == 0) {
+            token = result.getStr("token");
+        } else {
+            log.error("获取酒店锁token失败!{}", result);
+        }
+    }
+    public String sendPost(Map<String, Object> formMap, String reqMethod) {
+        if (StrUtil.isEmpty(token)) {
+            refreshToken();
+        }
+        // APPID
+        formMap.put("APPID", lockConfig.getAppId());
+        // 当前时间的时间戳(毫秒为单位)
+        formMap.put("AT", System.currentTimeMillis());
+        // 随机码(任意16进制的随机数)
+        formMap.put("NONCESTR", RandomUtil.randomString(13));
+        // 会话token
+        formMap.put("TOKEN", token);
+        String sign = SignatureUtil.sortMapSign(formMap, lockConfig.getAppKey());
+        // 签名
+        formMap.put("SIGN", sign);
+        HttpRequest req = HttpUtil.createPost(lockConfig.getAppUrl() + reqMethod);
+        req.form(formMap);
+        //String temp = req.execute().body();
+        return req.execute().body();
+    }
+
+    public String getWriteCardData(Map<String, Object> mapForm) {
+        String sendResult = sendPost(mapForm, "cardSender/cardSender");
+        return JSONUtil.parseObj(sendResult).getStr("data");
+    }
+    public String getPwdCardData(Map<String, Object> mapForm) {
+        return sendPost(mapForm, "addLockKey");
+    }
+}

+ 29 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/util/SignatureUtil.java

@@ -0,0 +1,29 @@
+package org.dromara.backstage.util;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.digest.DigestUtil;
+
+import java.util.*;
+
+public class SignatureUtil {
+	public static String sortMap(Map<String, Object> param) {
+		StringBuilder result = new StringBuilder();
+		Collection<String> keySet = param.keySet();
+		List<String> list = new ArrayList<>(keySet);
+		Collections.sort(list);
+        for (String key : list) {
+            if (param.get(key) == null || StrUtil.isBlank(param.get(key).toString())) {
+                continue;
+            }
+            result.append(key).append("=").append(param.get(key)).append("&");
+        }
+		return result.substring(0, result.length() - 1);
+	}
+
+	public static String sortMapSign(Map<String, Object> param, String appKey) {
+		String stringA = sortMap(param);
+		String stringSignTemp = stringA + "&APPKEY=" + appKey;
+		return DigestUtil.md5Hex(stringSignTemp).toUpperCase();
+	}
+
+}

+ 1 - 0
ruoyi-modules/ruoyi-backstage/src/main/resources/MET-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -0,0 +1 @@
+org.dromara.backstage.config.LockConfig

+ 2 - 0
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/dubbo/RemoteOrderServiceImpl.java

@@ -33,7 +33,9 @@ public class RemoteOrderServiceImpl implements RemoteOrderService {
     @Override
     public RemoteOrderVo selectGuestOrderByOtherId(String otherId) {
         KfOrderBo bo = new KfOrderBo();
+        String[] status = {"1","3"};
         bo.setOtherId(otherId);
+        bo.setOrderStatusList(status);
 
         return kfOrderService.selectByBo(bo);
     }

+ 4 - 2
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfOrderServiceImpl.java

@@ -233,8 +233,10 @@ public class KfOrderServiceImpl implements IKfOrderService {
             } else {
                 this.insertByBo(bo);
             }
-            vo = this.queryById(bo.getId());
-            return MapstructUtils.convert(vo, RemoteOrderVo.class);
+            KfOrderBo queryBo = new KfOrderBo();
+            queryBo.setId(bo.getId());
+            queryBo.setOrderStatus(HotelBusinessConstants.ORDER_STATUS_RZ);
+            return this.selectByBo(queryBo);
         }
         return null;
     }

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

@@ -77,15 +77,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectByBo" resultType="org.dromara.hotel.api.domain.vo.RemoteOrderVo">
         SELECT tkg.id AS guestId, tkg.name, tkg.sex, tkg.id_card AS idCard, tkg.phone, tkg.other_id AS otherId, tkgtr.team_id AS teamId,
         tko.room_code AS roomCode, tpr.room_id AS roomId, tko.start_time AS checkinDate, tko.end_time AS checkoutDate,
-        tko.order_status AS orderStatus, tko.order_type AS orderType, tko.order_index AS orderIndex
+        tko.order_status AS orderStatus, tko.order_type AS orderType, tko.order_index AS orderIndex,tkrlr.lock_id as lockId
         FROM t_kf_guest tkg
                 LEFT JOIN t_kf_guest_team_r tkgtr ON tkgtr.guest_id=tkg.id AND tkgtr.del_flag=0
-                LEFT JOIN t_kf_order tko ON tko.guest_id=tkg.id and tko.order_status in ('1','3')
+                LEFT JOIN t_kf_order tko ON tko.guest_id=tkg.id
                 LEFT JOIN t_pt_room tpr ON tpr.room_code=tko.room_code
+                LEFT JOIN t_kf_room_lock_r tkrlr ON tkrlr.room_id = tpr.room_id
         <where>
             <if test="bo.otherId != null and  bo.otherId != ''">
                 and tkg.other_id = #{bo.otherId}
             </if>
+            <if test="bo.id != null and  bo.id != ''">
+                and tko.id = #{bo.id}
+            </if>
+            <if test="bo.orderStatusList != null and bo.orderStatusList.length > 0">
+                and tko.order_status in
+                <foreach collection="bo.orderStatusList" item="orderStatus" open="(" separator="," close=")">
+                    #{orderStatus}
+                </foreach>
+            </if>
+            <if test="bo.orderStatus != null and  bo.orderStatus != ''">
+                and tko.order_status = #{bo.orderStatus}
+            </if>
         </where>
     </select>