通用工具方法——irds组件的资源同步

irds组件的资源同步

1.pom依赖


                                               com.hikvision.starfish
            starfish-starter-sync-resource
            1.8.1.RELEASE
        

2. 资源同步示例(区域资源)

@Service
public class RegionIrdsSyncService implements IResourceIrdsSync {
 
    private static Logger logger = LoggerFactory.getLogger(RegionIrdsSyncService.class) ;
 
    /**
     * 获取资源类型:
     * 1.用于接收变更通知和获取irds数据,例如region
     * @return
     */
    @Override
    public String getResourceType() {
        //设置获取的资源类型为REGION
        return ResourceTypeEnum.REGION.getResourceType();
    }
    
    /**
     * 全量同步
     * 1.向数据来源获取指定资源类型的所有数据
     * @param resList  全量数据,即从irds组件获取到的原始区域信息
     */
    @Override
    public void syncAll(List resList) {
  logger.info(HikLog.toLog(HikLog.message(getResourceType()+"irds sync all "," result ")),JsonUtil.toJson(resList));
        //TODO 在此处自定义区域信息的入库操作
        //全量同步自定义实现示例
        //(1)类型转换
        List regionIrdsInfoList = this.map2Object(list);
        //存入数据库
        if (!CollectionUtils.isEmpty(regionIrdsInfoList)){
            saveTbResource(regionIrdsInfoList); 
        }
    }
 
    /**
     * 实时添加
     * 1.接收变更通知,向数据来源获取指定资源类型的变更数据
     * @param resList  变更数据,即irds组件新增的原始区域信息
     */
    @Override
    public void add(List resList) {
        logger.info(HikLog.toLog(HikLog.message(getResourceType()+" ============irds sync add "," result ")),JsonUtil.toJson(resList));
        //TODO 在此处自定义区域信息的添加操作
    }
 
    /**
     * 实时更新
     * 1.接收变更通知,向数据来源获取指定资源类型的变更数据
     * @param resList  变更数据 ,即irds组件修改的原始区域信息
     */
    @Override
    public void update(List resList) {
        logger.info(HikLog.toLog(HikLog.message(getResourceType()+" ============irds sync update " ," result ")),JsonUtil.toJson(resList));
        //TODO 在此处自定义区域信息的修改操作
    }
 
    /**
     * 实时删除
     * 1.接收变更通知
     * @param  resIdList  变更数据标识,删除原始区域信息的标识
     */
    @Override
    public void delete(List resIdList) {
        logger.info(HikLog.toLog(HikLog.message(getResourceType()+" ============irds sync delete " ," result ")),JsonUtil.toJson(resIdList));
        //TODO 在此处自定义区域信息的删除操作
    }


/**
     * 类型转换
     * 将从irds获取到的区域信息转换为RegionIrdsInfo类对象
     * @param resList
     * @return
     */
    public List map2Object(List resList){
        List regionIrdsInfos = new ArrayList<>();
        if (!CollectionUtils.isEmpty(resList)){
            resList.forEach(res->{
                RegionIrdsInfo regionIrdsInfo = JSONObject.parseObject(JSONObject.toJSONString(res), RegionIrdsInfo.class);
                regionIrdsInfos.add(regionIrdsInfo);
            });
        }
        return regionIrdsInfos;
    }


    /**
     * 存入数据库
     * @param list
     */
    private void saveTbResource(List list){
        List indexCodeList = tbResourceMapper.getAllIndexCode();
        list.forEach(l->{
            if (indexCodeList.contains(l.getIndexCode())){
                //如果已经存在,更新区域名称、区域路径、更新时间和更新人名称
                QueryWrapper wrapper = new QueryWrapper();
                wrapper.eq("index_code", l.getIndexCode());
                TbResource tbResource = tbResourceMapper.selectOne(wrapper);
                tbResource.setExternalIndexCode(l.getExternalIndexCode());
                tbResource.setRegionName(l.getName());
                tbResource.setRegionPath(l.getRegionPath());
                tbResource.setUpdateTime(tbResource.getUpdateTime());
                tbResource.setUpdateUser(ComponentConstant.USER_ID);
                tbResourceMapper.updateById(tbResource);
            }else {
                //如果不存在,直接进行添加
                TbResource tbResource = TbResource.builder()
                        .indexCode(l.getIndexCode())
                        .externalIndexCode(l.getExternalIndexCode())
                        .regionName(l.getName())
                        .regionPath(l.getRegionPath())
                        .pointConfig(0)
                        .pointType(-1)
                        .pointName("")
                        .pointIconUrl("")
                        .pointIconName("")
                        .aggreIconUrl("")
                        .aggreIconName("")
                        .createTime(getNowTime())
                        .createUser(ComponentConstant.USER_ID)
                        .updateTime(getNowTime())
                        .updateUser(ComponentConstant.USER_ID)
                        .build();
                tbResourceMapper.insert(tbResource);
            }

        });
    }
 
}

3. 定时任务触发

全量同步的定时任务触发时间默认为凌晨一点,可在配置文件中自定义默认出发时间:

starfish.resource.sync.cron-time=0 0 1 * * ?

4.测试

运行项目,该部分会自动运行:
通用工具方法——irds组件的资源同步_第1张图片

你可能感兴趣的:(java)