共计 3355 个字符,预计需要花费 9 分钟才能阅读完成。
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. 测试
运行我的项目,该局部会主动运行:
正文完