关于java:通用工具方法irds组件的资源同步

33次阅读

共计 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. 测试

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

正文完
 0