xiejun
2023-07-11 2d2375543df4879e738e2bafe9f1f478c9b1ab44
集成接口管理模块相关接口开发
已修改3个文件
305 ■■■■■ 文件已修改
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/DockingManagementController.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java 247 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/DockingManagementController.java
@@ -47,6 +47,11 @@
     */
    private final IDokingSysManaentService dokingSysManaentService;
    /***
     * 同步集成服务
     */
    private final     ICodeDuckingSyncService codeDuckingSyncService;
    /**系统集成的系统信息列表
     * @param dockingSystem 基础查询对象,包含查询条件,分页,排序等
     *@return 系统集成的系统信息显示对象列表
@@ -240,15 +245,13 @@
    }
//    /**
//     *批量处理
//     * 必须要有分类oid和dataoid
//     * @return
//     */
//    @PostMapping("/sendData")
//    public  R sendData(String oid){
//
//        return codeDuckingSyncServiceI.sendData(oid);
//    }
    /**
     *批量处理
     * 必须要有分类oid和dataoid
     * @return
     */
    @PostMapping("/sendData")
    public  R sendData(String oid){
        return codeDuckingSyncService.sendData(oid);
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java
@@ -1,10 +1,16 @@
package com.vci.ubcs.code.service.impl;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.vci.ubcs.code.entity.DockingSystem;
import com.vci.ubcs.code.service.ICodeDuckingSyncService;
import com.vci.ubcs.code.service.IDockingSystemService;
import com.vci.ubcs.code.entity.*;
import com.vci.ubcs.code.service.*;
import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.starter.web.util.VciQueryWrapperForDO;
import com.vci.ubcs.starter.web.util.WebUtil;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.api.R;
import org.springframework.stereotype.Service;
@@ -13,6 +19,8 @@
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
import static com.vci.ubcs.code.constant.MdmDuckingConstant.*;
/*
@@ -28,7 +36,14 @@
    @Resource
    private  IDockingSystemService dockingSystemService;
    @Resource
    private IDockingDataService dockingDataService;
    @Resource
    private IDockingTaskService dockingTaskService;
    @Resource
    private IDockingSystemConfigService dockingSystemConfigService;
    @Resource
    private ICodeClassifyService codeClassifyService;
    @Override
    public void DockingDataSyncScheduing() {
@@ -45,6 +60,9 @@
    @Override
    public R sendData(String oids) {
        return null;
    }
@@ -54,115 +72,120 @@
     * @param type
     */
    private void initPushDataTaks(int type){
//        //initSysadmin();
//        //sysintinfo查询要推送的主题库和相关系统信息
//        Map<String, String> conditionMap = new HashMap<>();
//        conditionMap.put("usedflag","true");
//        conditionMap.put("pushType",type==2?"2":"1") ;//2是代表分类推送,1是代表数据推送
//
//        Wrappers wrappers=new Wrappers();
//
//        List<DockingSystem> sysIntInfoVOList = dockingSystemService.list(Wrappers.query().lambda().eq());
//        if(CollectionUtils.isEmpty(sysIntInfoVOList)){
//            String title=type==2?"分类推送":"数据推送";
//            log.info("info->所有集成系统,未查询到相关的【"+title+"】的接口配置信息,配置");
//            return;
//        }
//        Map<String ,List<DockingSystem>> sysIntInfoDOMap = new HashMap<String ,List<DockingSystem>>();//key=classifyoid,value=list<map>
//        for (SysIntInfoDO sysIntInfoVOi:sysIntInfoVOList){
//            List<SysIntInfoDO> SysIntInfoVOListi = sysIntInfoDOMap.get(sysIntInfoVOi.getClassifyoid());
//            if(SysIntInfoVOListi==null){
//                SysIntInfoVOListi = new ArrayList<SysIntInfoDO>();
//            }
//            SysIntInfoVOListi.add(sysIntInfoVOi);
//            sysIntInfoDOMap.put(sysIntInfoVOi.getClassifyoid(),SysIntInfoVOListi);
//        }
//        //根据类型去查询需要集成的分类或者数据
//        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(DockingDataDO.class);
//        queryWrapperForDO.addQueryMap("sendflag","false");
//        if(type==2){
//            queryWrapperForDO.addQueryMap("btmTypeId",DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
//        }else {
//            queryWrapperForDO.addQueryMap("btmTypeId", QueryOptionConstant.NOTIN + "(" + VciBaseUtil.toInSql(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT)) + ")");
//        }
//        List<DockingDataDO> dataList = dockingDataDaoI.selectByWrapper(queryWrapperForDO);
//
//        for (DockingDataDO mapi:dataList){
//            WebUtil.setPersistence(false);
//            BatchCBO batchCBO = new BatchCBO();
//            String dataoid = mapi.getOid();//data对象的oid
//            String classifyoid = mapi.getClassifyoid();
//            String id = mapi.getId();
//            String uniquecode = mapi.getUniquecode();
//            String btmid = mapi.getBtmid();
//            String btmoid = mapi.getBtmoid();
//            String sendtype = mapi.getSendtype();
//            String classifyid = mapi.getClassifyid();
//            String classifyname = mapi.getClassifyname();
//            String curentClassOid=null;
//            if(type==2){
//                curentClassOid=btmoid;
//            }else{
//                curentClassOid=classifyoid;
//            }
//            List<SysIntInfoDO> effectiveSysIntInfoVOs=new ArrayList<>();
//            //根据当前数据的id,查询获取哪些系统需要做集成
//            List<CodeClassifyDO> parentLeveDO= codeClassifyDaoI.selectAllLevelParentByOid(curentClassOid);
//            if(CollectionUtils.isEmpty(parentLeveDO)){
//                continue;//说明这个分类被删掉了,不做处理
//            }
//            Map<String, CodeClassifyDO> oidCodeclassifyDOMap = parentLeveDO.stream().filter(codeClassifyDO -> codeClassifyDO != null && StringUtils.isNotBlank(codeClassifyDO.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
//
//            oidCodeclassifyDOMap.keySet().forEach(oid->{
//                if(sysIntInfoDOMap.containsKey(oid)){
//                    List<SysIntInfoDO> sysIntInfoDOS= sysIntInfoDOMap.get(oid);
//                    effectiveSysIntInfoVOs.addAll(sysIntInfoDOS);
//                }
//            });
//            //如果校验的系统接口信息不存在,则数据不不往信息里推送
//            if(CollectionUtils.isEmpty(effectiveSysIntInfoVOs)){
//                continue;
//            }
//            List<DockingTaskDO> dockingTaskDO_insert = new ArrayList<DockingTaskDO>();
//            for (SysIntInfoDO sysIntInfoVOi:effectiveSysIntInfoVOs){
//                DockingTaskDO dockingTaskDO = new DockingTaskDO();
//                dockingTaskDO.setOid(redisService.getUUIDEveryDay());
//                dockingTaskDO.setSendflag(SEND_FLAG_FALSE);
//                dockingTaskDO.setId(id);//编码
//                dockingTaskDO.setUniquecode(uniquecode);
//                dockingTaskDO.setBtmoid(btmoid);//数据oid
//                dockingTaskDO.setBtmid(btmid);//数据业务类型id
//                dockingTaskDO.setClassifyid(classifyid);//数据在分类id
//                dockingTaskDO.setClassifyoid(classifyoid);//数据所在分类oid
//                dockingTaskDO.setClassifyname(classifyname);//数据所在分类名称
//                dockingTaskDO.setSendtype(sendtype);//数据推送类型
//                dockingTaskDO.setDataoid(dataoid);
//
//                //intinfo
//                dockingTaskDO.setSysinfooid(sysIntInfoVOi.getOid());//intinfo的oid
//                dockingTaskDO.setSystemoid(sysIntInfoVOi.getSysbaseoid());//系统oid
//                dockingTaskDO.setSystemcode(sysIntInfoVOi.getSysbaseid());//系统编码
//                dockingTaskDO.setSystemname(sysIntInfoVOi.getSysbasename());//系统name
//                dockingTaskDO_insert.add(dockingTaskDO);
//            }
//
//            BatchCBO bi = null;
//            if(dockingTaskDO_insert.size()!=0) {
//                bi = dockingTaskDaoI.batchInsert(dockingTaskDO_insert);
//                batchCBO.copyFromOther(bi);
//            }
//            WebUtil.setPersistence(true);
//            boService.persistenceBatch(batchCBO);
//            //dockingTaskDaoI.updateByPrimaryKey方法报错了,所以手写了这个
//            boolean u = updateDockingDatasSendFlag(dataoid,SEND_FLAG_TRUE);
//            if(!u){
//                log.error("集成data分解任务失败!dataoid:"+dataoid);
//                continue;
//            }
//
//        }
        //initSysadmin();
        List<DockingSystemConfig> dockingSystemConfigList = dockingSystemConfigService.list(
            Wrappers.<DockingSystemConfig>query().lambda().eq(DockingSystemConfig::getUsedFlag,"true")
                .eq(DockingSystemConfig::getPushType,type==2?"2":"1"));//2是代表分类推送,1是代表数据推送
        if(CollectionUtils.isEmpty(dockingSystemConfigList)){
            String title=type==2?"分类推送":"数据推送";
            log.info("info->所有集成系统,未查询到相关的【"+title+"】的接口配置信息,配置");
            return;
        }
        Map<String ,List<DockingSystemConfig>> sysIntInfoDOMap = new HashMap<>();//key=classifyoid,value=list<map>
        for (DockingSystemConfig dockingSystemConfig:dockingSystemConfigList){
            List<DockingSystemConfig> dockingSystemList = sysIntInfoDOMap.get(dockingSystemConfig.getClassifyOid());
            if(dockingSystemList==null){
                dockingSystemList = new ArrayList<>();
            }
            dockingSystemList.add(dockingSystemConfig);
            sysIntInfoDOMap.put(dockingSystemConfig.getClassifyOid(),dockingSystemList);
        }
        //根据类型去查询需要集成的分类或者数据
        LambdaQueryWrapper<DockingData> queryWrapper = Wrappers.<DockingData>lambdaQuery();
        queryWrapper.eq(DockingData::getSendFlag,"false");
        if(type==2){
            queryWrapper.eq(DockingData::getBtmId,DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
        }else {
            queryWrapper.notIn(DockingData::getBtmId,DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
        }
        List<DockingData> dataList = dockingDataService.list(queryWrapper);
        for (DockingData mapi:dataList){
            WebUtil.setPersistence(false);
            String dataoid = mapi.getOid();//data对象的oid
            String classifyoid = mapi.getClassifyOid();
            String id = mapi.getId();
            String uniquecode = mapi.getUniqueCode();
            String btmid = mapi.getBtmId();
            String btmoid = mapi.getBtmOid();
            String sendtype = mapi.getSendType();
            String classifyid = mapi.getClassifyId();
            String classifyname = mapi.getClassifyName();
            String curentClassOid=null;
            if(type==2){
                curentClassOid=btmoid;
            }else{
                curentClassOid=classifyoid;
            }
            List<DockingSystemConfig> effectiveSysIntInfoVOs=new ArrayList<>();
            //根据当前数据的id,查询获取哪些系统需要做集成
            List<CodeClassify> parentLeveDO= codeClassifyService.selectAllLevelParentByOid(curentClassOid);
            if(CollectionUtils.isEmpty(parentLeveDO)){
                continue;//说明这个分类被删掉了,不做处理
            }
            Map<String, CodeClassify> oidCodeclassifyDOMap = parentLeveDO.stream().filter(codeClassifyDO -> codeClassifyDO != null && StringUtils.isNotBlank(codeClassifyDO.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
            oidCodeclassifyDOMap.keySet().forEach(oid->{
                if(sysIntInfoDOMap.containsKey(oid)){
                    List<DockingSystemConfig> sysIntInfoDOS= sysIntInfoDOMap.get(oid);
                    effectiveSysIntInfoVOs.addAll(sysIntInfoDOS);
                }
            });
            //如果校验的系统接口信息不存在,则数据不不往信息里推送
            if(CollectionUtils.isEmpty(effectiveSysIntInfoVOs)){
                continue;
            }
            List<DockingTask> dockingTask_insert = new ArrayList<>();
            for (DockingSystemConfig sysIntInfoVOi:effectiveSysIntInfoVOs){
                DockingTask dockingTask = new DockingTask();
                dockingTask.setOid(VciBaseUtil.getPk());
                dockingTask.setSendFlag(SEND_FLAG_FALSE);
                dockingTask.setId(id);//编码
                dockingTask.setUniqueCode(uniquecode);
                dockingTask.setBtmOid(btmoid);//数据oid
                dockingTask.setBtmId(btmid);//数据业务类型id
                dockingTask.setClassifyId(classifyid);//数据在分类id
                dockingTask.setClassifyOid(classifyoid);//数据所在分类oid
                dockingTask.setClassifyName(classifyname);//数据所在分类名称
                dockingTask.setSendType(sendtype);//数据推送类型
                dockingTask.setDataOid(dataoid);
                //intinfo
                dockingTask.setSysInfoOid(sysIntInfoVOi.getOid());//intinfo的oid
                dockingTask.setSystemOid(sysIntInfoVOi.getSysBaseOid());//系统oid
                dockingTask.setSystemCode(sysIntInfoVOi.getSysBaseId());//系统编码
                dockingTask.setSystemName(sysIntInfoVOi.getSysBaseName());//系统name
                dockingTask_insert.add(dockingTask);
            }
            if(dockingTask_insert.size()!=0) {
                dockingTaskService.saveBatch(dockingTask_insert);
            }
            //dockingTaskDaoI.updateByPrimaryKey方法报错了,所以手写了这个
            boolean u = updateDockingDatasSendFlag(dataoid,SEND_FLAG_TRUE);
            if(!u){
                log.error("集成data分解任务失败!dataoid:"+dataoid);
                continue;
            }
        }
    }
    /**
     * dockingdata根据oid修改sendflag
     * @param oid
     * @param sendflag
     * @return
     */
    public boolean updateDockingDatasSendFlag(String oid,String sendflag){
        boolean u=false;
        DockingData dockingData=dockingDataService.getById(oid);
        if(dockingData!=null){
            dockingData.setSendFlag(sendflag);
            u=    dockingDataService.updateById(dockingData);
        }
        return u;
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -1115,7 +1115,7 @@
     * 根据属性映射转换编码所需字段
     */
    public void getConfigDatas(String systemId,String libray, ApplyDatasVO applyDatasVO,List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrVOList,DataObjectVO dataObjectVO) throws Throwable {
        List<ApplyDataVO> applyDataVOList=applyDatasVO.getObject();
        LinkedHashMap<String,LinkedHashMap<String,String>> dataKeyValueMap=new LinkedHashMap<>();
        //如果将数据转换成所需要的数据对象
        Map<String, String> attrMapConfigMap=new HashMap<>();
@@ -1125,15 +1125,23 @@
            Map<String, String> stringStringMap=attributeMapConfig.getSystem_attrmap();
            log.info("集成系统属性映射配置文件条目数-》"+stringStringMap.size());
            //stringStringMap.put("RLM","D:\\RLM.xml");
            LibraryDO libraryDO=gennerAttrMapUtil.getNewInstance().gennerAttrMapBySystem(systemId,stringStringMap);
            List<LibraryClsfDO> libraryClsfDOList=libraryDO.getClsf();
            Map<String, List<ClsfAttrMappingDO>> libPropMaps = libraryClsfDOList.stream().collect(Collectors.toMap(LibraryClsfDO::getLibrary, LibraryClsfDO::getProp, (key1, key2) -> key2));
            log.info("根据参数:libray:-》"+libray+"从配置文件中找对应属性映射配置");
            if(libPropMaps.containsKey(libray)){
                log.info("根据参数:libray:-》"+libray+"匹配到相应的属性映射信息");
                List<ClsfAttrMappingDO> clsfAttrMappingDOList=libPropMaps.get(libray);
                propMaps = clsfAttrMappingDOList.stream().collect(Collectors.toMap(ClsfAttrMappingDO::getSourceKey, ClsfAttrMappingDO::getTargetKey, (key1, key2) -> key2));
                log.info("根据参数:libray:-》"+libray+"匹配到相应的属性映射信息,属性映射条目数+"+clsfAttrMappingDOList.size());
            if(!CollectionUtils.isEmpty(stringStringMap)) {
                log.info("info:需要读取配置文件");
                LibraryDO libraryDO = gennerAttrMapUtil.getNewInstance().gennerAttrMapBySystem(systemId, stringStringMap);
                List<LibraryClsfDO> libraryClsfDOList = libraryDO.getClsf();
                if(!CollectionUtils.isEmpty(libraryClsfDOList)) {
                    Map<String, List<ClsfAttrMappingDO>> libPropMaps = libraryClsfDOList.stream().collect(Collectors.toMap(LibraryClsfDO::getLibrary, LibraryClsfDO::getProp, (key1, key2) -> key2));
                    log.info("根据参数:libray:-》" + libray + "从配置文件中找对应属性映射配置");
                    String path=stringStringMap.get(systemId);
                    if (libPropMaps.containsKey(libray)) {
                        log.info("根据参数:libray:-》" + libray + "匹配到相应的属性映射信息");
                        List<ClsfAttrMappingDO> clsfAttrMappingDOList = libPropMaps.get(libray);
                        propMaps = clsfAttrMappingDOList.stream().collect(Collectors.toMap(ClsfAttrMappingDO::getSourceKey, ClsfAttrMappingDO::getTargetKey, (key1, key2) -> key2));
                        log.info("根据参数:libray:-》" + libray + "匹配到相应的属性映射信息,属性映射条目数+" + clsfAttrMappingDOList.size());
                    }else{
                        throw new Throwable("根据系统标识【"+systemId+"】找到对应的配置文件:【"+path+"】,但未获取到对应的库【"+libray+"】属性映射信息配置");
                    }
                }
            }
            log.info("根据参数:libray:-》"+libray+"从配置文件中找对应属性映射配置 end ");
        }catch (Throwable e){
@@ -1155,6 +1163,11 @@
            dataObjectVO.setColName(rowNameList);//放入属性
            attrMapConfigMap.putAll(propMaps);
            LinkedList<RowDatas> rowDataList = new LinkedList<>();
            List<ApplyDataVO> applyDataVOList=new ArrayList<>();
            if(!CollectionUtils.isEmpty(applyDatasVO.getObject())){
                applyDataVOList=applyDatasVO.getObject();
            }
            //Map<String, List<ProppertyVO>> dataPropMap = applyDataVOList.stream().collect(Collectors.toMap(ApplyDataVO::getId, ApplyDataVO::getProp, (key1, key2) -> key2));
            final int[] rowIndex = {0};
            applyDataVOList.stream().forEach(applyDataVO -> {