|  | @@ -1,5 +1,6 @@
 | 
	
		
			
				|  |  |  package com.genersoft.iot.vmp.gb28181.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import com.genersoft.iot.vmp.common.CivilCodePo;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.gb28181.bean.*;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.gb28181.dao.CommonGBChannelMapper;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.gb28181.dao.GroupMapper;
 | 
	
	
		
			
				|  | @@ -7,6 +8,7 @@ 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.CivilCodeUtil;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.utils.DateUtil;
 | 
	
		
			
				|  |  |  import lombok.extern.slf4j.Slf4j;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
	
		
			
				|  | @@ -15,8 +17,7 @@ import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  |  import org.springframework.util.Assert;
 | 
	
		
			
				|  |  |  import org.springframework.util.ObjectUtils;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import java.util.Collections;
 | 
	
		
			
				|  |  | -import java.util.List;
 | 
	
		
			
				|  |  | +import java.util.*;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * 区域管理类
 | 
	
	
		
			
				|  | @@ -142,14 +143,51 @@ public class GroupServiceImpl implements IGroupService {
 | 
	
		
			
				|  |  |              // 查询所有业务分组
 | 
	
		
			
				|  |  |              return groupManager.queryBusinessGroupForTree(query, platformId);
 | 
	
		
			
				|  |  |          }else {
 | 
	
		
			
				|  |  | -            List<GroupTree> groupTreeList = groupManager.queryForTree(query, parent, platformId);
 | 
	
		
			
				|  |  | +            return groupManager.queryForTree(query, parent, platformId);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        return Collections.emptyList();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public void syncFromChannel() {
 | 
	
		
			
				|  |  | +        // 获取未初始化的业务分组
 | 
	
		
			
				|  |  | +        List<String> civilCodeList = regionMapper.getUninitializedCivilCode();
 | 
	
		
			
				|  |  | +        if (civilCodeList.isEmpty()) {
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        List<Region> regionList = new ArrayList<>();
 | 
	
		
			
				|  |  | +        // 收集节点的父节点,用于验证哪些节点的父节点不存在,方便一并存入
 | 
	
		
			
				|  |  | +        Map<String, Region> regionMapForVerification = new HashMap<>();
 | 
	
		
			
				|  |  | +        civilCodeList.forEach(civilCode->{
 | 
	
		
			
				|  |  | +            CivilCodePo civilCodePo = CivilCodeUtil.INSTANCE.getCivilCodePo(civilCode);
 | 
	
		
			
				|  |  | +            if (civilCodePo != null) {
 | 
	
		
			
				|  |  | +                Region region = Region.getInstance(civilCodePo);
 | 
	
		
			
				|  |  | +                regionList.add(region);
 | 
	
		
			
				|  |  | +                // 获取全部的父节点
 | 
	
		
			
				|  |  | +                List<CivilCodePo> civilCodePoList = CivilCodeUtil.INSTANCE.getAllParentCode(civilCode);
 | 
	
		
			
				|  |  | +                if (!civilCodePoList.isEmpty()) {
 | 
	
		
			
				|  |  | +                    for (CivilCodePo codePo : civilCodePoList) {
 | 
	
		
			
				|  |  | +                        regionMapForVerification.put(codePo.getCode(), Region.getInstance(codePo));
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        if (regionList.isEmpty()){
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (!regionMapForVerification.isEmpty()) {
 | 
	
		
			
				|  |  | +            // 查询数据库中已经存在的.
 | 
	
		
			
				|  |  | +            List<String> civilCodesInDb = regionMapper.queryInList(regionMapForVerification.keySet());
 | 
	
		
			
				|  |  | +            if (!civilCodesInDb.isEmpty()) {
 | 
	
		
			
				|  |  | +                for (String code : civilCodesInDb) {
 | 
	
		
			
				|  |  | +                    regionMapForVerification.remove(code);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        for (Region region : regionList) {
 | 
	
		
			
				|  |  | +            regionMapForVerification.put(region.getDeviceId(), region);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        regionMapper.batchAdd(new ArrayList<>(regionMapForVerification.values()));
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 |