irds组件的资源同步

1.pom依赖

<dependencies>        <dependency>                                       <groupId>com.hikvision.starfish</groupId>            <artifactId>starfish-starter-sync-resource</artifactId>            <version>1.8.1.RELEASE</version>        </dependency></dependencies>

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

@Servicepublic 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<HashMap> resList) {  logger.info(HikLog.toLog(HikLog.message(getResourceType()+"irds sync all "," result ")),JsonUtil.toJson(resList));        //TODO 在此处自定义区域信息的入库操作        //全量同步自定义实现示例        //(1)类型转换        List<RegionIrdsInfo> regionIrdsInfoList = this.map2Object(list);        //存入数据库        if (!CollectionUtils.isEmpty(regionIrdsInfoList)){            saveTbResource(regionIrdsInfoList);         }    }     /**     * 实时增加     * 1.接管变更告诉,向数据起源获取指定资源类型的变更数据     * @param resList  变更数据,即irds组件新增的原始区域信息     */    @Override    public void add(List<HashMap> 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<HashMap> resList) {        logger.info(HikLog.toLog(HikLog.message(getResourceType()+" ============irds sync update " ," result ")),JsonUtil.toJson(resList));        //TODO 在此处自定义区域信息的批改操作    }     /**     * 实时删除     * 1.接管变更告诉     * @param  resIdList  变更数据标识,删除原始区域信息的标识     */    @Override    public void delete(List<String> resIdList) {        logger.info(HikLog.toLog(HikLog.message(getResourceType()+" ============irds sync delete " ," result ")),JsonUtil.toJson(resIdList));        //TODO 在此处自定义区域信息的删除操作    }/**     * 类型转换     * 将从irds获取到的区域信息转换为RegionIrdsInfo类对象     * @param resList     * @return     */    public List<RegionIrdsInfo> map2Object(List<HashMap> resList){        List<RegionIrdsInfo> 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<RegionIrdsInfo> list){        List<String> 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.测试

运行我的项目,该局部会主动运行: