diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/zkmedia/ZKLmediaController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/zkmedia/ZKLmediaController.java index 08bfff3..2f9813e 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/zkmedia/ZKLmediaController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/zkmedia/ZKLmediaController.java @@ -3,6 +3,7 @@ package org.dromara.sis.controller.zkmedia; import cn.hutool.core.util.IdUtil; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.R; +import org.dromara.sis.domain.enums.FactoryNoEnum; import org.dromara.sis.sdk.zkmedia.MediaServerUtils; import org.dromara.sis.sdk.zkmedia.ZLMediaKitService; import org.dromara.sis.sdk.zkmedia.model.AddStreamProxy; @@ -49,9 +50,9 @@ public class ZKLmediaController { proxy.setApp("realtime"); String s = IdUtil.fastSimpleUUID(); proxy.setStream(s); - if ("DS1010".equals(data.getFactoryNo())) { + if (FactoryNoEnum.HIK.getCode().equals(data.getFactoryNo())) { proxy.setUrl(String.format(HIK_REALTIME_RTSP_TEMPLATE, data.getAccount(), data.getPwd(), data.getVideoIp(), data.getVideoPort(), data.getChannelId())); - } else if ("DS1014".equals(data.getFactoryNo())) { + } else if (FactoryNoEnum.DAHUA.getCode().equals(data.getFactoryNo())) { proxy.setUrl(String.format(DAHUA_REALTIME_RTSP_TEMPLATE, data.getAccount(), data.getPwd(), data.getVideoIp(), data.getVideoPort(), data.getChannelId())); } else { throw new RuntimeException("未知的设备类型!"); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/FactoryNoEnum.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/FactoryNoEnum.java index 48fb1d9..fb0734e 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/FactoryNoEnum.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/FactoryNoEnum.java @@ -9,7 +9,8 @@ import lombok.Getter; @Getter public enum FactoryNoEnum { - HIK("DS1013"); + HIK("DS1013"), + DAHUA("DS1014"); private final String code; diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikApiService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikApiService.java index 099b1b0..6b680ce 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikApiService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikApiService.java @@ -116,6 +116,7 @@ public class HikApiService { } boolean logout = LoginService.logout(lHandel); if (logout) { + log.info("设备[{}]注销完成", deviceIp); CACHE.remove(deviceIp); } return logout; diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikSdkConstans.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikSdkConstans.java index 3b86814..a2be010 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikSdkConstans.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikSdkConstans.java @@ -7,4 +7,6 @@ public class HikSdkConstans { */ public static final String DEFAULT_CHANNEL = "101"; + public static final Integer DEFAULT_RTSP_PORT = 554; + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/zkmedia/model/AddStreamProxy.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/zkmedia/model/AddStreamProxy.java index 58351c2..afd1c40 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/zkmedia/model/AddStreamProxy.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/zkmedia/model/AddStreamProxy.java @@ -11,7 +11,6 @@ public class AddStreamProxy { @NotBlank private String videoIp; - @NotNull private Integer videoPort; @NotBlank @@ -31,6 +30,6 @@ public class AddStreamProxy { private String endTime; - private String stream; + private String stream; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceChannelService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceChannelService.java index f1c3b65..f8b164e 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceChannelService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceChannelService.java @@ -87,5 +87,11 @@ public interface ISisDeviceChannelService { Boolean handleHikDeviceChannel(SisDeviceManageBo bo); + /** + * 通过设备ids 删除设备通道信息 + * @param deviceIds 设备ids + * @return 返回删除数量 + */ + Integer deleteByDeviceIds(List deviceIds); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceChannelServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceChannelServiceImpl.java index c704607..079b422 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceChannelServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceChannelServiceImpl.java @@ -208,7 +208,7 @@ public class SisDeviceChannelServiceImpl implements ISisDeviceChannelService { channel.setChannelName(bo.getDeviceName()); channel.setGroupId(bo.getGroupId()); channel.setDeviceIp(bo.getDeviceIp()); - channel.setDevicePort(bo.getDevicePort()); + channel.setDevicePort(HikSdkConstans.DEFAULT_RTSP_PORT); channel.setFactoryNo(bo.getFactoryNo()); channel.setDeviceAccount(bo.getDeviceAccount()); channel.setDevicePwd(bo.getDevicePwd()); @@ -223,4 +223,11 @@ public class SisDeviceChannelServiceImpl implements ISisDeviceChannelService { } return false; } + + @Override + public Integer deleteByDeviceIds(List deviceIds) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.in(SisDeviceChannel::getDeviceId, deviceIds); + return baseMapper.delete(lqw); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java index 8245c84..c386f46 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.sis.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -7,6 +8,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.TreeNode; import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -15,15 +17,14 @@ import org.dromara.sis.domain.bo.SisDeviceManageBo; import org.dromara.sis.domain.enums.FactoryNoEnum; import org.dromara.sis.domain.vo.SisDeviceManageVo; import org.dromara.sis.mapper.SisDeviceManageMapper; +import org.dromara.sis.sdk.hik.HikApiService; import org.dromara.sis.service.ISisDeviceChannelService; import org.dromara.sis.service.ISisDeviceManageService; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; /** @@ -38,7 +39,7 @@ import java.util.Objects; public class SisDeviceManageServiceImpl implements ISisDeviceManageService { private final SisDeviceManageMapper baseMapper; - private final ISisDeviceChannelService hikDeviceChannelService; + private final ISisDeviceChannelService deviceChannelService; /** * 查询设备管理 @@ -60,7 +61,7 @@ public class SisDeviceManageServiceImpl implements ISisDeviceManageService { */ @Override public TableDataInfo queryPageList(SisDeviceManageBo bo, PageQuery pageQuery) { - Page result =baseMapper.selectByPage(pageQuery.build(), bo); + Page result = baseMapper.selectByPage(pageQuery.build(), bo); return TableDataInfo.build(result); } @@ -110,7 +111,7 @@ public class SisDeviceManageServiceImpl implements ISisDeviceManageService { public void handleDeviceChannelInfo(SisDeviceManageBo bo) { if (Objects.equals(bo.getFactoryNo(), FactoryNoEnum.HIK.getCode())) { - hikDeviceChannelService.handleHikDeviceChannel(bo); + deviceChannelService.handleHikDeviceChannel(bo); } } @@ -142,14 +143,49 @@ public class SisDeviceManageServiceImpl implements ISisDeviceManageService { * @param isValid 是否进行有效性校验 * @return 是否删除成功 */ + @Transactional(rollbackFor = Exception.class) @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 + // 查询需要删除的设备 + List sisDeviceManages = baseMapper.selectByIds(ids); + if (CollUtil.isEmpty(sisDeviceManages)) { + return true; } - return baseMapper.deleteByIds(ids) > 0; + int i = baseMapper.deleteByIds(ids); + boolean flag = i > 0; + if (flag) { + SisDeviceManageServiceImpl aopProxy = SpringUtils.getAopProxy(this); + aopProxy.deleteDeviceRef(sisDeviceManages); + } + return flag; } + /** + * 异步删除设备的关联关系 + */ + @Async + public void deleteDeviceRef(List sisDeviceManages) { + List deviceIds = new ArrayList<>(sisDeviceManages.size()); + Map> factoryGroup = new HashMap<>(10); + sisDeviceManages.forEach(sisDeviceManage -> { + deviceIds.add(sisDeviceManage.getId()); + factoryGroup.computeIfAbsent(sisDeviceManage.getFactoryNo(), k -> new ArrayList<>()).add(sisDeviceManage); + + }); + // 删除设备通道 + int num = deviceChannelService.deleteByDeviceIds(deviceIds); + log.info("删除设备通道完成,num={}", num); + // 设备sdk注销 + for (Map.Entry> entry : factoryGroup.entrySet()) { + if (entry.getKey().equals(FactoryNoEnum.HIK.getCode())) { + entry.getValue().forEach(item -> { + HikApiService.getInstance().loginOut(item.getDeviceIp()); + }); + } + } + } + + @Override public SisDeviceManageVo queryVoByDeviceIp(Integer deviceCode) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); diff --git a/ruoyi-modules/Sis/src/main/resources/application.yml b/ruoyi-modules/Sis/src/main/resources/application.yml index c2acc2b..ed056a7 100644 --- a/ruoyi-modules/Sis/src/main/resources/application.yml +++ b/ruoyi-modules/Sis/src/main/resources/application.yml @@ -32,3 +32,5 @@ spring: - optional:nacos:application-common.yml - optional:nacos:datasource.yml - optional:nacos:${spring.application.name}.yml + +