临时提交

pull/1642/head
648540858 2024-08-01 17:50:34 +08:00
parent f7c98301ac
commit 3f2c9f6451
3 changed files with 78 additions and 10 deletions

View File

@ -325,4 +325,21 @@ public class CommonGBChannel {
return content.toString();
}
public static CommonGBChannel build(Group group) {
GbCode gbCode = GbCode.decode(group.getDeviceId());
CommonGBChannel channel = new CommonGBChannel();
if (gbCode.getTypeCode().equals("215")) {
// 业务分组
channel.setGbName(group.getName());
channel.setGbDeviceId(group.getDeviceId());
}else {
// 虚拟组织
channel.setGbName(group.getName());
channel.setGbDeviceId(group.getDeviceId());
channel.setGbParentId(group.getParentDeviceId());
channel.setGbBusinessGroupId(group.getBusinessGroup());
}
return channel;
}
}

View File

@ -14,7 +14,7 @@ public interface GroupMapper {
@Insert("INSERT INTO wvp_common_group (device_id, name, parent_device_id, business_group, create_time, update_time) " +
"VALUES (#{deviceId}, #{name}, #{parentDeviceId}, #{businessGroup}, #{createTime}, #{updateTime})")
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
void add(Group group);
int add(Group group);
@Delete("DELETE FROM wvp_common_group WHERE id=#{id}")
int delete(@Param("id") int id);

View File

@ -3,6 +3,9 @@ package com.genersoft.iot.vmp.gb28181.service.impl;
import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.dao.CommonGBChannelMapper;
import com.genersoft.iot.vmp.gb28181.dao.GroupMapper;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.gb28181.service.IGbChannelService;
import com.genersoft.iot.vmp.gb28181.service.IGroupService;
import com.genersoft.iot.vmp.utils.DateUtil;
import lombok.extern.slf4j.Slf4j;
@ -27,6 +30,12 @@ public class GroupServiceImpl implements IGroupService {
@Autowired
private CommonGBChannelMapper commonGBChannelMapper;
@Autowired
private IGbChannelService gbChannelService;
@Autowired
private EventPublisher eventPublisher;
@Override
public void add(Group group) {
Assert.notNull(group, "参数不可为NULL");
@ -35,21 +44,21 @@ public class GroupServiceImpl implements IGroupService {
Assert.isTrue(group.getParentDeviceId().trim().length() == 20, "父级编号错误");
Assert.notNull(group.getName(), "设备编号不可为NULL");
GbCode decode = GbCode.decode(group.getDeviceId());
Assert.notNull(decode, "设备编号不满足国标定义");
GbCode gbCode = GbCode.decode(group.getDeviceId());
Assert.notNull(gbCode, "设备编号不满足国标定义");
// 根据字段判断此处应使用什么规则校验
if (ObjectUtils.isEmpty(group.getParentDeviceId())) {
if (ObjectUtils.isEmpty(group.getBusinessGroup())) {
// 如果是建立业务分组那么编号必须20位且10-13必须为215,
Assert.isTrue("215".equals(decode.getTypeCode()), "创建业务分组时设备编号11-13位应使用215");
Assert.isTrue("215".equals(gbCode.getTypeCode()), "创建业务分组时设备编号11-13位应使用215");
group.setBusinessGroup(group.getDeviceId());
}else {
// 建立第一个虚拟组织
Assert.isTrue("216".equals(decode.getTypeCode()), "创建虚拟组织时设备编号11-13位应使用216");
Assert.isTrue("216".equals(gbCode.getTypeCode()), "创建虚拟组织时设备编号11-13位应使用216");
}
}else {
// 建立第一个虚拟组织
Assert.isTrue("216".equals(decode.getTypeCode()), "创建虚拟组织时设备编号11-13位应使用216");
Assert.isTrue("216".equals(gbCode.getTypeCode()), "创建虚拟组织时设备编号11-13位应使用216");
}
if (!ObjectUtils.isEmpty(group.getBusinessGroup())) {
// 校验业务分组是否存在
@ -57,17 +66,27 @@ public class GroupServiceImpl implements IGroupService {
Assert.notNull(businessGroup, "所属的业务分组分组不存在");
}
if (!ObjectUtils.isEmpty(group.getParentDeviceId())) {
Group groupInDb = groupManager.queryOneByDeviceId(group.getParentDeviceId(), group.getBusinessGroup());
Assert.notNull(groupInDb, "所属的上级分组分组不存在");
Group parentGroup = groupManager.queryOneByDeviceId(group.getParentDeviceId(), group.getBusinessGroup());
Assert.notNull(parentGroup, "所属的上级分组分组不存在");
}
group.setCreateTime(DateUtil.getNow());
group.setUpdateTime(DateUtil.getNow());
groupManager.add(group);
// 添加新的虚拟组织需要发起同志
if (gbCode.getTypeCode().equals("216")) {
CommonGBChannel channel = CommonGBChannel.build(group);
try {
// 发送catalog
eventPublisher.catalogEventPublish(null, channel, CatalogEvent.ADD);
}catch (Exception e) {
log.warn("[添加虚拟组织] 发送失败, {}-{}", channel.getGbName(), channel.getGbDeviceDbId(), e);
}
}
}
@Override
public boolean deleteByDeviceId(String deviceId, String groupId) {
Assert.notNull(deviceId, "设备编号不可为NULL");
Assert.notNull(deviceId, "编号不可为NULL");
Assert.notNull(groupId, "业务分组不可为NULL");
GbCode gbCode = GbCode.decode(deviceId);
@ -102,6 +121,9 @@ public class GroupServiceImpl implements IGroupService {
// TODO 待定 是否需要发送catalog事件还是等分配的时候发送UPDATE事件
groupManager.batchDelete(groupList);
return true;
}
@ -118,11 +140,40 @@ public class GroupServiceImpl implements IGroupService {
@Override
public void update(Group group) {
Assert.isTrue(group.getId()> 0, "更新必须携带分组ID");
Assert.notNull(group.getDeviceId(), "编号不可为NULL");
Assert.notNull(group.getBusinessGroup(), "业务分组不可为NULL");
Group groupInDb = groupManager.queryOne(group.getId());
Assert.notNull(groupInDb, "分组不存在");
// 由于编号变化,会需要处理太多内容以及可能发送大量消息,所以目前更新只只支持重命名
groupInDb.setName(group.getName());
groupInDb.setUpdateTime(DateUtil.getNow());
groupManager.update(groupInDb);
// 名称变化-- 直接通知上级分组本身变化
// 编号变化-- 通知1.分组删除, 2.分组新增, 3.所有的所属通道parentId变化
// 本身是业务分组,如果编号变化,相当于重建,需要做大量通知
//
GbCode decode = GbCode.decode(group.getDeviceId());
if (decode.getTypeCode().equals("215")) {
// 业务分组变化。需要将其下的所有业务分组修改
}else {
// 虚拟组织修改需要把其下的子节点修改父节点ID
}
int update = groupManager.update(group);
if (update == 1) {
// TODO 查看此业务分组是否关联了国标设备,发送更新消息
}
}
@Override
public List<Group> getAllChild(String parent) {
public List<Group> getAllChild(String parentDeviceId) {
return Collections.emptyList();
}