refactor(sis): 1

This commit is contained in:
zcxlsm 2025-08-10 19:07:32 +08:00
parent 5d078e8c8c
commit ed35a45142
9 changed files with 37 additions and 34 deletions

View File

@ -60,7 +60,7 @@ public class CleanLiftAuthRocketConsumer implements RocketMQListener<MessageExt>
// } // }
// } // }
// todo 暂时应急处理后续调整业务逻辑 // todo 暂时应急处理后续调整业务逻辑
for (int i = 1; i < 20; i++) { for (int i = 1; i < 5; i++) {
HikApiService.getInstance().controlGateway("192.168.24.150", i, 3); HikApiService.getInstance().controlGateway("192.168.24.150", i, 3);
} }
log.info("梯控清除权限完成"); log.info("梯控清除权限完成");

View File

@ -71,7 +71,7 @@ public class SisPersonLibImg extends TenantEntity {
/** /**
* 远程库图像ID * 远程库图像ID
*/ */
private Long remoteImgId; private Long remoteHWId;
/** /**
* 入驻员工id * 入驻员工id

View File

@ -79,7 +79,7 @@ public class SisPersonLibImgBo extends BaseEntity {
/** /**
* 远程库图像ID * 远程库图像ID
*/ */
private Long remoteImgId; private Long remoteHWId;
/** /**
* 入驻员工id * 入驻员工id

View File

@ -83,7 +83,7 @@ public class SisPersonLibImgVo implements Serializable {
* 远程库图像ID * 远程库图像ID
*/ */
@ExcelProperty(value = "远程库图像ID") @ExcelProperty(value = "远程库图像ID")
private Long remoteImgId; private Long remoteHWId;
/** /**
* 人像库id * 人像库id

View File

@ -93,7 +93,7 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService {
@Override @Override
public Long queryHuaweiBoxIdByImgMd5(String imgMd5) { public Long queryHuaweiBoxIdByImgMd5(String imgMd5) {
SisPersonLibImgVo vo = sisPersonLibImgService.queryByImgMd5(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; Long pId;
try { try {
SisPersonLibImgVo vo = sisPersonLibImgService.queryByPersonId(person.getId()); SisPersonLibImgVo vo = sisPersonLibImgService.queryByPersonId(person.getId());
if (vo == null) {
log.info("本地人像信息不存在::{}----{}", person.getName(), person.getId());
return null;
}
AddHWPersonReq req = new AddHWPersonReq(); AddHWPersonReq req = new AddHWPersonReq();
req.setIndex(CodePrefixConstants.PERSON_LIB_IMAGE_CODE_PREFIX + IdUtil.getSnowflakeNextIdStr()); req.setIndex(CodePrefixConstants.PERSON_LIB_IMAGE_CODE_PREFIX + IdUtil.getSnowflakeNextIdStr());
req.setName(person.getName()); req.setName(person.getName());
@ -121,7 +126,7 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService {
pId = huaWeiBoxApi.addPerson(List.of(req)); pId = huaWeiBoxApi.addPerson(List.of(req));
} catch (Exception e) { } catch (Exception e) {
log.error("同步华为盒子失败:{}----{}", person.getName(), person.getId()); log.info("同步华为盒子失败:{}----{}", person.getName(), person.getId());
return null; return null;
} }
return pId; return pId;

View File

@ -1,5 +1,6 @@
package org.dromara.sis.sdk.hik.calback; package org.dromara.sis.sdk.hik.calback;
import cn.hutool.core.date.TimeInterval;
import com.sun.jna.Pointer; import com.sun.jna.Pointer;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -242,12 +243,13 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 {
} }
// 人脸比对结果上报 // 人脸比对结果上报
case COMM_SNAP_MATCH_ALARM: { case COMM_SNAP_MATCH_ALARM: {
TimeInterval interval = new TimeInterval();
HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM strFaceSnapMatch = new HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM(); HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM strFaceSnapMatch = new HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM();
strFaceSnapMatch.write(); strFaceSnapMatch.write();
Pointer pFaceSnapMatch = strFaceSnapMatch.getPointer(); Pointer pFaceSnapMatch = strFaceSnapMatch.getPointer();
pFaceSnapMatch.write(0, pAlarmInfo.getByteArray(0, strFaceSnapMatch.size()), 0, strFaceSnapMatch.size()); pFaceSnapMatch.write(0, pAlarmInfo.getByteArray(0, strFaceSnapMatch.size()), 0, strFaceSnapMatch.size());
strFaceSnapMatch.read(); strFaceSnapMatch.read();
handleFaceComparison(strFaceSnapMatch, pAlarmer); handleFaceComparison(strFaceSnapMatch, pAlarmer, interval);
break; break;
} }
default: { default: {
@ -281,9 +283,7 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 {
log.info("海康设备告警信息上传,设备={}, 人脸图片大小={} 背景图片大小={}", sAlarmInfo, smallImg.length, bigImg.length); log.info("海康设备告警信息上传,设备={}, 人脸图片大小={} 背景图片大小={}", sAlarmInfo, smallImg.length, bigImg.length);
SisDeviceManage device = sisDeviceManageService.queryByDeviceIp(sAlarmInfo); SisDeviceManage device = sisDeviceManageService.queryByDeviceIp(sAlarmInfo);
if (!device.getIsComparison()) { if (!device.getIsComparison()) {
log.info("设备不支持人脸比对");
zeroSensationPassageService.pass(sAlarmInfo, smallImg, bigImg); 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-比对失败 // 读取比对结果比对结果0-保留1-比对成功2-比对失败
int compareResults = result.byContrastStatus; int compareResults = result.byContrastStatus;
// 比对不成功不处理 // 比对不成功不处理
@ -320,7 +320,8 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 {
int pid = Integer.parseInt(new String(pidByte)); int pid = Integer.parseInt(new String(pidByte));
log.info("比对结果:{},相似度:{},人员:{}id:{}", compareResults, similarity, name, pid); 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);
} }

View File

@ -1,5 +1,7 @@
package org.dromara.sis.service; package org.dromara.sis.service;
import cn.hutool.core.date.TimeInterval;
public interface IZeroSensationPassageService { public interface IZeroSensationPassageService {
/** /**
@ -16,6 +18,6 @@ public interface IZeroSensationPassageService {
* *
* @param deviceIp 设备ip * @param deviceIp 设备ip
*/ */
void handleEleOut(String deviceIp); void handleEleOut(String deviceIp, TimeInterval interval);
} }

View File

@ -1,27 +1,23 @@
package org.dromara.sis.service.impl; package org.dromara.sis.service.impl;
import cn.hutool.core.lang.Assert; 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.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference; 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.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.resource.api.RemoteFileService; import org.dromara.resource.api.RemoteFileService;
import org.dromara.sis.domain.SisLibImgRef;
import org.dromara.sis.domain.SisPersonLibImg; import org.dromara.sis.domain.SisPersonLibImg;
import org.dromara.sis.domain.bo.SisLibImgRefBo; import org.dromara.sis.domain.bo.SisLibImgRefBo;
import org.dromara.sis.domain.bo.SisPersonLibImgBo; import org.dromara.sis.domain.bo.SisPersonLibImgBo;
import org.dromara.sis.domain.vo.*; import org.dromara.sis.domain.vo.*;
import org.dromara.sis.mapper.SisPersonLibImgMapper; import org.dromara.sis.mapper.SisPersonLibImgMapper;
import org.dromara.sis.sdk.huawei.HuaWeiBoxApi; import org.dromara.sis.sdk.huawei.HuaWeiBoxApi;
import org.dromara.sis.sdk.huawei.domain.AddHWPersonReq;
import org.dromara.sis.service.*; import org.dromara.sis.service.*;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -157,7 +153,7 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
List<SisPersonLibImgVo> list = this.queryListByIds(ids); List<SisPersonLibImgVo> list = this.queryListByIds(ids);
Collection<Long> remoteIds = list.stream().map(SisPersonLibImgVo::getRemoteImgId).toList(); Collection<Long> remoteIds = list.stream().map(SisPersonLibImgVo::getRemoteHWId).toList();
if (!remoteIds.isEmpty()) { if (!remoteIds.isEmpty()) {
Boolean flag = huaWeiBoxApi.deletePerson(remoteIds); Boolean flag = huaWeiBoxApi.deletePerson(remoteIds);
@ -194,7 +190,7 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
LambdaQueryWrapper<SisPersonLibImg> lqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SisPersonLibImg> lqw = new LambdaQueryWrapper<>();
lqw.eq(SisPersonLibImg::getResidentPersonId, personId); lqw.eq(SisPersonLibImg::getResidentPersonId, personId);
SisPersonLibImg update = new SisPersonLibImg(); SisPersonLibImg update = new SisPersonLibImg();
update.setRemoteImgId(huaweiBoxId); update.setRemoteHWId(huaweiBoxId);
update.setImgMd5Value(imgMd5); update.setImgMd5Value(imgMd5);
return baseMapper.update(update, lqw) > 0; return baseMapper.update(update, lqw) > 0;
} }

View File

@ -135,31 +135,30 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer
* @param deviceIp 设备ip * @param deviceIp 设备ip
*/ */
@Override @Override
public void handleEleOut(String deviceIp) { public void handleEleOut(String deviceIp, TimeInterval interval) {
// 获取当前设备的绑定设备信息 // 获取当前设备的绑定设备信息
List<SisDeviceBindRefVo> bindRefList = deviceBindRefService.queryByDeviceIp(deviceIp); List<SisDeviceBindRefVo> bindRefList = deviceBindRefService.queryByDeviceIp(deviceIp);
bindRefList.forEach(item -> { List<SisDeviceBindRefVo> outRefList = bindRefList.stream().filter(item -> Objects.equals(item.getControlType(), ControlTypeEnum.ELEVATOR_OUT_CONTROL.getCode())).toList();
// 只处理外部按键
if (Objects.equals(item.getControlType(), ControlTypeEnum.ELEVATOR_OUT_CONTROL.getCode())) {
// 获取当前电梯信息
SisElevatorInfoVo ele = elevatorInfoService.queryById(item.getBindId());
List<SisElevatorFloorChannelRefVo> channelRef = elevatorFloorChannelRefService.queryByFloorIds(List.of(item.getDeviceFloorId())); outRefList.forEach(item -> {
SisElevatorFloorChannelRefVo channelRefVo = channelRef.stream().filter(o -> Objects.equals(o.getElevatorId(), item.getBindId())).findFirst().orElse(null); // 获取当前电梯信息
SisElevatorInfoVo ele = elevatorInfoService.queryById(item.getBindId());
if (channelRefVo != null) { List<SisElevatorFloorChannelRefVo> channelRef = elevatorFloorChannelRefService.queryByFloorIds(List.of(item.getDeviceFloorId()));
if (channelRefVo.getDownChannel() != null) { SisElevatorFloorChannelRefVo channelRefVo = channelRef.stream().filter(o -> Objects.equals(o.getElevatorId(), item.getBindId())).findFirst().orElse(null);
HikApiService.getInstance().controlGateway(ele.getControlIp(), channelRefVo.getDownChannel().intValue(), 2);
}
if (channelRefVo.getUpChannel() != null) { if (channelRefVo != null) {
HikApiService.getInstance().controlGateway(ele.getControlIp(), channelRefVo.getUpChannel().intValue(), 2); 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); cleanLiftAuthRocketProducer.sendMessage(item.getBindId(), 0L, item.getDeviceFloorId(), "清除电梯" + item.getBindId() + "梯控权限", 3);
}); });
log.info("处理电梯外部按键完成,耗时:{}ms", interval.intervalMs());
} }
/** /**