同步通道任务完善

This commit is contained in:
lxj
2025-07-31 15:38:04 +08:00
parent 8f71f5f261
commit e016e6d44c
10 changed files with 272 additions and 76 deletions

View File

@@ -0,0 +1,106 @@
package org.dromara.sis.dubbo;
import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.sis.api.RemoteDeviceService;
import org.dromara.sis.api.domain.RemoteSdkChannel;
import org.dromara.sis.api.domain.RemoteSisDeviceChannel;
import org.dromara.sis.api.domain.RemoteSisDeviceManage;
import org.dromara.sis.domain.SisDeviceChannel;
import org.dromara.sis.domain.SisDeviceManage;
import org.dromara.sis.domain.covert.CommonBeanCovert;
import org.dromara.sis.sdk.hik.HikSdkConstans;
import org.dromara.sis.service.ISisDeviceChannelService;
import org.dromara.sis.service.ISisDeviceManageService;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 海康设备远程服务调用
*
* @author lxj
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class RemoteDeviceServiceImpl implements RemoteDeviceService {
private final ISisDeviceManageService deviceManageService;
private final ISisDeviceChannelService deviceChannelService;
@Override
public List<RemoteSisDeviceManage> queryHikDevices() {
List<SisDeviceManage> sisDeviceManages = deviceManageService.queryHikDevices();
return CommonBeanCovert.INSTANCE.entity2Remote(sisDeviceManages);
}
@Override
public Boolean updateDeviceState(RemoteSisDeviceManage item) {
return deviceManageService.updateDeviceState(CommonBeanCovert.INSTANCE.Remote2Entity(item));
}
@Override
public List<RemoteSisDeviceChannel> queryDeviceChannels(String deviceIp) {
List<SisDeviceChannel> channels = deviceChannelService.queryByDeviceIp(deviceIp);
return CommonBeanCovert.INSTANCE.channelEntity2Remote(channels);
}
@Override
public Boolean updateDeviceChannelState(String deviceIp, Integer onLineState) {
return deviceChannelService.updateDeviceChannelState(deviceIp, onLineState);
}
@Override
public Integer deleteByChannelIps(List<String> list) {
return deviceChannelService.deleteByChannelIps(list);
}
@Override
public Boolean insertChannel(List<RemoteSdkChannel> insertData) {
List<SisDeviceChannel> list = insertData.stream().map(item -> {
SisDeviceChannel channel = new SisDeviceChannel();
// 通道设备信息
channel.setDeviceIp(item.getChannelIp());
channel.setDevicePort(Integer.valueOf(item.getChannelPort()));
channel.setDeviceAccount(item.getChannelAccount());
// 目前没发获取通道设备厂商,默认跟着录像机走
channel.setFactoryNo(item.getNvrFactoryNo());
channel.setChannelNo(HikSdkConstans.DEFAULT_CHANNEL);
channel.setChannelState(item.getChannelStatus());
if (StrUtil.isNotEmpty(item.getChannelPwd())) {
channel.setDevicePwd(item.getChannelPwd());
}
// nvr 设备信息
channel.setNvrIp(item.getNvrIp());
channel.setNvrPort(HikSdkConstans.DEFAULT_RTSP_PORT);
channel.setNvrAccount(item.getNvrAccount());
channel.setNvrPwd(item.getNvrPwd());
channel.setNvrFactoryNo(item.getNvrFactoryNo());
channel.setNvrChannelNo(item.getChannelId() + HikSdkConstans.DEFAULT_CHANNEL_PREFX);
// 系统设备信息
// 将设备id 更改为nvr的设备id
channel.setDeviceId(item.getDeviceId());
channel.setGroupId(item.getGroupId());
channel.setChannelName(item.getChannelName());
channel.setChannelNo(item.getChannelId() + HikSdkConstans.DEFAULT_CHANNEL_PREFX);
channel.setTenantId(item.getTenantId());
return channel;
}).toList();
return deviceChannelService.batchInsert(list);
}
@Override
public Integer updateChannelInfo(List<RemoteSisDeviceChannel> updateData) {
int num = 0;
for (RemoteSisDeviceChannel item : updateData) {
Boolean b = deviceChannelService.updateDeviceChannelState(item.getDeviceIp(), item.getChannelState());
if (b) {
num++;
}
}
return num;
}
}

View File

@@ -1,51 +0,0 @@
package org.dromara.sis.dubbo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.sis.api.RemoteHikDeviceService;
import org.dromara.sis.api.domain.RemoteSisDeviceChannel;
import org.dromara.sis.api.domain.RemoteSisDeviceManage;
import org.dromara.sis.domain.SisDeviceChannel;
import org.dromara.sis.domain.SisDeviceManage;
import org.dromara.sis.domain.covert.CommonBeanCovert;
import org.dromara.sis.service.ISisDeviceChannelService;
import org.dromara.sis.service.ISisDeviceManageService;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 海康设备远程服务调用
*
* @author lxj
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class RemoteHikDeviceServiceImpl implements RemoteHikDeviceService {
private final ISisDeviceManageService deviceManageService;
private final ISisDeviceChannelService deviceChannelService;
@Override
public List<RemoteSisDeviceManage> queryHikDevices() {
List<SisDeviceManage> sisDeviceManages = deviceManageService.queryHikDevices();
return CommonBeanCovert.INSTANCE.entity2Remote(sisDeviceManages);
}
@Override
public Boolean updateDeviceState(RemoteSisDeviceManage item) {
return deviceManageService.updateDeviceState(CommonBeanCovert.INSTANCE.Remote2Entity(item));
}
@Override
public List<RemoteSisDeviceChannel> queryDeviceChannels(String deviceIp) {
List<SisDeviceChannel> channels = deviceChannelService.queryByDeviceIp(deviceIp);
return CommonBeanCovert.INSTANCE.channelEntity2Remote(channels);
}
@Override
public Boolean updateDeviceChannelState(String deviceIp, Integer onLineState) {
return deviceChannelService.updateDeviceChannelState(deviceIp, onLineState);
}
}

View File

@@ -8,14 +8,18 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.property.api.RemoteFloorService;
import org.dromara.property.api.domain.vo.RemoteFloorVo;
import org.dromara.sis.domain.vo.*;
import org.dromara.sis.domain.vo.SisAccessControlVo;
import org.dromara.sis.domain.vo.SisAuthGroupRefVo;
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.domain.accessControl.req.RemoteOpenDoorReq;
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.service.*;
import org.dromara.sis.service.ISisAccessControlService;
import org.dromara.sis.service.ISisAuthGroupRefService;
import org.dromara.sis.service.ISisAuthRecordService;
import org.dromara.sis.service.ISisDeviceBindRefService;
import org.springframework.stereotype.Component;
import java.io.FileNotFoundException;
@@ -23,7 +27,9 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import static org.dromara.sis.sdk.hik.HCNetSDK.*;
@@ -35,10 +41,8 @@ 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;
private final ISisElevatorFloorRefService elevatorFloorRefService;
private final E8PlatformApi e8PlatformApi;
@DubboReference
@@ -330,7 +334,7 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 {
}
Date now = new Date();
if(DateUtil.compare(now, authRecord.getEndDate()) > 0){
if (DateUtil.compare(now, authRecord.getEndDate()) > 0) {
log.info("当前人脸已过期,暂不处理。");
return true;
}

View File

@@ -24,6 +24,7 @@ public class HikDevWorkStateCallBack implements HCNetSDK.DEV_WORK_STATE_CB {
}
lpWorkState.read();
log.info(JSON.toJSONString(lpWorkState));
log.info("海康sdk心跳信息上报 tda = {}", JSON.toJSONString(lpWorkState));
return true;
}
}

View File

@@ -60,6 +60,14 @@ public interface ISisDeviceChannelService {
*/
Boolean insert(SisDeviceChannel channel);
/**
* 批量写入通道信息
*
* @param list 批量写入通道信息
* @return 返回写入数量
*/
Boolean batchInsert(List<SisDeviceChannel> list);
/**
* 修改设备通道管理
*
@@ -77,6 +85,21 @@ public interface ISisDeviceChannelService {
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 通过设备ids 删除设备通道信息
*
* @param deviceIds 设备ids
* @return 返回删除数量
*/
Integer deleteByDeviceIds(List<Long> deviceIds);
/**
* 通过通道ip删除设备通道
*
* @param list ip列表
*/
Integer deleteByChannelIps(List<String> list);
/**
* 查询设备通道树
*
@@ -87,13 +110,6 @@ public interface ISisDeviceChannelService {
void handleHikDeviceChannel(SisDeviceManageBo bo);
/**
* 通过设备ids 删除设备通道信息
*
* @param deviceIds 设备ids
* @return 返回删除数量
*/
Integer deleteByDeviceIds(List<Long> deviceIds);
SisDeviceChannel queryByChannelIp(String channelIp);
@@ -107,8 +123,11 @@ public interface ISisDeviceChannelService {
/**
* 更新设备状态
*
* @param deviceIp 设备ip
* @return 返回是否操作成功
*/
Boolean updateDeviceChannelState(String deviceIp, Integer onLineState);
}

View File

@@ -123,6 +123,11 @@ public class SisDeviceChannelServiceImpl implements ISisDeviceChannelService {
return baseMapper.insert(channel) > 0;
}
@Override
public Boolean batchInsert(List<SisDeviceChannel> list) {
return baseMapper.insertBatch(list);
}
/**
* 修改设备通道管理
*
@@ -302,6 +307,13 @@ public class SisDeviceChannelServiceImpl implements ISisDeviceChannelService {
return baseMapper.delete(lqw);
}
@Override
public Integer deleteByChannelIps(List<String> list) {
LambdaQueryWrapper<SisDeviceChannel> lqw = new LambdaQueryWrapper<>();
lqw.in(SisDeviceChannel::getDeviceIp, list);
return baseMapper.delete(lqw);
}
@Override
public List<SisDeviceChannel> queryByDeviceIp(String deviceIp) {
LambdaQueryWrapper<SisDeviceChannel> lqw = new LambdaQueryWrapper<>();