From f4dbcba15fc0f0d3a7b044cda5ff22aee1511edb Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Sat, 26 Jul 2025 22:32:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(sis):=20=E5=AE=9E=E7=8E=B0=E4=BA=BA?= =?UTF-8?q?=E8=84=B8=E8=AF=86=E5=88=AB=E5=90=8E=E8=BF=9C=E7=A8=8B=E5=BC=80?= =?UTF-8?q?=E9=97=A8=E5=8A=9F=E8=83=BD=EF=BC=88=E6=B5=8B=E8=AF=95=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sis/sdk/hik/calback/HikAlarmCallBack.java | 40 +++++++++++++++++++ .../sis/service/ISisAuthRecordService.java | 6 +-- .../impl/SisAuthRecordServiceImpl.java | 18 +++++++-- .../mapper/sis/SisAuthRecordMapper.xml | 18 ++++----- 4 files changed, 64 insertions(+), 18 deletions(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java index 30c775c..64b8864 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java @@ -2,6 +2,7 @@ package org.dromara.sis.sdk.hik.calback; import cn.hutool.core.codec.Base64Encoder; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; import com.sun.jna.Pointer; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -36,6 +37,7 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 { private final HuaWeiBoxApi huaWeiBoxApi; private final ISisAuthRecordService authRecordService; + private final ISisAuthGroupRefService authGroupRefService; private final ISisElevatorInfoService elevatorInfoService; private final ISisDeviceBindRefService deviceBindRefService; private final ISisAccessControlService accessControlService; @@ -321,6 +323,44 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 { } log.info("人脸比对完成,personId={}", person); + // TODO 测试逻辑,只针对门禁 + + // 授权纪录 + SisAuthRecordVo authRecord = authRecordService.checkAuth(person); + if (authRecord == null) { + log.info("当前人脸未授权,暂不处理。"); + return true; + } + + Date now = new Date(); + if(DateUtil.compare(now, authRecord.getEndDate()) > 0){ + log.info("当前人脸已过期,暂不处理。"); + return true; + } + + // 授权设备列表 + List authGroupRefVos = authGroupRefService.queryListByGroupId(authRecord.getGroupId()); + // 获取门禁id + Collection acIds = authGroupRefVos.stream().filter(vo -> vo.getDeviceType() == 1).map(SisAuthGroupRefVo::getDeviceId).toList(); + if (CollUtil.isNotEmpty(acIds)) { + acIds.forEach(id -> { + // controlType 1-门禁 + Long deviceId = bindRefList.stream().filter(vo -> vo.getBindId().equals(id) && vo.getControlType() == 1).findFirst().map(SisDeviceBindRefVo::getBindId).orElse(null); + SisAccessControlVo ac = accessControlService.queryById(deviceId); + if (ac != null) { + log.info("调用门禁服务远程开门,doorName:{}", ac.getAccessName()); + RemoteOpenDoorReq req = new RemoteOpenDoorReq(); + req.setType(0); + RemoteOpenDoorReq.ControlData data = new RemoteOpenDoorReq.ControlData(); + data.setDeviceId(Long.parseLong(ac.getOutCode())); + data.setDoorId(Long.parseLong(ac.getOutCode())); + req.setControlList(List.of(data)); + Boolean flag = e8PlatformApi.remoteOpenDoor(req); + log.info("远程开门结果,result={}", flag); + } + }); + } + // 授权记录 // List authVoList = authRecordService.checkAuth(person); // 获取门禁id diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthRecordService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthRecordService.java index cbf1611..a984885 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthRecordService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthRecordService.java @@ -86,7 +86,7 @@ public interface ISisAuthRecordService { /** * 查询所有可授权设备树 * - * @return List> + * @return List> */ List> authDeviceTree(); @@ -95,12 +95,12 @@ public interface ISisAuthRecordService { * * @param personId 人脸比对ID */ -// List checkAuth(Long personId); + SisAuthRecordVo checkAuth(Long personId); /** * 根据权限组ID,人员id,返回授权记录 * - * @param groupId 权限组ID + * @param groupId 权限组ID * @param personId 人员id * @return SisAuthRecordVo */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java index 84a614c..01f8ce2 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java @@ -123,7 +123,7 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { return flag; } - private void syncPersonImg(RemotePersonAuth bo){ + private void syncPersonImg(RemotePersonAuth bo) { log.info("开始写入安防人像信息"); SisPersonLibImgBo personLibImg = new SisPersonLibImgBo(); personLibImg.setImgOssId(Long.parseLong(bo.getOssId())); @@ -250,17 +250,27 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { return List.of(root); } + /** + * 根据人脸比对ID,返回授权记录 + * + * @param personId 人脸比对ID + */ + @Override + public SisAuthRecordVo checkAuth(Long personId) { + return baseMapper.checkAuth(personId).get(0); + } + /** * 根据权限组ID,人员id,返回授权记录 * - * @param groupId 权限组ID + * @param groupId 权限组ID * @param personId 人员id * @return SisAuthRecordVo */ - public SisAuthRecordVo queryByGroupIdAndPersonId(Long groupId, Long personId){ + public SisAuthRecordVo queryByGroupIdAndPersonId(Long groupId, Long personId) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(SisAuthRecord::getGroupId, groupId) - .eq(SisAuthRecord::getTargetId, personId); + .eq(SisAuthRecord::getTargetId, personId); return baseMapper.selectVoOne(lqw); } } diff --git a/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml index 9114291..d248157 100644 --- a/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml +++ b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml @@ -5,16 +5,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"