648540858 1 rok temu
rodzic
commit
d97accee4a
27 zmienionych plików z 415 dodań i 497 usunięć
  1. 4 4
      src/main/java/com/genersoft/iot/vmp/gb28181/bean/GbCode.java
  2. 6 16
      src/main/java/com/genersoft/iot/vmp/gb28181/bean/GroupTree.java
  3. 45 5
      src/main/java/com/genersoft/iot/vmp/gb28181/controller/CommonChannelController.java
  4. 1 144
      src/main/java/com/genersoft/iot/vmp/gb28181/controller/PlatformController.java
  5. 12 0
      src/main/java/com/genersoft/iot/vmp/gb28181/controller/bean/ChannelToGroupByGbDeviceParam.java
  6. 14 0
      src/main/java/com/genersoft/iot/vmp/gb28181/controller/bean/ChannelToGroupParam.java
  7. 1 1
      src/main/java/com/genersoft/iot/vmp/gb28181/controller/bean/ChannelToRegionByGbDeviceParam.java
  8. 12 2
      src/main/java/com/genersoft/iot/vmp/gb28181/dao/CommonGBChannelMapper.java
  9. 36 8
      src/main/java/com/genersoft/iot/vmp/gb28181/dao/GroupMapper.java
  10. 1 1
      src/main/java/com/genersoft/iot/vmp/gb28181/dao/PlatformChannelMapper.java
  11. 1 1
      src/main/java/com/genersoft/iot/vmp/gb28181/dao/provider/ChannelProvider.java
  12. 2 2
      src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java
  13. 1 1
      src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEvent.java
  14. 17 18
      src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java
  15. 10 2
      src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelService.java
  16. 2 0
      src/main/java/com/genersoft/iot/vmp/gb28181/service/IPlatformService.java
  17. 3 3
      src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceChannelServiceImpl.java
  18. 95 22
      src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java
  19. 84 35
      src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GroupServiceImpl.java
  20. 2 2
      src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformChannelServiceImpl.java
  21. 5 0
      src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformServiceImpl.java
  22. 10 9
      src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
  23. 0 22
      src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java
  24. 5 178
      src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java
  25. 26 11
      web_src/src/components/common/GroupTree.vue
  26. 3 1
      web_src/src/components/dialog/GbDeviceSelect.vue
  27. 17 9
      web_src/src/components/dialog/groupEdit.vue

+ 4 - 4
src/main/java/com/genersoft/iot/vmp/gb28181/bean/GbCode.java

@@ -35,10 +35,10 @@ public class GbCode {
         code = code.trim();
         GbCode gbCode = new GbCode();
         gbCode.setCenterCode(code.substring(0, 8));
-        gbCode.setIndustryCode(code.substring(9, 10));
-        gbCode.setTypeCode(code.substring(11, 13));
-        gbCode.setNetCode(code.substring(14, 15));
-        gbCode.setSn(code.substring(15, 20));
+        gbCode.setIndustryCode(code.substring(8, 10));
+        gbCode.setTypeCode(code.substring(10, 13));
+        gbCode.setNetCode(code.substring(13, 14));
+        gbCode.setSn(code.substring(14));
         return gbCode;
     }
 

+ 6 - 16
src/main/java/com/genersoft/iot/vmp/gb28181/bean/GroupTree.java

@@ -34,28 +34,18 @@ public class GroupTree {
     @Schema(description = "父区域国标ID")
     private String parentDeviceId;
 
+    /**
+     * 业务分组ID
+     */
+    @Schema(description = "父区域国标ID")
+    private String businessGroup;
+
     @Schema(description = "是否有子节点")
     private boolean isLeaf;
 
     @Schema(description = "类型, 行政区划:0 摄像头: 1")
     private int type;
 
-
-
-    public static GroupTree getInstance(Region region) {
-        GroupTree regionTree = new GroupTree();
-        regionTree.setId(region.getDeviceId());
-        regionTree.setLabel(region.getName());
-        regionTree.setParentDeviceId(region.getParentDeviceId());
-        regionTree.setType(0);
-        if (region.getDeviceId().length() < 8) {
-            regionTree.setLeaf(false);
-        }else {
-            regionTree.setLeaf(true);
-        }
-        return regionTree;
-    }
-
     public static GroupTree getInstance(CommonGBChannel channel) {
         GroupTree regionTree = new GroupTree();
         regionTree.setId(channel.getGbDeviceId());

+ 45 - 5
src/main/java/com/genersoft/iot/vmp/gb28181/controller/CommonChannelController.java

@@ -5,7 +5,9 @@ import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel;
 import com.genersoft.iot.vmp.gb28181.bean.DeviceType;
 import com.genersoft.iot.vmp.gb28181.bean.IndustryCodeType;
 import com.genersoft.iot.vmp.gb28181.bean.NetworkIdentificationType;
-import com.genersoft.iot.vmp.gb28181.controller.bean.ChannelToRegionBYGbDeviceParam;
+import com.genersoft.iot.vmp.gb28181.controller.bean.ChannelToGroupByGbDeviceParam;
+import com.genersoft.iot.vmp.gb28181.controller.bean.ChannelToGroupParam;
+import com.genersoft.iot.vmp.gb28181.controller.bean.ChannelToRegionByGbDeviceParam;
 import com.genersoft.iot.vmp.gb28181.controller.bean.ChannelToRegionParam;
 import com.genersoft.iot.vmp.gb28181.service.IGbChannelService;
 import com.genersoft.iot.vmp.media.service.IMediaServerService;
@@ -119,16 +121,54 @@ public class CommonChannelController {
 
     @Operation(summary = "通道设置行政区划-根据国标设备", security = @SecurityRequirement(name = JwtUtils.HEADER))
     @PostMapping("/region/device/add")
-    public void addChannelToRegionBYGbDevice(@RequestBody ChannelToRegionBYGbDeviceParam param){
+    public void addChannelToRegionByGbDevice(@RequestBody ChannelToRegionByGbDeviceParam param){
         Assert.notEmpty(param.getDeviceIds(),"参数异常");
         Assert.hasLength(param.getCivilCode(),"未添加行政区划");
-        channelService.addChannelToRegionBYGbDevice(param.getCivilCode(), param.getDeviceIds());
+        channelService.addChannelToRegionByGbDevice(param.getCivilCode(), param.getDeviceIds());
     }
 
     @Operation(summary = "通道删除行政区划-根据国标设备", security = @SecurityRequirement(name = JwtUtils.HEADER))
     @PostMapping("/region/device/delete")
-    public void deleteChannelToRegionBYGbDevice(@RequestBody ChannelToRegionBYGbDeviceParam param){
+    public void deleteChannelToRegionByGbDevice(@RequestBody ChannelToRegionByGbDeviceParam param){
         Assert.notEmpty(param.getDeviceIds(),"参数异常");
-        channelService.deleteChannelToRegionBYGbDevice(param.getDeviceIds());
+        channelService.deleteChannelToRegionByGbDevice(param.getDeviceIds());
+    }
+
+
+
+
+
+    @Operation(summary = "通道设置业务分组", security = @SecurityRequirement(name = JwtUtils.HEADER))
+    @PostMapping("/group/add")
+    public void addChannelToGroup(@RequestBody ChannelToGroupParam param){
+        Assert.notEmpty(param.getChannelIds(),"通道ID不可为空");
+        Assert.hasLength(param.getParentId(),"未添加上级分组编号");
+        Assert.hasLength(param.getBusinessGroup(),"未添加业务分组");
+        channelService.addChannelToGroup(param.getParentId(), param.getBusinessGroup(), param.getChannelIds());
+    }
+
+    @Operation(summary = "通道删除业务分组", security = @SecurityRequirement(name = JwtUtils.HEADER))
+    @PostMapping("/group/delete")
+    public void deleteChannelToGroup(@RequestBody ChannelToGroupParam param){
+        Assert.isTrue(!param.getChannelIds().isEmpty()
+                || (!ObjectUtils.isEmpty(param.getParentId()) && !ObjectUtils.isEmpty(param.getBusinessGroup())),
+                "参数异常");
+        channelService.deleteChannelToGroup(param.getParentId(), param.getBusinessGroup(), param.getChannelIds());
+    }
+
+    @Operation(summary = "通道设置业务分组-根据国标设备", security = @SecurityRequirement(name = JwtUtils.HEADER))
+    @PostMapping("/group/device/add")
+    public void addChannelToGroupByGbDevice(@RequestBody ChannelToGroupByGbDeviceParam param){
+        Assert.notEmpty(param.getDeviceIds(),"参数异常");
+        Assert.hasLength(param.getParentId(),"未添加上级分组编号");
+        Assert.hasLength(param.getBusinessGroup(),"未添加业务分组");
+        channelService.addChannelToGroupByGbDevice(param.getParentId(), param.getBusinessGroup(), param.getDeviceIds());
+    }
+
+    @Operation(summary = "通道删除业务分组-根据国标设备", security = @SecurityRequirement(name = JwtUtils.HEADER))
+    @PostMapping("/group/device/delete")
+    public void deleteChannelToGroupByGbDevice(@RequestBody ChannelToGroupByGbDeviceParam param){
+        Assert.notEmpty(param.getDeviceIds(),"参数异常");
+        channelService.deleteChannelToGroupByGbDevice(param.getDeviceIds());
     }
 }

+ 1 - 144
src/main/java/com/genersoft/iot/vmp/gb28181/controller/PlatformController.java

@@ -255,7 +255,7 @@ public class PlatformController {
         }
 
         boolean deleteResult = storager.deleteParentPlatform(parentPlatform);
-        storager.delCatalogByPlatformId(parentPlatform.getServerGBId());
+//        storager.delCatalogByPlatformId(parentPlatform.getServerGBId());
         storager.delRelationByPlatformId(parentPlatform.getServerGBId());
         // 停止发送位置订阅定时任务
         String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetting.getServerId() +  "_MobilePosition_" + parentPlatform.getServerGBId();
@@ -382,124 +382,6 @@ public class PlatformController {
         }
     }
 
-    /**
-     * 获取目录
-     *
-     * @param platformId 平台ID
-     * @param parentId   目录父ID
-     * @return
-     */
-    @Operation(summary = "获取目录", security = @SecurityRequirement(name = JwtUtils.HEADER))
-    @Parameter(name = "platformId", description = "上级平台的国标编号", required = true)
-    @Parameter(name = "parentId", description = "父级目录的国标编号", required = true)
-    @GetMapping("/catalog")
-    @ResponseBody
-    public List<PlatformCatalog> getCatalogByPlatform(String platformId, String parentId) {
-
-        if (log.isDebugEnabled()) {
-            log.debug("查询目录,platformId: {}, parentId: {}", platformId, parentId);
-        }
-        ParentPlatform platform = storager.queryParentPlatByServerGBId(platformId);
-        if (platform == null) {
-            throw new ControllerException(ErrorCode.ERROR100.getCode(), "平台未找到");
-        }
-//        if (platformId.equals(parentId)) {
-//            parentId = platform.getDeviceGBId();
-//        }
-
-        if (platformId.equals(platform.getDeviceGBId())) {
-            parentId = null;
-        }
-
-        return storager.getChildrenCatalogByPlatform(platformId, parentId);
-    }
-
-    /**
-     * 添加目录
-     *
-     * @param platformCatalog 目录
-     * @return
-     */
-    @Operation(summary = "添加目录", security = @SecurityRequirement(name = JwtUtils.HEADER))
-    @PostMapping("/catalog/add")
-    @ResponseBody
-    public void addCatalog(@RequestBody PlatformCatalog platformCatalog) {
-
-        if (log.isDebugEnabled()) {
-            log.debug("添加目录,{}", JSON.toJSONString(platformCatalog));
-        }
-        PlatformCatalog platformCatalogInStore = storager.getCatalog(platformCatalog.getPlatformId(), platformCatalog.getId());
-
-        if (platformCatalogInStore != null) {
-            throw new ControllerException(ErrorCode.ERROR100.getCode(), platformCatalog.getId() + " already exists");
-        }
-        int addResult = storager.addCatalog(platformCatalog);
-        if (addResult <= 0) {
-            throw new ControllerException(ErrorCode.ERROR100);
-        }
-    }
-
-    /**
-     * 编辑目录
-     *
-     * @param platformCatalog 目录
-     * @return
-     */
-    @Operation(summary = "编辑目录", security = @SecurityRequirement(name = JwtUtils.HEADER))
-    @PostMapping("/catalog/edit")
-    @ResponseBody
-    public void editCatalog(@RequestBody PlatformCatalog platformCatalog) {
-
-        if (log.isDebugEnabled()) {
-            log.debug("编辑目录,{}", JSON.toJSONString(platformCatalog));
-        }
-        PlatformCatalog platformCatalogInStore = storager.getCatalog(platformCatalog.getPlatformId(), platformCatalog.getId());
-
-        if (platformCatalogInStore == null) {
-            throw new ControllerException(ErrorCode.ERROR100.getCode(), platformCatalog.getId() + " not exists");
-        }
-        int addResult = storager.updateCatalog(platformCatalog);
-        if (addResult <= 0) {
-            throw new ControllerException(ErrorCode.ERROR100.getCode(), "写入数据库失败");
-        }
-    }
-
-    /**
-     * 删除目录
-     *
-     * @param id 目录Id
-     * @param platformId 平台Id
-     * @return
-     */
-    @Operation(summary = "删除目录", security = @SecurityRequirement(name = JwtUtils.HEADER))
-    @Parameter(name = "id", description = "目录Id", required = true)
-    @Parameter(name = "platformId", description = "平台Id", required = true)
-    @DeleteMapping("/catalog/del")
-    @ResponseBody
-    public void delCatalog(String id, String platformId) {
-
-        if (log.isDebugEnabled()) {
-            log.debug("删除目录,{}", id);
-        }
-
-        if (ObjectUtils.isEmpty(id) || ObjectUtils.isEmpty(platformId)) {
-            throw new ControllerException(ErrorCode.ERROR400);
-        }
-
-        int delResult = storager.delCatalog(platformId, id);
-        // 如果删除的是默认目录则根目录设置为默认目录
-        PlatformCatalog parentPlatform = storager.queryDefaultCatalogInPlatform(platformId);
-
-        // 默认节点被移除
-        if (parentPlatform == null) {
-            storager.setDefaultCatalog(platformId, platformId);
-        }
-
-        if (delResult <= 0) {
-            throw new ControllerException(ErrorCode.ERROR100.getCode(), "写入数据库失败");
-        }
-    }
-
     /**
      * 删除关联
      *
@@ -522,29 +404,4 @@ public class PlatformController {
     }
 
 
-    /**
-     * 修改默认目录
-     *
-     * @param platformId 平台Id
-     * @param catalogId  目录Id
-     * @return
-     */
-    @Operation(summary = "修改默认目录", security = @SecurityRequirement(name = JwtUtils.HEADER))
-    @Parameter(name = "catalogId", description = "目录Id", required = true)
-    @Parameter(name = "platformId", description = "平台Id", required = true)
-    @PostMapping("/catalog/default/update")
-    @ResponseBody
-    public void setDefaultCatalog(String platformId, String catalogId) {
-
-        if (log.isDebugEnabled()) {
-            log.debug("修改默认目录,{},{}", platformId, catalogId);
-        }
-        int updateResult = storager.setDefaultCatalog(platformId, catalogId);
-
-        if (updateResult <= 0) {
-            throw new ControllerException(ErrorCode.ERROR100.getCode(), "写入数据库失败");
-        }
-    }
-
-
 }

+ 12 - 0
src/main/java/com/genersoft/iot/vmp/gb28181/controller/bean/ChannelToGroupByGbDeviceParam.java

@@ -0,0 +1,12 @@
+package com.genersoft.iot.vmp.gb28181.controller.bean;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ChannelToGroupByGbDeviceParam {
+    private List<Integer> deviceIds;
+    private String parentId;
+    private String businessGroup;
+}

+ 14 - 0
src/main/java/com/genersoft/iot/vmp/gb28181/controller/bean/ChannelToGroupParam.java

@@ -0,0 +1,14 @@
+package com.genersoft.iot.vmp.gb28181.controller.bean;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ChannelToGroupParam {
+
+    private String parentId;
+    private String businessGroup;
+    private List<Integer> channelIds;
+
+}

+ 1 - 1
src/main/java/com/genersoft/iot/vmp/gb28181/controller/bean/ChannelToRegionBYGbDeviceParam.java → src/main/java/com/genersoft/iot/vmp/gb28181/controller/bean/ChannelToRegionByGbDeviceParam.java

@@ -5,7 +5,7 @@ import lombok.Data;
 import java.util.List;
 
 @Data
-public class ChannelToRegionBYGbDeviceParam {
+public class ChannelToRegionByGbDeviceParam {
     private List<Integer> deviceIds;
     private String civilCode;
 }

+ 12 - 2
src/main/java/com/genersoft/iot/vmp/gb28181/dao/CommonGBChannelMapper.java

@@ -380,7 +380,7 @@ public interface CommonGBChannelMapper {
             " WHERE id in "+
             " <foreach collection='channelList'  item='item'  open='(' separator=',' close=')' > #{item.gbId}</foreach>" +
             " </script>"})
-    void updateBusinessGroupByChannelList(@Param("businessGroup") String businessGroup, List<CommonGBChannel> channelList);
+    int updateBusinessGroupByChannelList(@Param("businessGroup") String businessGroup, List<CommonGBChannel> channelList);
 
     @Update(value = {" <script>" +
             " UPDATE wvp_device_channel " +
@@ -388,5 +388,15 @@ public interface CommonGBChannelMapper {
             " WHERE id in "+
             " <foreach collection='channelList'  item='item'  open='(' separator=',' close=')' > #{item.gbId}</foreach>" +
             " </script>"})
-    void updateParentIdByChannelList(@Param("parentId") String parentId, List<CommonGBChannel> channelList);
+    int updateParentIdByChannelList(@Param("parentId") String parentId, List<CommonGBChannel> channelList);
+
+    @Update(value = {" <script>" +
+            " UPDATE wvp_device_channel " +
+            " SET gb_parent_id = #{parentId}, gb_business_group_id = #{businessGroup}" +
+            " WHERE id in "+
+            " <foreach collection='channelList'  item='item'  open='(' separator=',' close=')' > #{item.gbId}</foreach>" +
+            " </script>"})
+    int updateGroup(@Param("parentId") String parentId, @Param("businessGroup") String businessGroup,
+                    List<CommonGBChannel> channelList);
+
 }

+ 36 - 8
src/main/java/com/genersoft/iot/vmp/gb28181/dao/GroupMapper.java

@@ -1,6 +1,5 @@
 package com.genersoft.iot.vmp.gb28181.dao;
 
-import com.genersoft.iot.vmp.gb28181.bean.Group;
 import com.genersoft.iot.vmp.gb28181.bean.Group;
 import com.genersoft.iot.vmp.gb28181.bean.GroupTree;
 import org.apache.ibatis.annotations.*;
@@ -16,6 +15,11 @@ public interface GroupMapper {
     @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
     int add(Group group);
 
+    @Insert("INSERT INTO wvp_common_group (device_id, name, business_group, platform_id, create_time, update_time) " +
+            "VALUES (#{deviceId}, #{name}, #{businessGroup}, #{platformId}, #{createTime}, #{updateTime})")
+    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
+    int addBusinessGroup(Group group);
+
     @Delete("DELETE FROM wvp_common_group WHERE id=#{id}")
     int delete(@Param("id") int id);
 
@@ -61,11 +65,12 @@ public interface GroupMapper {
             " device_id," +
             " name, " +
             " parent_device_id," +
+            " business_group," +
             " create_time," +
             " update_time) " +
             " VALUES " +
             " <foreach collection='groupList' index='index' item='item' separator=','> " +
-            " (#{item.deviceId}, #{item.name}, #{item.parentDeviceId},#{item.createTime},#{item.updateTime})" +
+            " (#{item.deviceId}, #{item.name}, #{item.parentDeviceId}, #{item.businessGroup},#{item.createTime},#{item.updateTime})" +
             " </foreach> " +
             " </script>")
     int batchAdd(List<Group> groupList);
@@ -75,20 +80,40 @@ public interface GroupMapper {
             " device_id as id," +
             " name as label, " +
             " parent_device_id," +
+            " business_group," +
             " id as db_id," +
             " 0 as type," +
             " false as is_leaf" +
             " from wvp_common_group " +
-            " where " +
-            " <if test='parentId != null'> parent_device_id = #{parentId} </if> " +
-            " <if test='parentId == null'> parent_device_id is null </if> " +
-            " <if test='platformId != null'> platform_id = #{platformId} </if> " +
-            " <if test='platformId == null'> platform_id is null </if> " +
+            " where 1=1 " +
+            " <if test='parentId != null'> and parent_device_id = #{parentId} </if> " +
+            " <if test='parentId == null'> and parent_device_id is null </if> " +
+            " <if test='platformId != null'> and platform_id = #{platformId} </if> " +
+            " <if test='platformId == null'> and platform_id is null </if> " +
             " <if test='query != null'> AND (device_id LIKE concat('%',#{query},'%') OR name LIKE concat('%',#{query},'%'))</if> " +
             " </script>")
     List<GroupTree> queryForTree(@Param("query") String query, @Param("parentId") String parentId,
                                  @Param("platformId") Integer platformId);
 
+    @Select(" <script>" +
+            " SELECT " +
+            " device_id as id," +
+            " name as label, " +
+            " parent_device_id," +
+            " business_group," +
+            " id as db_id," +
+            " 0 as type," +
+            " false as is_leaf" +
+            " from wvp_common_group " +
+            " where parent_device_id is null and business_group = #{businessGroup} and device_id != #{businessGroup}" +
+            " <if test='platformId != null'> and platform_id = #{platformId} </if> " +
+            " <if test='platformId == null'> and platform_id is null </if> " +
+            " <if test='query != null'> AND (device_id LIKE concat('%',#{query},'%') OR name LIKE concat('%',#{query},'%'))</if> " +
+            " </script>")
+    List<GroupTree> queryForTreeByBusinessGroup(@Param("query") String query,
+                                                @Param("businessGroup") String businessGroup,
+                                 @Param("platformId") Integer platformId);
+
     @Select(" <script>" +
             " SELECT " +
             " device_id as id," +
@@ -123,5 +148,8 @@ public interface GroupMapper {
     @Delete("DELETE FROM wvp_common_group WHERE business_group = #{businessGroup}")
     int deleteByBusinessGroup(@Param("businessGroup") String businessGroup);
 
-
+    @Update(" UPDATE wvp_common_group " +
+            " SET parent_device_id=#{group.deviceId}, business_group = #{group.businessGroup}" +
+            " WHERE parent_device_id = #{oldDeviceId}")
+    int updateChild(@Param("oldDeviceId") String oldDeviceId, Group group);
 }

+ 1 - 1
src/main/java/com/genersoft/iot/vmp/gb28181/dao/PlatformChannelMapper.java

@@ -118,5 +118,5 @@ public interface PlatformChannelMapper {
     List<Device> queryDeviceInfoByPlatformIdAndChannelId(@Param("platformId") String platformId, @Param("channelId") String channelId);
 
     @Select("SELECT pgc.platform_id from wvp_platform_gb_channel pgc left join wvp_device_channel dc on dc.id = pgc.device_channel_id WHERE dc.device_id=#{channelId}")
-    List<String> queryParentPlatformByChannelId(@Param("channelId") String channelId);
+    List<Integer> queryParentPlatformByChannelId(@Param("channelId") String channelId);
 }

+ 1 - 1
src/main/java/com/genersoft/iot/vmp/gb28181/dao/provider/ChannelProvider.java

@@ -208,7 +208,7 @@ public class ChannelProvider {
         StringBuilder sqlBuild = new StringBuilder();
         sqlBuild.append(getBaseSelectSql());
 
-        sqlBuild.append(" gb_business_group_id in ( ");
+        sqlBuild.append(" where gb_business_group_id in ( ");
         Collection<Group> ids = (Collection<Group>)params.get("groupList");
         boolean first = true;
         for (Group group : ids) {

+ 2 - 2
src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java

@@ -52,7 +52,7 @@ public class EventPublisher {
 	}
 
 
-	public void catalogEventPublish(String platformId, CommonGBChannel deviceChannel, String type) {
+	public void catalogEventPublish(Integer platformId, CommonGBChannel deviceChannel, String type) {
 		List<CommonGBChannel> deviceChannelList = new ArrayList<>();
 		deviceChannelList.add(deviceChannel);
 		catalogEventPublish(platformId, deviceChannelList, type);
@@ -72,7 +72,7 @@ public class EventPublisher {
 	 * @param deviceChannels
 	 * @param type
 	 */
-	public void catalogEventPublish(String platformId, List<CommonGBChannel> deviceChannels, String type) {
+	public void catalogEventPublish(Integer platformId, List<CommonGBChannel> deviceChannels, String type) {
 		CatalogEvent outEvent = new CatalogEvent(this);
 		List<CommonGBChannel> channels = new ArrayList<>();
 		if (deviceChannels.size() > 1) {

+ 1 - 1
src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEvent.java

@@ -58,6 +58,6 @@ public class CatalogEvent  extends ApplicationEvent {
 
     @Setter
     @Getter
-    private String platformId;
+    private Integer platformId;
 
 }

+ 17 - 18
src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java

@@ -1,17 +1,16 @@
 package com.genersoft.iot.vmp.gb28181.event.subscribe.catalog;
 
-import com.genersoft.iot.vmp.conf.UserSetting;
 import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel;
 import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
 import com.genersoft.iot.vmp.gb28181.bean.SubscribeHolder;
 import com.genersoft.iot.vmp.gb28181.bean.SubscribeInfo;
+import com.genersoft.iot.vmp.gb28181.service.IPlatformService;
 import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationListener;
 import org.springframework.stereotype.Component;
-import org.springframework.util.ObjectUtils;
 
 import javax.sip.InvalidArgumentException;
 import javax.sip.SipException;
@@ -32,13 +31,13 @@ public class CatalogEventLister implements ApplicationListener<CatalogEvent> {
     private IVideoManagerStorage storager;
 
     @Autowired
-    private ISIPCommanderForPlatform sipCommanderFroPlatform;
+    private IPlatformService platformService;
 
     @Autowired
-    private SubscribeHolder subscribeHolder;
+    private ISIPCommanderForPlatform sipCommanderFroPlatform;
 
     @Autowired
-    private UserSetting userSetting;
+    private SubscribeHolder subscribeHolder;
 
     @Override
     public void onApplicationEvent(CatalogEvent event) {
@@ -47,13 +46,13 @@ public class CatalogEventLister implements ApplicationListener<CatalogEvent> {
 
         Map<String, List<ParentPlatform>> parentPlatformMap = new HashMap<>();
         Map<String, CommonGBChannel> channelMap = new HashMap<>();
-        if (!ObjectUtils.isEmpty(event.getPlatformId())) {
-            subscribe = subscribeHolder.getCatalogSubscribe(event.getPlatformId());
-            if (subscribe == null) {
+        if (event.getPlatformId() != null) {
+            parentPlatform = platformService.queryOne(event.getPlatformId());
+            if (parentPlatform == null) {
                 return;
             }
-            parentPlatform = storager.queryParentPlatByServerGBId(event.getPlatformId());
-            if (parentPlatform != null && !parentPlatform.isStatus()) {
+            subscribe = subscribeHolder.getCatalogSubscribe(parentPlatform.getServerGBId());
+            if (subscribe == null) {
                 return;
             }
 
@@ -61,7 +60,7 @@ public class CatalogEventLister implements ApplicationListener<CatalogEvent> {
             // 获取所用订阅
             List<String> platforms = subscribeHolder.getAllCatalogSubscribePlatform();
             if (event.getChannels() != null) {
-                if (platforms.size() > 0) {
+                if (!platforms.isEmpty()) {
                     for (CommonGBChannel deviceChannel : event.getChannels()) {
                         List<ParentPlatform> parentPlatformsForGB = storager.queryPlatFormListForGBWithGBId(deviceChannel.getGbDeviceId(), platforms);
                         parentPlatformMap.put(deviceChannel.getGbDeviceId(), parentPlatformsForGB);
@@ -75,13 +74,13 @@ public class CatalogEventLister implements ApplicationListener<CatalogEvent> {
             case CatalogEvent.OFF:
             case CatalogEvent.DEL:
 
-                if (parentPlatform != null || subscribe != null) {
+                if (parentPlatform != null) {
                     List<CommonGBChannel> deviceChannelList = new ArrayList<>();
                     if (event.getChannels() != null) {
                         deviceChannelList.addAll(event.getChannels());
                     }
-                    if (deviceChannelList.size() > 0) {
-                        log.info("[Catalog事件: {}]平台:{},影响通道{}个", event.getType(), event.getPlatformId(), deviceChannelList.size());
+                    if (!deviceChannelList.isEmpty()) {
+                        log.info("[Catalog事件: {}]平台:{},影响通道{}个", event.getType(), parentPlatform.getServerGBId(), deviceChannelList.size());
                         try {
                             sipCommanderFroPlatform.sendNotifyForCatalogOther(event.getType(), parentPlatform, deviceChannelList, subscribe, null);
                         } catch (InvalidArgumentException | ParseException | NoSuchFieldException | SipException |
@@ -89,10 +88,10 @@ public class CatalogEventLister implements ApplicationListener<CatalogEvent> {
                             log.error("[命令发送失败] 国标级联 Catalog通知: {}", e.getMessage());
                         }
                     }
-                }else if (parentPlatformMap.keySet().size() > 0) {
+                }else if (!parentPlatformMap.keySet().isEmpty()) {
                     for (String gbId : parentPlatformMap.keySet()) {
                         List<ParentPlatform> parentPlatforms = parentPlatformMap.get(gbId);
-                        if (parentPlatforms != null && parentPlatforms.size() > 0) {
+                        if (parentPlatforms != null && !parentPlatforms.isEmpty()) {
                             for (ParentPlatform platform : parentPlatforms) {
                                 SubscribeInfo subscribeInfo = subscribeHolder.getCatalogSubscribe(platform.getServerGBId());
                                 if (subscribeInfo == null) {
@@ -120,13 +119,13 @@ public class CatalogEventLister implements ApplicationListener<CatalogEvent> {
                 break;
             case CatalogEvent.ADD:
             case CatalogEvent.UPDATE:
-                if (parentPlatform != null || subscribe != null) {
+                if (parentPlatform != null) {
                      List<CommonGBChannel> deviceChannelList = new ArrayList<>();
                      if (event.getChannels() != null) {
                          deviceChannelList.addAll(event.getChannels());
                      }
                     if (!deviceChannelList.isEmpty()) {
-                        log.info("[Catalog事件: {}]平台:{},影响通道{}个", event.getType(), event.getPlatformId(), deviceChannelList.size());
+                        log.info("[Catalog事件: {}]平台:{},影响通道{}个", event.getType(), parentPlatform.getServerGBId(), deviceChannelList.size());
                         try {
                             sipCommanderFroPlatform.sendNotifyForCatalogAddOrUpdate(event.getType(), parentPlatform, deviceChannelList, subscribe, null);
                         } catch (InvalidArgumentException | ParseException | NoSuchFieldException | SipException |

+ 10 - 2
src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelService.java

@@ -54,9 +54,9 @@ public interface IGbChannelService {
 
     void deleteChannelToRegionByChannelIds(List<Integer> channelIds);
 
-    void addChannelToRegionBYGbDevice(String civilCode, List<Integer> deviceIds);
+    void addChannelToRegionByGbDevice(String civilCode, List<Integer> deviceIds);
 
-    void deleteChannelToRegionBYGbDevice(List<Integer> deviceIds);
+    void deleteChannelToRegionByGbDevice(List<Integer> deviceIds);
 
     void removeParentIdByBusinessGroup(String businessGroup);
 
@@ -65,4 +65,12 @@ public interface IGbChannelService {
     void updateBusinessGroup(String oldBusinessGroup, String newBusinessGroup);
 
     void updateParentIdGroup(String oldParentId, String newParentId);
+
+    void addChannelToGroup(String parentId, String businessGroup, List<Integer> channelIds);
+
+    void deleteChannelToGroup(String parentId, String businessGroup, List<Integer> channelIds);
+
+    void addChannelToGroupByGbDevice(String parentId, String businessGroup, List<Integer> deviceIds);
+
+    void deleteChannelToGroupByGbDevice(List<Integer> deviceIds);
 }

+ 2 - 0
src/main/java/com/genersoft/iot/vmp/gb28181/service/IPlatformService.java

@@ -82,4 +82,6 @@ public interface IPlatformService {
     void stopBroadcast(ParentPlatform platform, DeviceChannel channel, String stream,boolean sendBye, MediaServer mediaServerItem);
 
     void addSimulatedSubscribeInfo(ParentPlatform parentPlatform);
+
+    ParentPlatform queryOne(Integer platformId);
 }

+ 3 - 3
src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceChannelServiceImpl.java

@@ -457,9 +457,9 @@ public class DeviceChannelServiceImpl implements IDeviceChannelService {
                 deviceChannel.setHasAudio(channelInDb.isHasAudio());
                 deviceChannel.setId(channelInDb.getId());
                 if (channelInDb.getStatus().equalsIgnoreCase(deviceChannel.getStatus())){
-                    List<String> strings = platformChannelMapper.queryParentPlatformByChannelId(deviceChannel.getDeviceId());
-                    if (!CollectionUtils.isEmpty(strings)){
-                        strings.forEach(platformId->{
+                    List<Integer> ids = platformChannelMapper.queryParentPlatformByChannelId(deviceChannel.getDeviceId());
+                    if (!CollectionUtils.isEmpty(ids)){
+                        ids.forEach(platformId->{
                             eventPublisher.catalogEventPublish(platformId, deviceChannel, deviceChannel.getStatus().equals("ON")? CatalogEvent.ON:CatalogEvent.OFF);
                         });
                     }

+ 95 - 22
src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java

@@ -342,6 +342,9 @@ public class GbChannelServiceImpl implements IGbChannelService {
         if (channelList.isEmpty()) {
             throw new ControllerException(ErrorCode.ERROR100.getCode(), "所有通道Id不存在");
         }
+        for (CommonGBChannel channel : channelList) {
+            channel.setGbCivilCode(civilCode);
+        }
         int result = commonGBChannelMapper.updateRegion(civilCode, channelList);
         // 发送通知
         if (result > 0) {
@@ -402,11 +405,14 @@ public class GbChannelServiceImpl implements IGbChannelService {
     }
 
     @Override
-    public void addChannelToRegionBYGbDevice(String civilCode, List<Integer> deviceIds) {
+    public void addChannelToRegionByGbDevice(String civilCode, List<Integer> deviceIds) {
         List<CommonGBChannel> channelList = commonGBChannelMapper.queryByGbDeviceIds(deviceIds);
         if (channelList.isEmpty()) {
             throw new ControllerException(ErrorCode.ERROR100.getCode(), "所有通道Id不存在");
         }
+        for (CommonGBChannel channel : channelList) {
+            channel.setGbCivilCode(civilCode);
+        }
         int result = commonGBChannelMapper.updateRegion(civilCode, channelList);
         // 发送通知
         if (result > 0) {
@@ -420,7 +426,7 @@ public class GbChannelServiceImpl implements IGbChannelService {
     }
 
     @Override
-    public void deleteChannelToRegionBYGbDevice(List<Integer> deviceIds) {
+    public void deleteChannelToRegionByGbDevice(List<Integer> deviceIds) {
         List<CommonGBChannel> channelList = commonGBChannelMapper.queryByGbDeviceIds(deviceIds);
         if (channelList.isEmpty()) {
             throw new ControllerException(ErrorCode.ERROR100.getCode(), "所有通道Id不存在");
@@ -431,7 +437,9 @@ public class GbChannelServiceImpl implements IGbChannelService {
     @Override
     public void removeParentIdByBusinessGroup(String businessGroup) {
         List<CommonGBChannel> channelList = commonGBChannelMapper.queryByBusinessGroup(businessGroup);
-        Assert.notEmpty(channelList, "所有业务分组的通道不存在");
+        if (channelList.isEmpty()) {
+            return;
+        }
         int result = commonGBChannelMapper.removeParentIdByChannels(channelList);
 
     }
@@ -439,8 +447,10 @@ public class GbChannelServiceImpl implements IGbChannelService {
     @Override
     public void removeParentIdByGroupList(List<Group> groupList) {
         List<CommonGBChannel> channelList = commonGBChannelMapper.queryByGroupList(groupList);
-        Assert.notEmpty(channelList, "所有业务分组的通道不存在");
-        int result = commonGBChannelMapper.removeParentIdByChannels(channelList);
+        if (channelList.isEmpty()) {
+            return;
+        }
+        commonGBChannelMapper.removeParentIdByChannels(channelList);
     }
 
     @Override
@@ -448,32 +458,95 @@ public class GbChannelServiceImpl implements IGbChannelService {
         List<CommonGBChannel> channelList = commonGBChannelMapper.queryByBusinessGroup(oldBusinessGroup);
         Assert.notEmpty(channelList, "旧的业务分组的通道不存在");
 
-        commonGBChannelMapper.updateBusinessGroupByChannelList(newBusinessGroup, channelList);
-        for (CommonGBChannel channel : channelList) {
-            channel.setGbBusinessGroupId(newBusinessGroup);
-        }
-        // 发送catalog
-        try {
-            eventPublisher.catalogEventPublish(null, channelList, CatalogEvent.UPDATE);
-        }catch (Exception e) {
-            log.warn("[多个通道业务分组] 发送失败,数量:{}", channelList.size(), e);
+        int result = commonGBChannelMapper.updateBusinessGroupByChannelList(newBusinessGroup, channelList);
+        if (result > 0) {
+            for (CommonGBChannel channel : channelList) {
+                channel.setGbBusinessGroupId(newBusinessGroup);
+            }
+            // 发送catalog
+            try {
+                eventPublisher.catalogEventPublish(null, channelList, CatalogEvent.UPDATE);
+            }catch (Exception e) {
+                log.warn("[多个通道业务分组] 发送失败,数量:{}", channelList.size(), e);
+            }
         }
     }
 
     @Override
     public void updateParentIdGroup(String oldParentId, String newParentId) {
         List<CommonGBChannel> channelList = commonGBChannelMapper.queryByParentId(oldParentId);
-        Assert.notEmpty(channelList, "旧的虚拟组织的通道不存在");
+        if (channelList.isEmpty()) {
+            return;
+        }
 
-        commonGBChannelMapper.updateParentIdByChannelList(newParentId, channelList);
+        int result = commonGBChannelMapper.updateParentIdByChannelList(newParentId, channelList);
+        if (result > 0) {
+            for (CommonGBChannel channel : channelList) {
+                channel.setGbParentId(newParentId);
+            }
+            // 发送catalog
+            try {
+                eventPublisher.catalogEventPublish(null, channelList, CatalogEvent.UPDATE);
+            }catch (Exception e) {
+                log.warn("[多个通道业务分组] 发送失败,数量:{}", channelList.size(), e);
+            }
+        }
+    }
+
+    @Override
+    public void addChannelToGroup(String parentId, String businessGroup, List<Integer> channelIds) {
+        List<CommonGBChannel> channelList = commonGBChannelMapper.queryByIds(channelIds);
+        if (channelList.isEmpty()) {
+            throw new ControllerException(ErrorCode.ERROR100.getCode(), "所有通道Id不存在");
+        }
+        int result = commonGBChannelMapper.updateGroup(parentId, businessGroup, channelList);
+        // 发送通知
+        if (result > 0) {
+            for (CommonGBChannel channel : channelList) {
+                channel.setGbBusinessGroupId(businessGroup);
+                channel.setGbParentId(parentId);
+            }
+            try {
+                // 发送catalog
+                eventPublisher.catalogEventPublish(null, channelList, CatalogEvent.UPDATE);
+            }catch (Exception e) {
+                log.warn("[多个通道添加行政区划] 发送失败,数量:{}", channelList.size(), e);
+            }
+        }
+    }
+
+    @Override
+    public void deleteChannelToGroup(String parentId, String businessGroup, List<Integer> channelIds) {
+        List<CommonGBChannel> channelList = commonGBChannelMapper.queryByGbDeviceIds(channelIds);
+        if (channelList.isEmpty()) {
+            throw new ControllerException(ErrorCode.ERROR100.getCode(), "所有通道Id不存在");
+        }
+        int result = commonGBChannelMapper.removeParentIdByChannels(channelList);
+    }
+
+    @Override
+    public void addChannelToGroupByGbDevice(String parentId, String businessGroup, List<Integer> deviceIds) {
+        List<CommonGBChannel> channelList = commonGBChannelMapper.queryByGbDeviceIds(deviceIds);
+        if (channelList.isEmpty()) {
+            throw new ControllerException(ErrorCode.ERROR100.getCode(), "所有通道Id不存在");
+        }
         for (CommonGBChannel channel : channelList) {
-            channel.setGbParentId(newParentId);
+            channel.setGbCivilCode(civilCode);
         }
-        // 发送catalog
-        try {
-            eventPublisher.catalogEventPublish(null, channelList, CatalogEvent.UPDATE);
-        }catch (Exception e) {
-            log.warn("[多个通道业务分组] 发送失败,数量:{}", channelList.size(), e);
+        int result = commonGBChannelMapper.updateRegion(civilCode, channelList);
+        // 发送通知
+        if (result > 0) {
+            try {
+                // 发送catalog
+                eventPublisher.catalogEventPublish(null, channelList, CatalogEvent.UPDATE);
+            }catch (Exception e) {
+                log.warn("[多个通道添加行政区划] 发送失败,数量:{}", channelList.size(), e);
+            }
         }
     }
+
+    @Override
+    public void deleteChannelToGroupByGbDevice(List<Integer> deviceIds) {
+
+    }
 }

+ 84 - 35
src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GroupServiceImpl.java

@@ -18,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
 import org.springframework.util.ObjectUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -44,43 +45,55 @@ public class GroupServiceImpl implements IGroupService {
         Assert.notNull(group, "参数不可为NULL");
         Assert.notNull(group.getDeviceId(), "设备编号不可为NULL");
         Assert.isTrue(group.getDeviceId().trim().length() == 20, "设备编号必须为20位");
-        Assert.isTrue(group.getParentDeviceId().trim().length() == 20, "父级编号错误");
         Assert.notNull(group.getName(), "设备编号不可为NULL");
 
         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(gbCode.getTypeCode()), "创建业务分组时设备编号11-13位应使用215");
-                group.setBusinessGroup(group.getDeviceId());
-            }else {
-                // 建立第一个虚拟组织
-                Assert.isTrue("216".equals(gbCode.getTypeCode()), "创建虚拟组织时设备编号11-13位应使用216");
-            }
+        if ("215".equals(gbCode.getTypeCode())){
+            // 添加业务分组
+            addBusinessGroup(group);
         }else {
-            // 建立第一个虚拟组织
             Assert.isTrue("216".equals(gbCode.getTypeCode()), "创建虚拟组织时设备编号11-13位应使用216");
+            // 添加虚拟组织
+            addGroup(group);
         }
-        if (!ObjectUtils.isEmpty(group.getBusinessGroup())) {
-            // 校验业务分组是否存在
-            Group businessGroup = groupManager.queryBusinessGroup(group.getBusinessGroup());
-            Assert.notNull(businessGroup, "所属的业务分组分组不存在");
-        }
+    }
+
+    private void addGroup(Group group) {
+        // 建立虚拟组织
+        Assert.notNull(group.getBusinessGroup(), "所属的业务分组分组不存在");
+        Group businessGroup = groupManager.queryBusinessGroup(group.getBusinessGroup());
+        Assert.notNull(businessGroup, "所属的业务分组分组不存在");
         if (!ObjectUtils.isEmpty(group.getParentDeviceId())) {
             Group parentGroup = groupManager.queryOneByDeviceId(group.getParentDeviceId(), group.getBusinessGroup());
             Assert.notNull(parentGroup, "所属的上级分组分组不存在");
+        }else {
+            group.setParentDeviceId(null);
         }
         group.setCreateTime(DateUtil.getNow());
         group.setUpdateTime(DateUtil.getNow());
         groupManager.add(group);
-        // 添加新的虚拟组织需要发起同志
-        if (gbCode.getTypeCode().equals("216")) {
+        if (group.getPlatformId() != null) {
+            CommonGBChannel channel = CommonGBChannel.build(group);
+            try {
+                // 发送catalog
+                eventPublisher.catalogEventPublish(group.getPlatformId(), channel, CatalogEvent.ADD);
+            }catch (Exception e) {
+                log.warn("[添加虚拟组织] 发送失败, {}-{}", channel.getGbName(), channel.getGbDeviceDbId(), e);
+            }
+        }
+    }
+
+    private void addBusinessGroup(Group group) {
+        group.setBusinessGroup(group.getDeviceId());
+        group.setCreateTime(DateUtil.getNow());
+        group.setUpdateTime(DateUtil.getNow());
+        groupManager.addBusinessGroup(group);
+        if (group.getPlatformId() != null) {
             CommonGBChannel channel = CommonGBChannel.build(group);
             try {
                 // 发送catalog
-                eventPublisher.catalogEventPublish(null, channel, CatalogEvent.ADD);
+                eventPublisher.catalogEventPublish(group.getPlatformId(), channel, CatalogEvent.ADD);
             }catch (Exception e) {
                 log.warn("[添加虚拟组织] 发送失败, {}-{}", channel.getGbName(), channel.getGbDeviceDbId(), e);
             }
@@ -110,7 +123,28 @@ public class GroupServiceImpl implements IGroupService {
         group.setName(group.getName());
         group.setUpdateTime(DateUtil.getNow());
         groupManager.update(group);
-
+        // 修改他的子节点
+        if (!group.getDeviceId().equals(groupInDb.getDeviceId())
+                || !group.getBusinessGroup().equals(groupInDb.getBusinessGroup())) {
+            List<Group> groupList = queryAllChildren(groupInDb.getDeviceId(), groupInDb.getPlatformId());
+            if (!groupList.isEmpty()) {
+               int result =  groupManager.updateChild(groupInDb.getDeviceId(), group);
+               if (result > 0) {
+                   for (Group chjildGroup : groupList) {
+                       chjildGroup.setParentDeviceId(group.getDeviceId());
+                       chjildGroup.setBusinessGroup(group.getBusinessGroup());
+                       // 将变化信息发送通知
+                       CommonGBChannel channel = CommonGBChannel.build(chjildGroup);
+                       try {
+                           // 发送catalog
+                           eventPublisher.catalogEventPublish(null, channel, CatalogEvent.UPDATE);
+                       }catch (Exception e) {
+                           log.warn("[业务分组/虚拟组织变化] 发送失败,{}", group.getDeviceId(), e);
+                       }
+                   }
+               }
+            }
+        }
         // 将变化信息发送通知
         CommonGBChannel channel = CommonGBChannel.build(group);
         try {
@@ -144,7 +178,13 @@ public class GroupServiceImpl implements IGroupService {
             // 查询所有业务分组
             return groupManager.queryBusinessGroupForTree(query, platformId);
         }else {
-            return groupManager.queryForTree(query, parent, platformId);
+            GbCode gbCode = GbCode.decode(parent);
+            if (gbCode.getTypeCode().equals("215")) {
+                return groupManager.queryForTreeByBusinessGroup(query, parent, platformId);
+            }else {
+                return groupManager.queryForTree(query, parent, platformId);
+            }
+
         }
     }
 
@@ -158,24 +198,33 @@ public class GroupServiceImpl implements IGroupService {
     public boolean delete(int id) {
         Group group = groupManager.queryOne(id);
         Assert.notNull(group, "分组不存在");
-        groupManager.delete(id);
+        List<Group> groupListForDelete = new ArrayList<>();
         GbCode gbCode = GbCode.decode(group.getDeviceId());
         if (gbCode.getTypeCode().equals("215")) {
+            List<Group> groupList = groupManager.queryByBusinessGroup(group.getDeviceId());
+            if (!groupList.isEmpty()) {
+                groupListForDelete.addAll(groupList);
+            }
             // 业务分组
-            gbChannelService.removeParentIdByBusinessGroup(gbCode.getTypeCode());
+            gbChannelService.removeParentIdByBusinessGroup(group.getDeviceId());
         }else {
-            List<Group> groups = queryAllChildren(group.getDeviceId(), group.getPlatformId());
-            groups.add(group);
-            gbChannelService.removeParentIdByGroupList(groups);
+            List<Group> groupList = queryAllChildren(group.getDeviceId(), group.getPlatformId());
+            if (!groupList.isEmpty()) {
+                groupListForDelete.addAll(groupList);
+            }
+            groupListForDelete.add(group);
+            gbChannelService.removeParentIdByGroupList(groupListForDelete);
         }
-        // 发送分组移除通知
-        // 将变化信息发送通知
-        CommonGBChannel channel = CommonGBChannel.build(group);
-        try {
-            // 发送catalog
-            eventPublisher.catalogEventPublish(null, channel, CatalogEvent.DEL);
-        }catch (Exception e) {
-            log.warn("[业务分组/虚拟组织删除] 发送失败,{}", group.getDeviceId(), e);
+        groupManager.batchDelete(groupListForDelete);
+        for (Group groupForDelete : groupListForDelete) {
+            // 将变化信息发送通知
+            CommonGBChannel channel = CommonGBChannel.build(groupForDelete);
+            try {
+                // 发送catalog
+                eventPublisher.catalogEventPublish(null, channel, CatalogEvent.DEL);
+            }catch (Exception e) {
+                log.warn("[业务分组/虚拟组织删除] 发送失败,{}", groupForDelete.getDeviceId(), e);
+            }
         }
         return true;
     }

+ 2 - 2
src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformChannelServiceImpl.java

@@ -114,7 +114,7 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
             if (catalogSubscribe != null) {
                 List<CommonGBChannel> deviceChannelList = getDeviceChannelListByChannelReduceList(channelReducesToAdd, catalogId, platform);
                 if (deviceChannelList != null) {
-                    eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.ADD);
+                    eventPublisher.catalogEventPublish(platform.getId(), deviceChannelList, CatalogEvent.ADD);
                 }
             }
             log.info("[关联通道]国标通道 平台:{}, 存入数据库成功", platformId);
@@ -166,7 +166,7 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
         }
 
         List<CommonGBChannel> deviceChannels = platformChannelMapper.queryAllChannelInCatalog(platformId, catalogId);
-        eventPublisher.catalogEventPublish(platformId, deviceChannels, CatalogEvent.DEL);
+        eventPublisher.catalogEventPublish(platform.getId(), deviceChannels, CatalogEvent.DEL);
 
         return platformChannelMapper.delChannelForGBByCatalogId(platformId, catalogId);
     }

+ 5 - 0
src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformServiceImpl.java

@@ -795,4 +795,9 @@ public class PlatformServiceImpl implements IPlatformService {
             streamSession.remove(platform.getServerGBId(), channel.getDeviceId(), stream);
         }
     }
+
+    @Override
+    public ParentPlatform queryOne(Integer platformId) {
+        return platformMapper.getParentPlatById(platformId);
+    }
 }

+ 10 - 9
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java

@@ -193,7 +193,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
                 // 查询平台下是否有该通道
                 DeviceChannel channel = storager.queryChannelInParentPlatform(requesterId, channelId);
                 GbStream gbStream = storager.queryStreamInParentPlatform(requesterId, channelId);
-                PlatformCatalog catalog = storager.getCatalog(requesterId, channelId);
+//                PlatformCatalog catalog = storager.getCatalog(requesterId, channelId);
 
                 MediaServer mediaServerItem = null;
                 StreamPush streamPushItem = null;
@@ -258,14 +258,15 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
                     } catch (SipException | InvalidArgumentException | ParseException e) {
                         log.error("[命令发送失败] invite CALL_IS_BEING_FORWARDED: {}", e.getMessage());
                     }
-                } else if (catalog != null) {
-                    try {
-                        // 目录不支持点播
-                        responseAck(request, Response.BAD_REQUEST, "catalog channel can not play");
-                    } catch (SipException | InvalidArgumentException | ParseException e) {
-                        log.error("[命令发送失败] invite 目录不支持点播: {}", e.getMessage());
-                    }
-                    return;
+//                }
+//                else if (catalog != null) {
+//                    try {
+//                        // 目录不支持点播
+//                        responseAck(request, Response.BAD_REQUEST, "catalog channel can not play");
+//                    } catch (SipException | InvalidArgumentException | ParseException e) {
+//                        log.error("[命令发送失败] invite 目录不支持点播: {}", e.getMessage());
+//                    }
+//                    return;
                 } else {
                     log.info("通道不存在,返回404: {}", channelId);
                     try {

+ 0 - 22
src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java

@@ -91,36 +91,14 @@ public interface IVideoManagerStorage {
 	 */
     Device queryVideoDeviceByChannelId(String channelId);
 
-	/**
-	 * 获取目录信息
-	 * @param platformId
-	 * @param parentId
-	 * @return
-	 */
-    List<PlatformCatalog> getChildrenCatalogByPlatform(String platformId, String parentId);
-
-	int addCatalog(PlatformCatalog platformCatalog);
-
-	PlatformCatalog getCatalog(String platformId, String id);
-
-	int delCatalog(String platformId, String id);
-
-	int updateCatalog(PlatformCatalog platformCatalog);
-
-	int setDefaultCatalog(String platformId, String catalogId);
-
     int delRelation(PlatformCatalog platformCatalog);
 
 	int updateStreamGPS(List<GPSMsgInfo> gpsMsgInfo);
 
 	List<ParentPlatform> queryPlatFormListForGBWithGBId(String channelId, List<String> platforms);
 
-	void delCatalogByPlatformId(String serverGBId);
-
 	void delRelationByPlatformId(String serverGBId);
 
-    PlatformCatalog queryDefaultCatalogInPlatform(String platformId);
-
 	List<ChannelSourceInfo> getChannelSource(String platformId, String gbId);
 
 	List<ParentPlatform> queryEnablePlatformListWithAsMessageChannel();

+ 5 - 178
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java

@@ -3,16 +3,14 @@ package com.genersoft.iot.vmp.storager.impl;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.genersoft.iot.vmp.conf.SipConfig;
 import com.genersoft.iot.vmp.gb28181.bean.*;
+import com.genersoft.iot.vmp.gb28181.controller.bean.ChannelReduce;
 import com.genersoft.iot.vmp.gb28181.dao.*;
 import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
 import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
 import com.genersoft.iot.vmp.storager.dao.GbStreamMapper;
 import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo;
-import com.genersoft.iot.vmp.utils.DateUtil;
-import com.genersoft.iot.vmp.gb28181.controller.bean.ChannelReduce;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@@ -34,6 +32,7 @@ import java.util.List;
 @DS("master")
 public class VideoManagerStorageImpl implements IVideoManagerStorage {
 
+
 	@Autowired
 	EventPublisher eventPublisher;
 
@@ -162,7 +161,7 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
 			deviceChannel.setGbDeviceId(channelReduce.getChannelId());
 			deviceChannelList.add(deviceChannel);
 		}
-		eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.DEL);
+//		eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.DEL);
 		return result;
 	}
 
@@ -241,175 +240,12 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
 		return result;
 	}
 
-	@Override
-	public List<PlatformCatalog> getChildrenCatalogByPlatform(String platformId, String parentId) {
-		return catalogMapper.selectByParentId(platformId, parentId);
-	}
-
-	@Override
-	public int addCatalog(PlatformCatalog platformCatalog) {
-		ParentPlatform platform = platformMapper.getParentPlatByServerGBId(platformCatalog.getPlatformId());
-		if (platform == null) {
-			return 0;
-		}
-		if (platformCatalog.getId().length() <= 8) {
-			platformCatalog.setCivilCode(platformCatalog.getParentId());
-		}else {
-			if (platformCatalog.getId().length() != 20) {
-				return 0;
-			}
-			if (platformCatalog.getParentId() != null) {
-				switch (Integer.parseInt(platformCatalog.getId().substring(10, 13))){
-					case 200:
-					case 215:
-						if (platformCatalog.getParentId().length() <= 8) {
-							platformCatalog.setCivilCode(platformCatalog.getParentId());
-						}else {
-							PlatformCatalog catalog = catalogMapper.selectByPlatFormAndCatalogId(platformCatalog.getPlatformId(), platformCatalog.getParentId());
-							if (catalog != null) {
-								platformCatalog.setCivilCode(catalog.getCivilCode());
-							}
-						}
-						break;
-					case 216:
-						if (platformCatalog.getParentId().length() <= 8) {
-							platformCatalog.setCivilCode(platformCatalog.getParentId());
-						}else {
-							PlatformCatalog catalog = catalogMapper.selectByPlatFormAndCatalogId(platformCatalog.getPlatformId(),platformCatalog.getParentId());
-							if (catalog == null) {
-								log.warn("[添加目录] 无法获取目录{}的CivilCode和BusinessGroupId", platformCatalog.getPlatformId());
-								break;
-							}
-							platformCatalog.setCivilCode(catalog.getCivilCode());
-							if (Integer.parseInt(platformCatalog.getParentId().substring(10, 13)) == 215) {
-								platformCatalog.setBusinessGroupId(platformCatalog.getParentId());
-							}else {
-								if (Integer.parseInt(platformCatalog.getParentId().substring(10, 13)) == 216) {
-									platformCatalog.setBusinessGroupId(catalog.getBusinessGroupId());
-								}
-							}
-						}
-						break;
-					default:
-						break;
-				}
-			}
-		}
-		int result = catalogMapper.add(platformCatalog);
-		if (result > 0) {
-			DeviceChannel deviceChannel = getDeviceChannelByCatalog(platformCatalog);
-			eventPublisher.catalogEventPublish(platformCatalog.getPlatformId(), deviceChannel, CatalogEvent.ADD);
-		}
-		return result;
-	}
-
-	private PlatformCatalog getTopCatalog(String id, String platformId) {
-		PlatformCatalog catalog = catalogMapper.selectByPlatFormAndCatalogId(platformId, id);
-		if (catalog.getParentId().equals(platformId)) {
-			return catalog;
-		}else {
-			return getTopCatalog(catalog.getParentId(), platformId);
-		}
-	}
-
-	@Override
-	public PlatformCatalog getCatalog(String platformId, String id) {
-		return catalogMapper.selectByPlatFormAndCatalogId(platformId, id);
-	}
-
-	@Override
-	public int delCatalog(String platformId, String id) {
-		return delCatalogExecute(id, platformId);
-	}
-	private int delCatalogExecute(String id, String platformId) {
-		int delresult =  catalogMapper.del(platformId, id);
-		DeviceChannel deviceChannelForCatalog = new DeviceChannel();
-		if (delresult > 0){
-			deviceChannelForCatalog.setDeviceId(id);
-			eventPublisher.catalogEventPublish(platformId, deviceChannelForCatalog, CatalogEvent.DEL);
-		}
-
-		List<GbStream> gbStreams = platformGbStreamMapper.queryChannelInParentPlatformAndCatalog(platformId, id);
-		if (!gbStreams.isEmpty()){
-			List<CommonGBChannel> deviceChannelList = new ArrayList<>();
-			for (GbStream gbStream : gbStreams) {
-				CommonGBChannel deviceChannel = new CommonGBChannel();
-				deviceChannel.setGbDeviceId(gbStream.getGbId());
-				deviceChannelList.add(deviceChannel);
-			}
-			eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.DEL);
-		}
-		int delStreamresult = platformGbStreamMapper.delByPlatformAndCatalogId(platformId,id);
-		List<PlatformCatalog> platformCatalogs = platformChannelMapper.queryChannelInParentPlatformAndCatalog(platformId, id);
-		if (!platformCatalogs.isEmpty()){
-			List<CommonGBChannel> deviceChannelList = new ArrayList<>();
-			for (PlatformCatalog platformCatalog : platformCatalogs) {
-				CommonGBChannel deviceChannel = new CommonGBChannel();
-				deviceChannel.setGbDeviceId(platformCatalog.getId());
-				deviceChannelList.add(deviceChannel);
-			}
-			eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.DEL);
-		}
-		int delChannelresult = platformChannelMapper.delByCatalogId(platformId, id);
-		// 查看是否存在子目录,如果存在一并删除
-		List<String> allChildCatalog = getAllChildCatalog(id, platformId);
-		if (!allChildCatalog.isEmpty()) {
-			int limitCount = 50;
-			if (allChildCatalog.size() > limitCount) {
-				for (int i = 0; i < allChildCatalog.size(); i += limitCount) {
-					int toIndex = i + limitCount;
-					if (i + limitCount > allChildCatalog.size()) {
-						toIndex = allChildCatalog.size();
-					}
-					delChannelresult += platformCatalogMapper.deleteAll(platformId, allChildCatalog.subList(i, toIndex));
-				}
-			}else {
-				delChannelresult += platformCatalogMapper.deleteAll(platformId, allChildCatalog);
-			}
-		}
-		return delresult + delChannelresult + delStreamresult;
-	}
-
-	private List<String> getAllChildCatalog(String id, String platformId) {
-		List<String> catalogList = platformCatalogMapper.queryCatalogFromParent(id, platformId);
-		List<String> catalogListChild = new ArrayList<>();
-		if (catalogList != null && !catalogList.isEmpty()) {
-			for (String childId : catalogList) {
-				List<String> allChildCatalog = getAllChildCatalog(childId, platformId);
-				if (allChildCatalog != null && !allChildCatalog.isEmpty()) {
-					catalogListChild.addAll(allChildCatalog);
-				}
-
-			}
-		}
-		if (!catalogListChild.isEmpty()) {
-			catalogList.addAll(catalogListChild);
-		}
-		return catalogList;
-	}
-
-
-	@Override
-	public int updateCatalog(PlatformCatalog platformCatalog) {
-		int result = catalogMapper.update(platformCatalog);
-		if (result > 0) {
-			DeviceChannel deviceChannel = getDeviceChannelByCatalog(platformCatalog);
-			eventPublisher.catalogEventPublish(platformCatalog.getPlatformId(), deviceChannel, CatalogEvent.UPDATE);
-		}
-		return result;
-	}
-
-	@Override
-	public int setDefaultCatalog(String platformId, String catalogId) {
-		return platformMapper.setDefaultCatalog(platformId, catalogId, DateUtil.getNow());
-	}
-
 	@Override
 	public int delRelation(PlatformCatalog platformCatalog) {
 		if (platformCatalog.getType() == 1) {
 			CommonGBChannel deviceChannel = new CommonGBChannel();
 			deviceChannel.setGbDeviceId(platformCatalog.getId());
-			eventPublisher.catalogEventPublish(platformCatalog.getPlatformId(), deviceChannel, CatalogEvent.DEL);
+//			eventPublisher.catalogEventPublish(platformCatalog.getPlatformId(), deviceChannel, CatalogEvent.DEL);
 			return platformChannelMapper.delByCatalogIdAndChannelIdAndPlatformId(platformCatalog);
 		}else if (platformCatalog.getType() == 2) {
 			List<GbStream> gbStreams = platformGbStreamMapper.queryChannelInParentPlatformAndCatalog(platformCatalog.getPlatformId(), platformCatalog.getParentId());
@@ -417,7 +253,7 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
 				if (gbStream.getGbId().equals(platformCatalog.getId())) {
 					CommonGBChannel deviceChannel = new CommonGBChannel();
 					deviceChannel.setGbDeviceId(gbStream.getGbId());
-					eventPublisher.catalogEventPublish(platformCatalog.getPlatformId(), deviceChannel, CatalogEvent.DEL);
+//					eventPublisher.catalogEventPublish(platformCatalog.getPlatformId(), deviceChannel, CatalogEvent.DEL);
 					return platformGbStreamMapper.delByAppAndStream(gbStream.getApp(), gbStream.getStream());
 				}
 			}
@@ -456,21 +292,12 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
 		return platformChannelMapper.queryPlatFormListForGBWithGBId(channelId, platforms);
 	}
 
-	@Override
-	public void delCatalogByPlatformId(String serverGBId) {
-		catalogMapper.delByPlatformId(serverGBId);
-	}
-
 	@Override
 	public void delRelationByPlatformId(String serverGBId) {
 		platformGbStreamMapper.delByPlatformId(serverGBId);
 		platformChannelMapper.delByPlatformId(serverGBId);
 	}
 
-	@Override
-	public PlatformCatalog queryDefaultCatalogInPlatform(String platformId) {
-		return catalogMapper.selectDefaultByPlatFormId(platformId);
-	}
 
 	@Override
 	public List<ChannelSourceInfo> getChannelSource(String platformId, String gbId) {

+ 26 - 11
web_src/src/components/common/GroupTree.vue

@@ -27,7 +27,7 @@
       >
         <span class="custom-tree-node" slot-scope="{ node, data }">
           <span @click.stop >
-            <el-radio v-if="node.data.type === 0 && node.level !== 1 " style="margin-right: 0" v-model="chooseId" @input="chooseIdChange" :label="node.data.id">{{''}}</el-radio>
+            <el-radio v-if="node.data.type === 0 && node.level > 2 " style="margin-right: 0" v-model="chooseId" @input="chooseIdChange" :label="node.data.id">{{''}}</el-radio>
           </span>
           <span v-if="node.data.type === 0" style="color: #409EFF" class="iconfont icon-bianzubeifen3"></span>
           <span v-if="node.data.type === 1" style="color: #409EFF" class="iconfont icon-shexiangtou2"></span>
@@ -74,7 +74,7 @@ export default {
           isLeaf: false,
           type: 0
         }]);
-      } else if (node.data.id.length <= 8) {
+      } else {
         this.$axios({
           method: 'get',
           url: `/api/group/tree/list`,
@@ -90,8 +90,6 @@ export default {
         }).catch(function (error) {
           console.log(error);
         });
-      } else {
-        resolve([]);
       }
     },
     reset: function () {
@@ -145,7 +143,7 @@ export default {
               }
             },
             {
-              label: node.level === 1?"新建业务分组":"新建虚拟组织",
+              label: "新建节点",
               icon: "el-icon-plus",
               disabled: false,
               onClick: () => {
@@ -153,11 +151,11 @@ export default {
               }
             },
             {
-              label: "重命名",
+              label: "编辑节点",
               icon: "el-icon-edit",
               disabled: node.level === 1,
               onClick: () => {
-                this.editCatalog(data, node);
+                this.editGroup(data, node);
               }
             },
             {
@@ -180,7 +178,7 @@ export default {
             {
               label: "添加设备",
               icon: "el-icon-plus",
-              disabled: node.level === 1,
+              disabled: node.level <= 2,
               onClick: () => {
                 this.addChannelFormDevice(data.id, node)
               }
@@ -188,7 +186,7 @@ export default {
             {
               label: "移除设备",
               icon: "el-icon-delete",
-              disabled: node.level === 1,
+              disabled: node.level <= 2,
               onClick: () => {
                 this.removeChannelFormDevice(data.id, node)
               }
@@ -227,7 +225,7 @@ export default {
         method: "delete",
         url: `/api/group/delete`,
         params: {
-          deviceId: id,
+          id: node.data.dbId,
         }
       }).then((res) => {
         if (res.data.code === 0) {
@@ -312,12 +310,29 @@ export default {
     },
     addGroup: function (id, node) {
       this.$refs.groupEdit.openDialog({
-        id: null
+        id: 0,
+        name: "",
+        deviceId: "",
+        parentDeviceId: node.level > 2 ? node.data.id:"",
+        businessGroup: node.level > 2 ? node.data.businessGroup: node.data.id,
       },form => {
         node.loaded = false
         node.expand();
       }, id);
     },
+    editGroup: function (id, node) {
+      console.log(node)
+      this.$refs.groupEdit.openDialog({
+        id: node.data.dbId,
+        name: node.data.label,
+        deviceId: node.data.id,
+        parentDeviceId: node.data.parentDeviceId,
+        businessGroup: node.data.businessGroup,
+      },form => {
+        node.parent.loaded = false
+        node.parent.expand();
+      }, id);
+    },
     nodeClickHandler: function (data, node, tree) {
       console.log(data)
       console.log(node)

+ 3 - 1
web_src/src/components/dialog/GbDeviceSelect.vue

@@ -1,7 +1,7 @@
 <template>
   <div id="addUser" v-loading="getDeviceListLoading">
     <el-dialog
-      title="添加国标设备通道到行政区划"
+      title="添加国标设备通道"
       width="60%"
       top="2rem"
       :close-on-click-modal="false"
@@ -34,6 +34,8 @@
         </el-table-column>
         <el-table-column prop="deviceId" label="设备编号" min-width="200" >
         </el-table-column>
+        <el-table-column prop="channelCount" label="通道数" min-width="120" >
+        </el-table-column>
         <el-table-column prop="manufacturer" label="厂家" min-width="120" >
         </el-table-column>
         <el-table-column label="地址" min-width="160" >

+ 17 - 9
web_src/src/components/dialog/groupEdit.vue

@@ -11,7 +11,7 @@
       @close="close()"
     >
       <div id="shared" style="margin-top: 1rem;margin-right: 100px;">
-        <el-form ref="form" :rules="rules" :model="group" label-width="140px" >
+        <el-form ref="form" :model="group" label-width="140px" >
           <el-form-item label="节点编号" prop="id" >
             <el-input v-model="group.deviceId" placeholder="请输入编码">
               <el-button slot="append" @click="buildDeviceIdCode(group.deviceId)">生成</el-button>
@@ -50,13 +50,23 @@ export default {
       showDialog: false,
       loading: false,
       level: 0,
-      group: {},
+      group: {
+        id: 0,
+        deviceId: "",
+        name: "",
+        parentDeviceId: "",
+        businessGroup: "",
+        platformId: "",
+
+      },
     };
   },
   methods: {
     openDialog: function (group, callback) {
       console.log(group)
-      this.group = group;
+      if (group) {
+        this.group = group;
+      }
       this.showDialog = true;
       this.submitCallback = callback;
     },
@@ -64,7 +74,7 @@ export default {
 
       this.$axios({
         method:"post",
-        url: this.group.id ? '/api/group/add':'/api/group/update',
+        url: this.group.id ? '/api/group/update':'/api/group/add',
         data: this.group
       }).then((res)=> {
         if (res.data.code === 0) {
@@ -88,13 +98,11 @@ export default {
         });
     },
     buildDeviceIdCode: function (deviceId){
-
+      console.log(this.group)
+      let lockContent = this.group.businessGroup ? "216":"215"
       this.$refs.channelCode.openDialog(code=>{
-        console.log(this.form)
-        console.log("code===> " + code)
         this.group.deviceId = code;
-        console.log("code22===> " + code)
-      }, deviceId);
+      }, deviceId, 5 , lockContent);
     },
     close: function () {
       this.showDialog = false;