Selaa lähdekoodia

海康需求:增量下发数据至指定设备

xiari 9 kuukautta sitten
vanhempi
commit
76da8a5fc7

+ 7 - 0
ruoyi-server/ruoyi-server-hik/src/main/java/org/dromara/server/hik/controller/TestController.java

@@ -259,6 +259,13 @@ public class TestController {
         return sendDeviceService.deleteAllCardByUserId(userId);
     }
 
+    //增量下发数据至指定设备
+    @PostMapping(("/increase/send/{termNo}"))
+    public R<Void> increaseSend(@PathVariable("termNo") Long termNo) {
+        sendDeviceService.increaseSend(termNo);
+        return R.ok();
+    }
+
     /**
      * 接收并处理发送到服务器的设备推送数据。
      * 该方法处理不同类型的 content,包括 multipart/form-data 和 application/json。

+ 6 - 0
ruoyi-server/ruoyi-server-hik/src/main/java/org/dromara/server/hik/service/ISendDeviceService.java

@@ -239,4 +239,10 @@ public interface ISendDeviceService {
      * @return n 响应信息主体,表示上传操作的结果状态及可能的附加信息
      */
     void currentDownSendUserCardInfo(Long userId,String operationType,Long factoryId);
+
+    /**
+     * 增量上传用户信息到指定设备
+     * @param termNo 指定设备编号
+     */
+    void increaseSend(Long termNo);
 }

+ 2 - 0
ruoyi-server/ruoyi-server-hik/src/main/java/org/dromara/server/hik/service/IXfTermService.java

@@ -32,4 +32,6 @@ public interface IXfTermService {
      */
     XfTermVo updateByMac(String termMac,String newIP);
 
+    XfTermVo getByTermNo(Long termNo);
+
 }

+ 23 - 0
ruoyi-server/ruoyi-server-hik/src/main/java/org/dromara/server/hik/service/impl/SendDeviceServiceImpl.java

@@ -1127,6 +1127,29 @@ public class SendDeviceServiceImpl implements ISendDeviceService {
         }
     }
 
+    /**
+     * 增量上传用户信息到指定设备
+     *
+     * @param termNo 指定设备编号
+     */
+    @Override
+    public void increaseSend(Long termNo) {
+        XfTermVo byTermNo = xfTermService.getByTermNo(termNo);
+        if(byTermNo == null){
+            throw new ServiceException("设备不存在"+termNo);
+        }
+        String ipAddress = byTermNo.getTermIp();
+        String termMac = byTermNo.getTermMac();
+        Long cacheObject = RedisUtils.getCacheObject(CacheNames.XF_TERM_IP + ipAddress);
+        if(cacheObject == null){
+            // 第一次上线,下发最近一天的
+            throw new ServiceException("设备从未上传过心跳,请等上传过心跳后执行:"+termNo);
+        }
+        Date last = new Date(cacheObject);
+        upLoadEmpToDevice(termMac, last, true);
+        RedisUtils.setCacheObject(CacheNames.XF_TERM_IP + ipAddress, System.currentTimeMillis());
+    }
+
     /**
      * 获取在线设备列表
      * @return 列表

+ 5 - 0
ruoyi-server/ruoyi-server-hik/src/main/java/org/dromara/server/hik/service/impl/XfTermServiceImpl.java

@@ -77,6 +77,11 @@ public class XfTermServiceImpl implements IXfTermService {
 
     }
 
+    @Override
+    public XfTermVo getByTermNo(Long termNo) {
+        return baseMapper.selectVoOne(new LambdaQueryWrapper<XfTerm>().eq(XfTerm::getTermNo, termNo));
+    }
+
     @Override
     @Cacheable(cacheNames = XfTermServiceImpl.cache, key = "#termMac", unless = "#result == null", condition = "#termMac != null")
     public XfTermVo getByMac(String termMac){