xiejun
2023-07-11 2d2375543df4879e738e2bafe9f1f478c9b1ab44
集成接口管理模块相关接口开发
已修改3个文件
285 ■■■■■ 文件已修改
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 245 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | 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;
@@ -14,6 +20,8 @@
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");
            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 -> {