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.测试
运行我的项目,该局部会主动运行: