Explorar el Código

feature: 门锁对接
1.完善发员工卡

luo.yibo@datuai.com hace 1 año
padre
commit
b2ea4d4772

+ 30 - 24
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtRoomController.java

@@ -1,41 +1,41 @@
 package org.dromara.backstage.basics.controller;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import lombok.RequiredArgsConstructor;
-import jakarta.servlet.http.HttpServletResponse;
-import jakarta.validation.constraints.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import org.dromara.backstage.basics.domain.bo.QueryRoomBo;
-import org.dromara.common.core.enums.FJLXEnum;
-import org.dromara.common.core.enums.HotelRoomStatusEnum;
-import org.dromara.common.message.kafka.aop.annotation.SyncDataToLocal;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
 import org.dromara.backstage.basics.domain.bo.PtRoomBatchSetBo;
+import org.dromara.backstage.basics.domain.bo.PtRoomBo;
+import org.dromara.backstage.basics.domain.bo.QueryRoomBo;
 import org.dromara.backstage.basics.domain.vo.PtAreaVo;
 import org.dromara.backstage.basics.domain.vo.PtRoomTempImportVo;
+import org.dromara.backstage.basics.domain.vo.PtRoomVo;
 import org.dromara.backstage.basics.listener.PtRoomImportListener;
-import org.dromara.common.excel.core.ExcelResult;
-import org.dromara.system.api.RemoteDictService;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.validation.annotation.Validated;
-import org.dromara.common.idempotent.annotation.RepeatSubmit;
-import org.dromara.common.log.annotation.Log;
-import org.dromara.common.web.core.BaseController;
-import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.backstage.basics.service.IPtRoomService;
 import org.dromara.common.core.domain.R;
+import org.dromara.common.core.enums.FJLXEnum;
+import org.dromara.common.core.enums.HotelRoomStatusEnum;
 import org.dromara.common.core.validate.AddGroup;
 import org.dromara.common.core.validate.EditGroup;
-import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.core.ExcelResult;
 import org.dromara.common.excel.utils.ExcelUtil;
-import org.dromara.backstage.basics.domain.vo.PtRoomVo;
-import org.dromara.backstage.basics.domain.bo.PtRoomBo;
-import org.dromara.backstage.basics.service.IPtRoomService;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.message.kafka.aop.annotation.SyncDataToLocal;
+import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.springframework.http.MediaType;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
 import static org.dromara.common.message.kafka.constant.MessageEventTypeConstants.*;
 
 /**
@@ -193,4 +193,10 @@ public class PtRoomController extends BaseController {
     /**
      * 根据房间编号和楼层查询房间信息
      */
+
+    @SaCheckPermission("room:ptRoom:list")
+    @GetMapping("/hotel/room")
+    public R<List<PtRoomVo>> queryHotelRoom(PtRoomBo bo) {
+        return R.ok(ptRoomService.queryHotelRoomList(bo.getAreaId()));
+    }
 }

+ 4 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/mapper/PtRoomMapper.java

@@ -1,9 +1,12 @@
 package org.dromara.backstage.basics.mapper;
 
+import org.apache.ibatis.annotations.Param;
 import org.dromara.backstage.basics.domain.PtRoom;
 import org.dromara.backstage.basics.domain.vo.PtRoomVo;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 
+import java.util.List;
+
 /**
  * 房间定义Mapper接口
  *
@@ -11,5 +14,5 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
  * @date 2024-08-09
  */
 public interface PtRoomMapper extends BaseMapperPlus<PtRoom, PtRoomVo> {
-
+    List<PtRoomVo> selectHotelRoomList(@Param("areaIds") List<Long> areaIds);
 }

+ 6 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/service/IPtRoomService.java

@@ -109,5 +109,10 @@ public interface IPtRoomService {
      */
     Boolean updateGuestRoomStatus(String roomCode, String tenantId, String roomStatus);
 
-
+    /**
+     * 查询酒店下的所有客房
+     * @param hotelId 客房区域id
+     * @return 客房集合
+     */
+    List<PtRoomVo> queryHotelRoomList(Long hotelId);
 }

+ 17 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/service/impl/PtRoomServiceImpl.java

@@ -131,7 +131,6 @@ public class PtRoomServiceImpl implements IPtRoomService {
             lqw.in(PtRoom::getAreaId, areaIds);
             rs = baseMapper.selectVoList(lqw);
         }
-
         return rs;
     }
 
@@ -391,4 +390,21 @@ public class PtRoomServiceImpl implements IPtRoomService {
 
         return baseMapper.update(null,luw)>0;
     }
+    /**
+     * 查询酒店下的所有客房
+     * @param hotelId 客房区域id
+     * @return 客房集合
+     */
+    @Override
+    public List<PtRoomVo> queryHotelRoomList(Long hotelId) {
+        List<PtRoomVo> rs = new ArrayList<>();
+        //先查询楼层,在查询楼层下面的房间
+        List<PtAreaVo> ptAreaVos = areaService.queryListLD(hotelId);
+        if(CollectionUtil.isNotEmpty(ptAreaVos)){
+            LambdaQueryWrapper<PtRoom> lqw = Wrappers.lambdaQuery();
+            List<Long> areaIds = ptAreaVos.stream().map(PtAreaVo::getAreaId).toList();;
+            rs = baseMapper.selectHotelRoomList(areaIds);
+        }
+        return rs;
+    }
 }

+ 22 - 3
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/lock/LockBusiness.java

@@ -7,6 +7,8 @@ import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.backstage.basics.domain.vo.PtRoomVo;
+import org.dromara.backstage.basics.service.IPtRoomService;
 import org.dromara.backstage.domain.bo.lock.RoomCardBo;
 import org.dromara.backstage.util.LockUtils;
 import org.dromara.common.core.constant.DefaultConstants;
@@ -31,21 +33,31 @@ import java.util.Map;
 @RequiredArgsConstructor
 public class LockBusiness {
     private final LockUtils lockUtils;
+    private final IPtRoomService roomService;
 
+    /**
+     * 获取门锁发卡数据
+     *
+     * @param bo 门锁发卡业务对象
+     * @return 发卡数据
+     */
     public R<String> getWriteCardData(RoomCardBo bo) {
         Integer cardType = bo.getCardType();
         String cardData = "";
         Map<String, Object> formMap;
         cardData = switch (cardType) {
             case 0 -> {
+                // 密码卡
                 formMap = setPwdCardParam(bo);
                 yield lockUtils.getPwdCardData(formMap);
             }
             case 1 -> {
+                // 客人卡
                 formMap = setGuestCardParam(bo);
                 yield lockUtils.getWriteCardData(formMap);
             }
             case 2 -> {
+                // 员工卡
                 formMap = setManageCardParam(bo);
                 yield lockUtils.getWriteCardData(formMap);
             }
@@ -58,6 +70,12 @@ public class LockBusiness {
         return R.fail();
     }
 
+    /**
+     * 远程开门
+     * @param lockId 门锁Id
+     * @return 开门结果
+     */
+
     public R<String> remoteOpenDoor(String lockId) {
         Map<String, Object> formMap = new HashMap<>();
         formMap.put("DEVICE_ID", lockId);
@@ -90,8 +108,9 @@ public class LockBusiness {
             List<String> areaIds = List.of(bo.getGroupIds().split(","));
 
             for (String areaId : areaIds) {
-                // TODO 2024-11-20 luoyibo 根据区域id查询出对应的门锁id,只需要一条
-                String lockId = "0000";
+                List<PtRoomVo> roomVos = roomService.queryHotelRoomList(Long.valueOf(areaId));
+                String lockId = roomVos.get(0).getLockId();
+                // String lockId = "0000";
                 Map<String, Object> mapGroup = new HashMap<>();
                 mapGroup.put("DEVICE_ID", lockId);
                 mapGroup.put("PAGENO", 1);
@@ -100,7 +119,7 @@ public class LockBusiness {
                 JSONObject obj = JSONUtil.parseObj(result);
                 String lockkeyid = obj.getJSONArray("AppkeyList").getJSONObject(0).getStr("KEY_ID");
                 // 通过keyid获取分组
-                mapGroup = new HashMap<String, Object>();
+                mapGroup = new HashMap<>();
                 mapGroup.put("LOCKKEYID", lockkeyid);
                 mapGroup.put("OPERATETYPE", "2");
                 result = lockUtils.sendPost(mapGroup, "operateLockGroup");

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

@@ -58,6 +58,11 @@ public class LockController {
         return ReturnResult.success(lockBusiness.getWriteCardData(bo));
     }
 
+    /**
+     * 远程开门
+     * @param lockId 门锁Id
+     * @return 开门结果
+     */
     @GetMapping(value = "/remote/open")
     ReturnResult remoteOpen(@RequestParam("lockId") String lockId) {
         R<String> result = lockBusiness.remoteOpenDoor(lockId);

+ 6 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/util/LockUtils.java

@@ -100,7 +100,7 @@ public class LockUtils {
     }
 
     /**
-     * 请求发卡数据
+     * 请求发卡数据 员工卡和客人卡
      * @param mapForm 请求参数
      * @return 发卡数据
      */
@@ -113,6 +113,11 @@ public class LockUtils {
         }
     }
 
+    /**
+     * 请求发卡数据 密码卡
+     * @param mapForm 请求参数
+     * @return 发卡数据
+     */
     public String getPwdCardData(Map<String, Object> mapForm) {
         return sendPost(mapForm, "addLockKey");
     }

+ 11 - 0
ruoyi-modules/ruoyi-backstage/src/main/resources/mapper/basics/room/PtRoomMapper.xml

@@ -20,4 +20,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <result property="updateBy"    column="update_by"    />
             <result property="updateTime"    column="update_time"    />
     </resultMap>
+
+    <select id="selectHotelRoomList" resultType="org.dromara.backstage.basics.domain.vo.PtRoomVo">
+        SELECT tpr.*,tkrlr.lock_id,tkrlr.lock_password FROM t_pt_room tpr
+         INNER JOIN t_kf_room_lock_r tkrlr on tkrlr.room_id=tpr.room_id
+        <if test="areaIds != null and areaIds.size() > 0">
+            where tpr.area_id in
+            <foreach collection="areaIds" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+    </select>
 </mapper>

+ 5 - 6
ruoyi-modules/ruoyi-backstage/src/test/java/org/dromara/backstage/mq/KafkaProducerTest.java

@@ -1,6 +1,5 @@
 package org.dromara.backstage.mq;
 
-import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
@@ -10,9 +9,9 @@ public class KafkaProducerTest {
     @Autowired
     private KafkaNormalProducer kafkaProcedurer;
 
-    @Test
-    public void send()
-    {
-        kafkaProcedurer.send("ykt_local_listener", "test message2");
-    }
+    // @Test
+    // public void send()
+    // {
+    //     kafkaProcedurer.sendKafkaMessage("ykt_local_listener", "test message2");
+    // }
 }

+ 1 - 1
ruoyi-visual/ruoyi-nacos/pom.xml

@@ -318,7 +318,7 @@
             <artifactId>spring-boot-admin-client</artifactId>
             <version>${spring-boot-admin.version}</version>
         </dependency>
-        <dependency>
+      <dependency>
             <groupId>cn.com.kingbase</groupId>
             <artifactId>kingbase8</artifactId>
         </dependency>