Quellcode durchsuchen

fix: 客房系统
1.开门记录同步

luoyb vor 1 Jahr
Ursprung
Commit
9acf717260

+ 64 - 0
ruoyi-api/ruoyi-api-hotel/src/main/java/org/dromara/hotel/api/domain/bo/RemoteDoorOpenBo.java

@@ -0,0 +1,64 @@
+package org.dromara.hotel.api.domain.bo;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 开门记录业务对象 t_kf_door_open_his
+ *
+ * @author LionLi
+ * @date 2024-11-29
+ */
+@Data
+public class RemoteDoorOpenBo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -5379473789330294396L;
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 房间编号
+     */
+    private String roomCode;
+
+    /**
+     * 房间名称
+     */
+    private String roomName;
+
+    /**
+     * 开门方式
+     */
+    private String openDoorMode;
+
+    /**
+     * 开门时间
+     */
+    private Date openTime;
+
+    /**
+     * 开门结果
+     */
+    private String openResult;
+
+    /**
+     * 物理卡号
+     */
+    private String factoryId;
+
+    /**
+     * 开门用户
+     */
+    private Long openDoorUser;
+}

+ 25 - 0
ruoyi-api/ruoyi-api-hotel/src/main/java/org/dromara/hotel/api/service/RemoteOpenDoorService.java

@@ -0,0 +1,25 @@
+package org.dromara.hotel.api.service;
+
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.domain.model.ErrorInfo;
+import org.dromara.hotel.api.domain.bo.RemoteDoorOpenBo;
+import org.dromara.hotel.api.domain.bo.RemoteLockPowerBo;
+
+/**
+ * @ClassName RemoteOpenDoorService
+ * @Description 酒店系统开门记录远程服务接口
+ * @Author luoyibo
+ * @Date 2024-11-12 12:40
+ * @Version 1.0
+ * @since jdk17
+ */
+public interface RemoteOpenDoorService {
+
+    /**
+     * 增加开门记录信息
+     * @param remoteBo 开门纪录业务对象
+     * @return 操作结果
+     */
+    R<ErrorInfo> insertOpenDoorByBo(RemoteDoorOpenBo remoteBo);
+}
+

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

@@ -1,10 +1,14 @@
 package org.dromara.backstage.business.lock;
+import java.util.Date;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.TypeReference;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.RandomUtil;
+import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONString;
 import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -13,11 +17,14 @@ 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.backstage.util.SignatureUtil;
 import org.dromara.common.core.constant.DefaultConstants;
 import org.dromara.common.core.constant.LockConstants;
 import org.dromara.common.core.domain.R;
+import org.dromara.hotel.api.domain.bo.RemoteDoorOpenBo;
 import org.dromara.hotel.api.domain.bo.RemoteLockPowerBo;
 import org.dromara.hotel.api.service.RemoteLockPowerService;
+import org.dromara.hotel.api.service.RemoteOpenDoorService;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
@@ -42,6 +49,9 @@ public class LockBusiness {
     @DubboReference
     private final RemoteLockPowerService remoteLockPowerService;
 
+    @DubboReference
+    private final RemoteOpenDoorService remoteOpenDoorService;
+
     /**
      * 获取门锁发卡数据
      *
@@ -136,6 +146,52 @@ public class LockBusiness {
         return true;
     }
 
+    public void queryOpenDoorRecord(String lockId) {
+        Map<String, Object> formMap = new HashMap<>();
+        formMap.put("KEYLOCKID", lockId);
+        formMap.put("CARDPSWBIT", "1");
+        formMap.put("OPERATETYPE", "2");
+        formMap.put("PAGENO","1");
+
+        String result = lockUtils.sendPost(formMap, "operateLockRecord");
+        String flag = JSONUtil.parseObj(result).getStr("result");
+        if (ObjectUtil.equals(flag, "0")) {
+            int totalPage = JSONUtil.parseObj(result).getInt("totalPage");
+            for (int i = 0; i < totalPage; i++) {
+                queryOpenDoorRecord(lockId, i + 1);
+            }
+        }
+   }
+
+    public void queryOpenDoorRecord(String lockId,int pageNo) {
+        Map<String, Object> formMap = new HashMap<>();
+        formMap.put("KEYLOCKID", lockId);
+        formMap.put("CARDPSWBIT", "1");
+        formMap.put("OPERATETYPE", "2");
+        formMap.put("PAGENO",pageNo);
+
+        String result = lockUtils.sendPost(formMap, "operateLockRecord");
+        String flag = JSONUtil.parseObj(result).getStr("result");
+        if (ObjectUtil.equals(flag, "0")) {
+            JSONArray pageData = JSONUtil.parseObj(result).getJSONArray("pageData");
+            pageData.parallelStream().forEach(p->{
+                JSONObject record = JSONUtil.parseObj(p);
+                RemoteDoorOpenBo remoteBo = new RemoteDoorOpenBo();
+                remoteBo.setRoomCode("A604");
+                remoteBo.setRoomName("A604");
+                remoteBo.setOpenDoorMode(record.getStr("openWay"));
+                remoteBo.setOpenTime(DateUtil.parse(record.getStr("operateTime"),DefaultConstants.DATE_TIME_FORMAT));
+                remoteBo.setOpenResult(record.getStr("openResult"));
+                if(ObjectUtil.isNotEmpty(record.get("cardId"))) {
+                    remoteBo.setFactoryId(record.getStr("cardId"));
+                } else {
+                    remoteBo.setFactoryId("");
+                }
+                remoteBo.setOpenDoorUser(0L);
+                remoteOpenDoorService.insertOpenDoorByBo(remoteBo);
+            });
+        }
+    }
     /**
      * 门锁电量入库
      * @param roomVos 门锁列表

+ 26 - 4
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/controller/lock/LockController.java

@@ -36,21 +36,23 @@ public class LockController {
     @GetMapping(value = "/device/battery")
     ReturnResult queryDeviceBattery() {
         Boolean result = lockBusiness.syncLockPower();
-        if(result) {
+        if (result) {
             return ReturnResult.success();
         } else {
             return ReturnResult.failure(ResultCodeEnum.INTERFACE_OUTER_INVOKE_ERROR);
         }
     }
+
     @GetMapping(value = "/device/battery/{areaId}")
-    ReturnResult queryDeviceBattery(@PathVariable Long areaId){
+    ReturnResult queryDeviceBattery(@PathVariable Long areaId) {
         Boolean result = lockBusiness.syncLockPower(areaId);
-        if(result) {
+        if (result) {
             return ReturnResult.success();
         } else {
             return ReturnResult.failure(ResultCodeEnum.INTERFACE_OUTER_INVOKE_ERROR);
         }
     }
+
     /**
      * 请求发卡数据
      *
@@ -58,7 +60,7 @@ public class LockController {
      * @return 发卡数据
      */
     @GetMapping(value = "/card/data")
-    ReturnResult getRoomCardData( RoomCardBo bo) {
+    ReturnResult getRoomCardData(RoomCardBo bo) {
         return ReturnResult.success(lockBusiness.getWriteCardData(bo));
     }
 
@@ -77,4 +79,24 @@ public class LockController {
             return ReturnResult.failure(ResultCodeEnum.INTERFACE_OUTER_INVOKE_ERROR, result.getMsg());
         }
     }
+
+    /**
+     * 获取指定门锁的开门记录(全部记录)
+     * @param lockId 门锁Id
+     */
+    @GetMapping(value = "/open/record/{lockId}")
+    public void queryOpenDoorRecord(@PathVariable String lockId){
+        lockBusiness.queryOpenDoorRecord(lockId);
+    }
+
+    /**
+     * 获取指定门锁的开门记录(指定页码)
+     * @param lockId 门锁Id
+     * @param pageNo 页码
+     */
+    @GetMapping(value = "/open/record/{lockId}/{pageNo}")
+    public void queryOpenDoorRecord(@PathVariable String lockId,@PathVariable int pageNo){
+        lockBusiness.queryOpenDoorRecord(lockId,pageNo);
+    }
+
 }

+ 38 - 0
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/dubbo/RemoteOpenDoorServiceImpl.java

@@ -0,0 +1,38 @@
+package org.dromara.hotel.dubbo;
+
+import cn.hutool.core.bean.BeanUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.domain.model.ErrorInfo;
+import org.dromara.hotel.api.domain.bo.RemoteDoorOpenBo;
+import org.dromara.hotel.api.service.RemoteOpenDoorService;
+import org.dromara.hotel.domain.bo.KfDoorOpenHisBo;
+import org.dromara.hotel.service.IKfDoorOpenHisService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @ClassName RemoteLockPowerServiceImpl
+ * @Description 酒店门锁电量远程服务实现
+ * @Author luoyibo
+ * @Date 2024-11-14 20:31
+ * @Version 1.0
+ * @since jdk17
+ */
+
+@Slf4j
+@Service
+@DubboService
+@RequiredArgsConstructor
+public class RemoteOpenDoorServiceImpl implements RemoteOpenDoorService {
+    private final IKfDoorOpenHisService doorOpenHisService;
+
+    @Override
+    public R<ErrorInfo> insertOpenDoorByBo(RemoteDoorOpenBo remoteBo) {
+        KfDoorOpenHisBo bo = BeanUtil.copyProperties(remoteBo, KfDoorOpenHisBo.class);
+        boolean flag = doorOpenHisService.insertOrUpdateByBo(bo);
+        //boolean flag = doorOpenHisService.insertByBo(bo);
+        return flag ? R.ok() : R.fail();
+    }
+}

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

@@ -66,4 +66,6 @@ public interface IKfDoorOpenHisService {
      * @return 是否删除成功
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    Boolean insertOrUpdateByBo(KfDoorOpenHisBo bo);
 }

+ 14 - 0
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfDoorOpenHisServiceImpl.java

@@ -1,5 +1,7 @@
 package org.dromara.hotel.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -147,4 +149,16 @@ public class KfDoorOpenHisServiceImpl implements IKfDoorOpenHisService {
         }
         return baseMapper.deleteByIds(ids) > 0;
     }
+
+    @Override
+    public Boolean insertOrUpdateByBo(KfDoorOpenHisBo bo) {
+        KfDoorOpenHis add = MapstructUtils.convert(bo, KfDoorOpenHis.class);
+        List<KfDoorOpenHisVo> vos = baseMapper.selectVoList(new LambdaQueryWrapper<KfDoorOpenHis>().eq(KfDoorOpenHis::getFactoryId, bo.getFactoryId())
+            .eq(KfDoorOpenHis::getRoomCode, bo.getRoomCode()).eq(KfDoorOpenHis::getOpenTime, bo.getOpenTime())
+            .eq(KfDoorOpenHis::getOpenDoorMode, bo.getOpenDoorMode()).eq(KfDoorOpenHis::getOpenResult, bo.getOpenResult()));
+        if (CollectionUtil.isEmpty(vos)) {
+            return baseMapper.insert (add)>0;
+        }
+        return true;
+    }
 }