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. 资源同步示例(区域资源)
@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<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.测试
运行项目,该部分会自动运行:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。