From ed35a45142ed1b1d5d72546341a5af97680155ef Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Sun, 10 Aug 2025 19:07:32 +0800 Subject: [PATCH] refactor(sis): 1 --- .../consumer/CleanLiftAuthRocketConsumer.java | 2 +- .../dromara/sis/domain/SisPersonLibImg.java | 2 +- .../sis/domain/bo/SisPersonLibImgBo.java | 2 +- .../sis/domain/vo/SisPersonLibImgVo.java | 2 +- .../sis/dubbo/RemoteSisAuthServiceImpl.java | 9 ++++-- .../sis/sdk/hik/calback/HikAlarmCallBack.java | 11 ++++--- .../service/IZeroSensationPassageService.java | 4 ++- .../impl/SisPersonLibImgServiceImpl.java | 8 ++--- .../impl/ZeroSensationPassageServiceImpl.java | 31 +++++++++---------- 9 files changed, 37 insertions(+), 34 deletions(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/consumer/CleanLiftAuthRocketConsumer.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/consumer/CleanLiftAuthRocketConsumer.java index d07ae729..91ab7492 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/consumer/CleanLiftAuthRocketConsumer.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/consumer/CleanLiftAuthRocketConsumer.java @@ -60,7 +60,7 @@ public class CleanLiftAuthRocketConsumer implements RocketMQListener // } // } // todo 暂时应急处理,后续调整业务逻辑 - for (int i = 1; i < 20; i++) { + for (int i = 1; i < 5; i++) { HikApiService.getInstance().controlGateway("192.168.24.150", i, 3); } log.info("梯控清除权限完成"); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisPersonLibImg.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisPersonLibImg.java index 5f2c6deb..9174de0d 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisPersonLibImg.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisPersonLibImg.java @@ -71,7 +71,7 @@ public class SisPersonLibImg extends TenantEntity { /** * 远程库图像ID */ - private Long remoteImgId; + private Long remoteHWId; /** * 入驻员工id diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java index 41b08246..b9ba096c 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java @@ -79,7 +79,7 @@ public class SisPersonLibImgBo extends BaseEntity { /** * 远程库图像ID */ - private Long remoteImgId; + private Long remoteHWId; /** * 入驻员工id diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java index 18b17e2a..991c6dd9 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java @@ -83,7 +83,7 @@ public class SisPersonLibImgVo implements Serializable { * 远程库图像ID */ @ExcelProperty(value = "远程库图像ID") - private Long remoteImgId; + private Long remoteHWId; /** * 人像库id diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java index 03fa14e8..fdf22fe0 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java @@ -93,7 +93,7 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { @Override public Long queryHuaweiBoxIdByImgMd5(String imgMd5) { SisPersonLibImgVo vo = sisPersonLibImgService.queryByImgMd5(imgMd5); - return vo != null ? vo.getRemoteImgId() : null; + return vo != null ? vo.getRemoteHWId() : null; } /** @@ -108,6 +108,11 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { Long pId; try { SisPersonLibImgVo vo = sisPersonLibImgService.queryByPersonId(person.getId()); + if (vo == null) { + log.info("本地人像信息不存在::{}----{}", person.getName(), person.getId()); + return null; + } + AddHWPersonReq req = new AddHWPersonReq(); req.setIndex(CodePrefixConstants.PERSON_LIB_IMAGE_CODE_PREFIX + IdUtil.getSnowflakeNextIdStr()); req.setName(person.getName()); @@ -121,7 +126,7 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { pId = huaWeiBoxApi.addPerson(List.of(req)); } catch (Exception e) { - log.error("同步华为盒子失败:{}----{}", person.getName(), person.getId()); + log.info("同步华为盒子失败:{}----{}", person.getName(), person.getId()); return null; } return pId; 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 efb579b3..d5af0418 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 @@ -1,5 +1,6 @@ package org.dromara.sis.sdk.hik.calback; +import cn.hutool.core.date.TimeInterval; import com.sun.jna.Pointer; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -242,12 +243,13 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 { } // 人脸比对结果上报 case COMM_SNAP_MATCH_ALARM: { + TimeInterval interval = new TimeInterval(); HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM strFaceSnapMatch = new HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM(); strFaceSnapMatch.write(); Pointer pFaceSnapMatch = strFaceSnapMatch.getPointer(); pFaceSnapMatch.write(0, pAlarmInfo.getByteArray(0, strFaceSnapMatch.size()), 0, strFaceSnapMatch.size()); strFaceSnapMatch.read(); - handleFaceComparison(strFaceSnapMatch, pAlarmer); + handleFaceComparison(strFaceSnapMatch, pAlarmer, interval); break; } default: { @@ -281,9 +283,7 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 { log.info("海康设备告警信息上传,设备={}, 人脸图片大小={}, 背景图片大小={}", sAlarmInfo, smallImg.length, bigImg.length); SisDeviceManage device = sisDeviceManageService.queryByDeviceIp(sAlarmInfo); - if (!device.getIsComparison()) { - log.info("设备不支持人脸比对"); zeroSensationPassageService.pass(sAlarmInfo, smallImg, bigImg); } } @@ -291,7 +291,7 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 { /** * 处理人脸比对上报 */ - private void handleFaceComparison(HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM result, HCNetSDK.NET_DVR_ALARMER pAlarmer) { + private void handleFaceComparison(HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM result, HCNetSDK.NET_DVR_ALARMER pAlarmer, TimeInterval interval) { // 读取比对结果比对结果,0-保留,1-比对成功,2-比对失败 int compareResults = result.byContrastStatus; // 比对不成功,不处理 @@ -320,7 +320,8 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 { int pid = Integer.parseInt(new String(pidByte)); log.info("比对结果:{},相似度:{},人员:{},id:{}", compareResults, similarity, name, pid); - zeroSensationPassageService.handleEleOut(new String(pAlarmer.sDeviceIP).trim()); + log.info("处理前置人脸比对结果,耗时:{}", interval.interval()); + zeroSensationPassageService.handleEleOut(new String(pAlarmer.sDeviceIP).trim(), interval); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/IZeroSensationPassageService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/IZeroSensationPassageService.java index 6d8788a8..6804948d 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/IZeroSensationPassageService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/IZeroSensationPassageService.java @@ -1,5 +1,7 @@ package org.dromara.sis.service; +import cn.hutool.core.date.TimeInterval; + public interface IZeroSensationPassageService { /** @@ -16,6 +18,6 @@ public interface IZeroSensationPassageService { * * @param deviceIp 设备ip */ - void handleEleOut(String deviceIp); + void handleEleOut(String deviceIp, TimeInterval interval); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java index 4c70b61a..d8178ef2 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java @@ -1,27 +1,23 @@ package org.dromara.sis.service.impl; import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; -import org.dromara.common.core.constant.CodePrefixConstants; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.resource.api.RemoteFileService; -import org.dromara.sis.domain.SisLibImgRef; import org.dromara.sis.domain.SisPersonLibImg; import org.dromara.sis.domain.bo.SisLibImgRefBo; import org.dromara.sis.domain.bo.SisPersonLibImgBo; import org.dromara.sis.domain.vo.*; import org.dromara.sis.mapper.SisPersonLibImgMapper; import org.dromara.sis.sdk.huawei.HuaWeiBoxApi; -import org.dromara.sis.sdk.huawei.domain.AddHWPersonReq; import org.dromara.sis.service.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -157,7 +153,7 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { @Transactional(rollbackFor = Exception.class) public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { List list = this.queryListByIds(ids); - Collection remoteIds = list.stream().map(SisPersonLibImgVo::getRemoteImgId).toList(); + Collection remoteIds = list.stream().map(SisPersonLibImgVo::getRemoteHWId).toList(); if (!remoteIds.isEmpty()) { Boolean flag = huaWeiBoxApi.deletePerson(remoteIds); @@ -194,7 +190,7 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.eq(SisPersonLibImg::getResidentPersonId, personId); SisPersonLibImg update = new SisPersonLibImg(); - update.setRemoteImgId(huaweiBoxId); + update.setRemoteHWId(huaweiBoxId); update.setImgMd5Value(imgMd5); return baseMapper.update(update, lqw) > 0; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java index 49d09ca8..ccad1e28 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java @@ -135,31 +135,30 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer * @param deviceIp 设备ip */ @Override - public void handleEleOut(String deviceIp) { + public void handleEleOut(String deviceIp, TimeInterval interval) { // 获取当前设备的绑定设备信息 List bindRefList = deviceBindRefService.queryByDeviceIp(deviceIp); - bindRefList.forEach(item -> { - // 只处理外部按键 - if (Objects.equals(item.getControlType(), ControlTypeEnum.ELEVATOR_OUT_CONTROL.getCode())) { - // 获取当前电梯信息 - SisElevatorInfoVo ele = elevatorInfoService.queryById(item.getBindId()); + List outRefList = bindRefList.stream().filter(item -> Objects.equals(item.getControlType(), ControlTypeEnum.ELEVATOR_OUT_CONTROL.getCode())).toList(); - List channelRef = elevatorFloorChannelRefService.queryByFloorIds(List.of(item.getDeviceFloorId())); - SisElevatorFloorChannelRefVo channelRefVo = channelRef.stream().filter(o -> Objects.equals(o.getElevatorId(), item.getBindId())).findFirst().orElse(null); + outRefList.forEach(item -> { + // 获取当前电梯信息 + SisElevatorInfoVo ele = elevatorInfoService.queryById(item.getBindId()); - if (channelRefVo != null) { - if (channelRefVo.getDownChannel() != null) { - HikApiService.getInstance().controlGateway(ele.getControlIp(), channelRefVo.getDownChannel().intValue(), 2); - } + List channelRef = elevatorFloorChannelRefService.queryByFloorIds(List.of(item.getDeviceFloorId())); + SisElevatorFloorChannelRefVo channelRefVo = channelRef.stream().filter(o -> Objects.equals(o.getElevatorId(), item.getBindId())).findFirst().orElse(null); - if (channelRefVo.getUpChannel() != null) { - HikApiService.getInstance().controlGateway(ele.getControlIp(), channelRefVo.getUpChannel().intValue(), 2); - } + if (channelRefVo != null) { + if (channelRefVo.getDownChannel() != null) { + HikApiService.getInstance().controlGateway(ele.getControlIp(), channelRefVo.getDownChannel().intValue(), 2); + } + + if (channelRefVo.getUpChannel() != null) { + HikApiService.getInstance().controlGateway(ele.getControlIp(), channelRefVo.getUpChannel().intValue(), 2); } } - cleanLiftAuthRocketProducer.sendMessage(item.getBindId(), 0L, item.getDeviceFloorId(), "清除电梯" + item.getBindId() + "梯控权限", 3); }); + log.info("处理电梯外部按键完成,耗时:{}ms", interval.intervalMs()); } /**