refactor(sis): 开启海康抓拍上报,比对通过后,梯控下发权限功能
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run

This commit is contained in:
zcxlsm 2025-08-03 16:48:22 +08:00
parent c8e199e68e
commit 5028649266

View File

@ -8,18 +8,14 @@ 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.property.api.RemoteFloorService; import org.dromara.property.api.RemoteFloorService;
import org.dromara.sis.domain.vo.SisAccessControlVo; import org.dromara.property.api.domain.vo.RemoteFloorVo;
import org.dromara.sis.domain.vo.SisAuthGroupRefVo; import org.dromara.sis.domain.vo.*;
import org.dromara.sis.domain.vo.SisAuthRecordVo;
import org.dromara.sis.domain.vo.SisDeviceBindRefVo;
import org.dromara.sis.sdk.e8.E8PlatformApi; import org.dromara.sis.sdk.e8.E8PlatformApi;
import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq; import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq;
import org.dromara.sis.sdk.hik.HCNetSDK; import org.dromara.sis.sdk.hik.HCNetSDK;
import org.dromara.sis.sdk.hik.HikApiService;
import org.dromara.sis.sdk.huawei.HuaWeiBoxApi; import org.dromara.sis.sdk.huawei.HuaWeiBoxApi;
import org.dromara.sis.service.ISisAccessControlService; import org.dromara.sis.service.*;
import org.dromara.sis.service.ISisAuthGroupRefService;
import org.dromara.sis.service.ISisAuthRecordService;
import org.dromara.sis.service.ISisDeviceBindRefService;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
@ -30,6 +26,9 @@ import java.text.SimpleDateFormat;
import java.util.Collection; import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import static org.dromara.sis.sdk.hik.HCNetSDK.*; import static org.dromara.sis.sdk.hik.HCNetSDK.*;
@ -40,9 +39,11 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 {
private final HuaWeiBoxApi huaWeiBoxApi; private final HuaWeiBoxApi huaWeiBoxApi;
private final ISisAuthRecordService authRecordService; private final ISisAuthRecordService authRecordService;
private final ISisElevatorInfoService elevatorInfoService;
private final ISisAuthGroupRefService authGroupRefService; private final ISisAuthGroupRefService authGroupRefService;
private final ISisDeviceBindRefService deviceBindRefService; private final ISisDeviceBindRefService deviceBindRefService;
private final ISisAccessControlService accessControlService; private final ISisAccessControlService accessControlService;
private final ISisElevatorFloorRefService elevatorFloorRefService;
private final E8PlatformApi e8PlatformApi; private final E8PlatformApi e8PlatformApi;
@DubboReference @DubboReference
@ -362,71 +363,61 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 {
}); });
} }
// 授权记录
// List<SisAuthRecordVo> authVoList = authRecordService.checkAuth(person);
// 获取门禁id
// Collection<Long> acIds = authVoList.stream().filter(vo -> vo.getDeviceType() == 1).map(SisAuthRecordVo::getDeviceId).toList();
// if (CollUtil.isNotEmpty(acIds)) {
// acIds.forEach(id -> {
// Long deviceId = bindRefList.stream().filter(vo -> vo.getBindId().equals(id)).findFirst().map(SisDeviceBindRefVo::getDeviceId).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);
// }
// });
// }
// 获取电梯ids // 获取电梯ids
// Collection<Long> eleIds = authVoList.stream().filter(vo -> vo.getDeviceType() == 2).map(SisAuthRecordVo::getDeviceId).toList(); Collection<Long> eleIds = authGroupRefVos.stream().filter(vo -> vo.getDeviceType() == 2).map(SisAuthGroupRefVo::getDeviceId).toList();
// if (CollUtil.isNotEmpty(eleIds)) { if (CollUtil.isNotEmpty(eleIds)) {
// eleIds.forEach(id -> {
// Long deviceId = bindRefList.stream().filter(vo -> vo.getBindId().equals(id)).findFirst().map(SisDeviceBindRefVo::getDeviceId).orElse(null); // 创建线程池处理关闭梯控
// SisElevatorInfoVo ele = elevatorInfoService.queryById(deviceId); int optimalPoolSize = Runtime.getRuntime().availableProcessors() + 1;
// if (ele != null) { ExecutorService executor = Executors.newFixedThreadPool(optimalPoolSize);
// log.info("下发电梯权限");
// // 根据单元ID获取楼层信息 eleIds.forEach(id -> {
// List<RemoteFloorVo> floorInfo = remoteFloorService.queryByUnitId(ele.getUnitId()); Long deviceId = bindRefList.stream().filter(vo -> vo.getBindId().equals(id) && vo.getControlType() != 1).findFirst().map(SisDeviceBindRefVo::getBindId).orElse(null);
// // 获取电梯楼层关联信息 if (deviceId != null) {
// List<SisElevatorFloorRefVo> floorRefList = elevatorFloorRefService.queryByAuthGroupId(deviceId); log.info("下发电梯权限");
// // 获取楼层数组 // 获取电梯信息
// List<Long> layerArray = floorInfo.stream().map(RemoteFloorVo::getId).sorted().toList(); SisElevatorInfoVo ele = elevatorInfoService.queryById(deviceId);
// // 根据单元ID获取楼层信息
// layerArray.forEach(layer -> { List<RemoteFloorVo> floorInfo = remoteFloorService.queryByUnitId(deviceId);
// SisElevatorFloorRefVo floorRef = floorRefList.stream() // 获取电梯楼层关联信息
// .filter(vo -> Objects.equals(vo.getFloorId(), layer)) // 直接使用 layer List<SisElevatorFloorRefVo> floorRefList = elevatorFloorRefService.queryByAuthGroupId(authRecord.getGroupId());
// .findFirst() // 获取楼层数组
// .orElse(null); List<Long> layerArray = floorInfo.stream().map(RemoteFloorVo::getId).sorted().toList();
// if (floorRef == null) {
// HikApiService.getInstance().controlGateway(ele.getControlIp(), layer.intValue(), 3); layerArray.forEach(layer -> {
// } else { SisElevatorFloorRefVo floorRef = floorRefList.stream()
// HikApiService.getInstance().controlGateway(ele.getControlIp(), layer.intValue(), 2); .filter(vo -> Objects.equals(vo.getFloorId(), layer)) // 直接使用 layer
// } .findFirst()
// }); .orElse(null);
// } if (floorRef == null) {
// }); HikApiService.getInstance().controlGateway(ele.getControlIp(), layer.intValue(), 3);
// } } else {
log.info("权限下发执行完成,耗时:{}", System.currentTimeMillis() - s); HikApiService.getInstance().controlGateway(ele.getControlIp(), layer.intValue(), 2);
}
});
// todo 做延时队列关闭梯控授权 // todo 做延时队列关闭梯控授权
// 提交任务到线程池
executor.execute(() -> {
try {
// 5秒后清除权限
Thread.sleep(5000L);
for (int i = 0; i < layerArray.size(); i++) {
HikApiService.getInstance().controlGateway(ele.getControlIp(), (i + 1), 3);
}
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
});
}
});
// try { // 关闭线程池
// Thread.sleep(10000L); executor.shutdown();
// List<Integer> ass = Arrays.asList(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3); }
// for (int i = 0; i < ass.size(); i++) { log.info("权限下发执行完成,耗时:{}", System.currentTimeMillis() - s);
// HikApiService.getInstance().controlGateway("192.168.24.188", (i + 1), ass.get(i));
// }
// } catch (InterruptedException e) {
// throw new RuntimeException(e);
// }
return false; return false;
} }
} }