记录一种做业务数据同步基础数据时的逻辑代码

业务场景: 有一个基础数据,员工考核方案. 有一个岗位实例数据: 岗位考核方案. 岗位的数据可以通过一个按钮从基础数据中进行同步数据过来.如考核项, 考核满分,最低分等,而且考核方案数据是树结构的.用字段parentId标记.

在同步逻辑中,就要做区分哪些数据之前是同步过的,就做更新操作.没有同步过的, 就进行新增操作.故示例数据需要用baseDataId字段标记该实例数据是同步自哪条基础数据的

下面直接上代码

public void sync(String stationId){
    List<BaseData> baseDatas = baseDataService.list(stationId);//查询该岗位的基础数据
    List<KPI> currDatas =  kpiService.list(stationId);//查询该岗位的实例数据
    Map<String,KPI> bd2cdMap = new HashMap<>();
    for (KPI : currDatas) {
        if (StringUtils.isMeaningFul(vo.getBaseDataId())) {
            //记录基础数据id和示例数据的对应关系
            bd2cdMap.put(vo.getBaseDataId(), vo);
        }
    }
    while (!baseDatas.isEmpty()){ //baseDatas是树结构的话,则用该方式遍历.如果是List结构,直接for即可
            BaseData remove = baseDatas.remove(0);
            baseDatas.addAll(remove.getChildren());
            KPI vo= bd2cdMap.get(remove.getId());
            if(vo== null){
                //不存在的.进行新增
                KPI newData = new KPI();
                newData.setStaffId(staffId);
                newData.setBaseDataId(remove.getId());
                newData.setFullScore(remove.getFullScore());
                if(StringUtils.isMeaningFul(remove.getParentId()) ){
                    //查询对应的父节点,记录parentId
                    KPI parentVo = bd2cdMap.get(remove.getParentId());                    
                    if(parentAsVo != null){
                        newData.setParentId(parentVo.getId());
                    }
                }
                kpiService.insert(newData);
                bd2cdMap.put(newData.getBaseDataId(),newData);//新增完要放回map
            }else{
                //存在的,进行更新字段
                vo.setFullScore(remove.getFullScore());
                kpiService.update(vo);
            }
        }
}

本文到此结束

发布了53 篇原创文章 · 获赞 5 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_40085888/article/details/101362552