xiejun
2023-06-19 c009750456d37d42f514321fe411e841d1b19fb4
接口定时分发其他系统功能开发
已修改3个文件
709 ■■■■■ 文件已修改
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java 675 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java
@@ -413,20 +413,20 @@
     */
    List<Tree> referTree(UIFormReferVO referConfigVO, TreeQueryObject queryObject);
    /**
     * 是否为修改忽略的属性
     * @param attrName 属性的名字
     * @return true 表示应该忽略
     */
    boolean checkUnAttrUnEdit(String attrName);
//    {
//        return  (VciQueryWrapperForDO.OID_FIELD.equalsIgnoreCase(attrName)
//            ||"ts".equalsIgnoreCase(attrName)
//            || "lastmodifier".equalsIgnoreCase(attrName)
//            || "lastmodifytime".equalsIgnoreCase(attrName)
//            || "createtime".equalsIgnoreCase(attrName)
//            || "checkintime".equalsIgnoreCase(attrName)
//            ||"checkouttime".equalsIgnoreCase(attrName));
//    }
    default boolean checkUnAttrUnEdit(String attrName){
        return  (VciQueryWrapperForDO.OID_FIELD.equalsIgnoreCase(attrName)
            ||"ts".equalsIgnoreCase(attrName)
            || "lastmodifier".equalsIgnoreCase(attrName)
            || "lastmodifytime".equalsIgnoreCase(attrName)
            || "createtime".equalsIgnoreCase(attrName)
            || "checkintime".equalsIgnoreCase(attrName)
            ||"checkouttime".equalsIgnoreCase(attrName));
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java
@@ -1,673 +1,36 @@
/*
package com.vci.ubcs.code.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.vci.mdm.constant.MdmDuckingConstant;
import com.vci.mdm.dao.*;
import com.vci.mdm.dto.datapush.classify.JsonRootDataDTO;
import com.vci.mdm.dto.datapush.classify.NodeClassifyDTO;
import com.vci.mdm.dto.datapush.classify.NodeDataDTO;
import com.vci.mdm.dto.datapush.classify.NodeLibraryDTO;
import com.vci.mdm.dto.datapush.data.NodeJosnDTO;
import com.vci.mdm.dto.datapush.data.NodeObjectDTO;
import com.vci.mdm.dto.datapush.data.NodeProDTO;
import com.vci.mdm.dto.datapush.data.NodedataDTO;
import com.vci.mdm.dto.datapush.result.ResultJsonDTO;
import com.vci.mdm.dto.datapush.result.ResultNodeDataDTO;
import com.vci.mdm.dto.datapush.result.ResultNodeObjectDTO;
import com.vci.mdm.model.*;
import com.vci.mdm.pagemodel.CodeClassifyTemplateAttrVO;
import com.vci.mdm.pagemodel.CodeClassifyTemplateVO;
import com.vci.mdm.pagemodel.SysIntInfoVO;
import com.vci.mdm.service.*;
import com.vci.mdm.utils.*;
import com.vci.starter.web.constant.QueryOptionConstant;
import com.vci.starter.web.enumpck.UserSecretEnum;
import com.vci.starter.web.pagemodel.BaseResult;
import com.vci.starter.web.pagemodel.SessionInfo;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
import com.vci.web.pageModel.BatchCBO;
import com.vci.web.redis.RedisService;
import com.vci.web.service.WebBoServiceI;
import com.vci.web.util.PlatformClientUtil;
import com.vci.web.util.WebUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import com.vci.ubcs.code.service.ICodeDuckingSyncService;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.api.R;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
import static com.vci.mdm.constant.MdmDuckingConstant.*;
*/
/**
/*
 * 主题库集成服务
 * @author wangyi
 * @date 2022-03-20
 *//*
 * @author xiejun
 * @date 2023-06-19
**/
@Service
public class CodeDuckingSyncServiceImpl implements CodeDuckingSyncServiceI {
    */
/**
     * 日志
     *//*
    private Logger logger = LoggerFactory.getLogger(getClass());
    */
/**
     * 集成推送任务数据操作层
     *//*
    @Resource
    private DockingTaskDaoI dockingTaskDaoI;
    */
/**
     * 集成推送任务数据操作层
     *//*
    @Resource
    private DockingDataDaoI dockingDataDaoI;
    */
/**
     * 集成日志数据操作层
     *//*
    @Resource
    private DockingLogeDaoI dockingLogeDaoI;
    */
/**
     * 模板属性数据操作层
     *//*
    @Resource
    private CodeClassifyDaoI codeClassifyDaoI;
    */
/**
     * 业务类型操作的服务
     *//*
    @Autowired
    private WebBoServiceI boService;
    */
/**
     * 缓存服务
     *//*
    @Autowired
    private RedisService redisService;
    */
/**
     * 数据服务
     *//*
    @Autowired(required = false)
    @Lazy
    private MdmEngineServiceI mdmEngineServiceI;
@Slf4j
public class CodeDuckingSyncServiceImpl implements ICodeDuckingSyncService {
    */
/**
     * 要推送系统的服务
     *//*
    @Override
    public void DockingDataSyncScheduing() {
    @Autowired
    private SysIntInfoServiceI sysIntInfoServiceI;
    }
    @Value("${dataSyncPush.dataParamName:xmlData}")
    public String DATA_PARAM_NAME;
    @Override
    public void DockingClassSyncScheduing() {
    */
/**
     * 定时任务推送
     *//*
    }
    @Override
    public void DockingDataSyncScheduing(){
       // insertCache2();
        initPushDataTaks(1);
        sendpushDataForService();
    }
    */
/**
     * 分类定时任务推送
     *//*
    @Override
    public void DockingClassSyncScheduing(){
        initPushDataTaks(2);//分类推送
        sendpushClsfForService();
    }
    */
/**
     * 手动推送为完成的数据
     * @param oids
     * @return
     *//*
    @Override
    public BaseResult sendData(String oids) {
        VciBaseUtil.alertNotNull(oids,"系统集成基础信息数据对象",oids,"系统集成基础信息的主键");
        List<String> dockingTaskOidList=new ArrayList<>();
        dockingTaskOidList= VciBaseUtil.str2List(oids);
        List<DockingTaskDO> newDockingTaskDOs= this.dockingTaskDaoI.selectByPrimaryKeyCollection(dockingTaskOidList);
        Map<String,List<DockingTaskDO>> typeDockingTaskDOMap=new HashMap<>();
        newDockingTaskDOs.stream().forEach(newDockingTaskDO->{
           String btmId=newDockingTaskDO.getBtmid();
           if(btmId.equalsIgnoreCase(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT))){
               List<DockingTaskDO> dockingTaskDOList= typeDockingTaskDOMap.get(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
               if(CollectionUtils.isEmpty(dockingTaskDOList)){
                   dockingTaskDOList=new ArrayList<>();
               }
               dockingTaskDOList.add(newDockingTaskDO);
               typeDockingTaskDOMap.put(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT),dockingTaskDOList);
           }else{
               List<DockingTaskDO> dockingTaskDOList= typeDockingTaskDOMap.get("data");
               if(CollectionUtils.isEmpty(dockingTaskDOList)){
                   dockingTaskDOList=new ArrayList<>();
               }
               dockingTaskDOList.add(newDockingTaskDO);
               typeDockingTaskDOMap.put("data",dockingTaskDOList);
           }
        });
        typeDockingTaskDOMap.keySet().forEach(type->{
           List<DockingTaskDO> DockingTaskDO=typeDockingTaskDOMap.get(type);
           if(!CollectionUtils.isEmpty(DockingTaskDO)){
               if(type.equalsIgnoreCase(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT))){
                   this.sendpushClsfForService(DockingTaskDO);
               }else{
                   this.sendpushDataForService(DockingTaskDO);
               }
           }
        });
       return  BaseResult.successMsg("手动推送完成,请核对是否推送成功");
    }
    */
/***
     * 查询redis中数据,对比后插入dockingtask
     * @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是代表数据推送
        List<SysIntInfoDO> sysIntInfoVOList = sysIntInfoServiceI.selectAll(conditionMap);
        if(CollectionUtils.isEmpty(sysIntInfoVOList)){
            String title=type==2?"分类推送":"数据推送";
            logger.info("info->所有集成系统,未查询到相关的【"+title+"】的接口配置信息,配置");
            return;
        }
        Map<String ,List<SysIntInfoDO>> sysIntInfoDOMap = new HashMap<String ,List<SysIntInfoDO>>();//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){
                logger.error("集成data分解任务失败!dataoid:"+dataoid);
                continue;
            }
        }
    }
    private void sendpushDataForService (){
        initSysadmin();
        //查询哪些任务还没有执行完成
        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
        queryWrapper.addQueryMap("sendFlag",MdmDuckingConstant.SEND_FLAG_FALSE);
        queryWrapper.addQueryMap("btmId", QueryOptionConstant.NOTIN + "(" + VciBaseUtil.toInSql(DOCKING_DEFAULT_CLASSIFY.toUpperCase(Locale.ROOT)) + ")");
        List<DockingTaskDO> dockingTaskDOS = dockingTaskDaoI.selectByWrapper(queryWrapper);
        sendpushDataForService(dockingTaskDOS);
    }
    */
/***
     * 发送编码主数据
     *//*
    private void sendpushDataForService (List<DockingTaskDO> dockingTaskDOS){
        //每个task依次执行推送
        for (DockingTaskDO dockingTaskDO:dockingTaskDOS){
            //每个task一个事务,开启
            WebUtil.setPersistence(false);
            BatchCBO batchCBO = new BatchCBO();
            String paramString="";
            String sendString="";
            String backString="";
            try {
                //查询系统接口信息,ip method,dataType
                String systeminfooid = dockingTaskDO.getSysinfooid();//sysininfo 的oid
                String classifyoid = dockingTaskDO.getClassifyoid();
                //查询要推送的数据
                String btmoid = dockingTaskDO.getBtmoid();//数据btmid
                //表示是主数据
                CodeClassifyTemplateVO codeClassifyTemplateVO = mdmEngineServiceI.getUsedTemplateByClassifyOid(classifyoid);
                BaseResult<Map<String, String>> baseResult = mdmEngineServiceI.getDataByOid(btmoid, codeClassifyTemplateVO.getOid());
                List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.getAttributes();
                Map<String*/
/**英文名称**//*
, String*/
/**中文名称**//*
> attrIdNameMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t.getName(), (o1, o2) -> o2));
                Map<String, String> data = new HashMap<>();
                if (baseResult == null) {
                    JSONObject josni = redisService.getCacheObject(DOCKING_CACHE2_DELETE + btmoid);
                    data = (Map) josni;
                } else {
                    data = baseResult.getObj();
                }
                List<NodeProDTO> nodeProDTOS = new ArrayList<>();
                Map<String, String> finalData = data;
                attrIdNameMap.keySet().forEach(field -> {
                    String outName = attrIdNameMap.get(field);
                    if (finalData.containsKey(field)) {
                        String Value = finalData.get(field);
                        NodeProDTO nodeProDTO = new NodeProDTO();
                        nodeProDTO.setFiledName(field);
                        nodeProDTO.setOutname(outName);
                        nodeProDTO.setFiledValue(Value);
                        nodeProDTOS.add(nodeProDTO);
                    }
                });
                String[] classCodeLeves = dockingTaskDO.getClassifyid().split(",");
                NodeJosnDTO nodeJosnDTO = new NodeJosnDTO();
                NodedataDTO nodeDataDTO = new NodedataDTO();
                NodeObjectDTO nodeObjectDTO = new NodeObjectDTO();
                nodeObjectDTO.setCode(dockingTaskDO.getId());//设置编码
                nodeObjectDTO.setClassCode(classCodeLeves[0]);
                nodeObjectDTO.setStatus(data.get("lcstatus"));
                nodeObjectDTO.setLibrary(classCodeLeves[classCodeLeves.length - 1]);
                nodeObjectDTO.setPro(nodeProDTOS);
                List<NodeObjectDTO> nodeObjectDTOS = new ArrayList<>();
                nodeObjectDTOS.add(nodeObjectDTO);
                nodeDataDTO.setObject(nodeObjectDTOS);
                nodeJosnDTO.setData(nodeDataDTO);
                //查询推送接口参数
                SysIntInfoVO sysIntInfoVO = sysIntInfoServiceI.getObjectByOid(systeminfooid);
                String paramType = sysIntInfoVO.getParamtype();//xml/json
                if (paramType.equals(DATATYPE_JSON)) {
                    Object object = JSONObject.toJSON(nodeJosnDTO);
                    sendString = object.toString();
                } else {
                    //组织返回接口信息
                    XStream xStream = new XStream(new DomDriver());
                    xStream.processAnnotations(NodedataDTO.class);
                    xStream.autodetectAnnotations(true);
                    sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
                }
                //调用接口
                callInterface(sendString,sysIntInfoVO, dockingTaskDO, batchCBO);
            }catch (Throwable e){
                e.printStackTrace();
            }finally {
                //每一个task一个事物
                WebUtil.setPersistence(true);
                boService.persistenceBatch(batchCBO);
            }
        }
    }
    public void sendpushClsfForService(){
        initSysadmin();
        //查询哪些任务还没有执行完成
        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
        queryWrapper.addQueryMap("sendFlag",MdmDuckingConstant.SEND_FLAG_FALSE);
        queryWrapper.addQueryMap("btmId",DOCKING_DEFAULT_CLASSIFY.toUpperCase(Locale.ROOT));
        List<DockingTaskDO> dockingTaskDOS = dockingTaskDaoI.selectByWrapper(queryWrapper);
        sendpushClsfForService(dockingTaskDOS);
    }
    */
/***
     * 发送分类数据
     *//*
    private void sendpushClsfForService(List<DockingTaskDO> dockingTaskDOS){
        //每个task依次执行推送
        for (DockingTaskDO dockingTaskDO:dockingTaskDOS){
            //每个task一个事务,开启
            WebUtil.setPersistence(false);
            BatchCBO batchCBO = new BatchCBO();
            String paramString="";
            String sendString="";
            String backString="";
            //查询系统接口信息,ip method,dataType
            String systeminfooid = dockingTaskDO.getSysinfooid();//sysininfo 的oid
            try {
                //查询要推送的数据
                String btmoid = dockingTaskDO.getBtmoid();//数据btmid
                JsonRootDataDTO jsonRootDataDTO=new JsonRootDataDTO();
                CodeClassifyDO codeClassifyDO=codeClassifyDaoI.selectByPrimaryKey(btmoid);
                List<NodeClassifyDTO>nodeClassifyDTOList=new ArrayList<>();
                NodeClassifyDTO nodeClassifyDTO=new NodeClassifyDTO();
                nodeClassifyDTO.setClassCode(codeClassifyDO.getId());//分类代号
                nodeClassifyDTO.setDescription(codeClassifyDO.getDescription());//分类描述
                nodeClassifyDTO.setFullPathName(codeClassifyDO.getPath());//全路径
                nodeClassifyDTO.setLcStatus(codeClassifyDO.getLcStatus());//状态
              //  CodeClassifyDO parentClassDo=codeClassifyDaoI.selectByPrimaryKey(codeClassifyDO.getParentCodeClassifyOid());
                nodeClassifyDTO.setPid(codeClassifyDO.getParentCodeClassifyOid());//父id节点
                nodeClassifyDTO.setId(codeClassifyDO.getOid());//分类oid
                nodeClassifyDTO.setName(codeClassifyDO.getName());//分类名称
                nodeClassifyDTOList.add(nodeClassifyDTO);
                NodeLibraryDTO nodeLibraryDTO=new NodeLibraryDTO();
                CodeClassifyDO rootClassify=codeClassifyDaoI.getRootClassify(btmoid);
                nodeLibraryDTO.setClassify(nodeClassifyDTOList);
                nodeLibraryDTO.setId(rootClassify.getOid());
                nodeLibraryDTO.setName(rootClassify.getName());
                nodeLibraryDTO.setClassCode(rootClassify.getId());
                NodeDataDTO nodeDataDTO=new NodeDataDTO();
                nodeDataDTO.setLibrary(nodeLibraryDTO);
                jsonRootDataDTO.setData(nodeDataDTO);
                //查询推送接口参数
                SysIntInfoVO sysIntInfoVO = sysIntInfoServiceI.getObjectByOid(systeminfooid);
                String paramType = sysIntInfoVO.getParamtype();//xml/json
                if(paramType.equals(DATATYPE_JSON)){
                    Object object = JSONObject.toJSON(jsonRootDataDTO);
                    sendString = object.toString();
                }else{
                    //组织返回接口信息
                    XStream xStream = new XStream(new DomDriver());
                    xStream.processAnnotations(NodeDataDTO.class);
                    xStream.autodetectAnnotations(true);
                    sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
                }
                //调用接口
                callInterface(sendString,sysIntInfoVO,dockingTaskDO,batchCBO);
            }catch (Throwable e){
                e.printStackTrace();
            }finally {
                //每一个task一个事物
                WebUtil.setPersistence(true);
                boService.persistenceBatch(batchCBO);
            }
        }
    }
    */
/***
     * 调用接口
     * @param sysIntInfoVO
     * @throws Throwable
     *//*
    private void callInterface(String  sendString , SysIntInfoVO sysIntInfoVO,DockingTaskDO dockingTaskDO,BatchCBO batchCBO) throws  Throwable{
        String paramString = "";
        String backString = "";
        String msg="";
        String url = sysIntInfoVO.getRequesturl();//url
        List<ResultNodeObjectDTO> resultNodeObjectDTOS =new ArrayList<>();
        try {
            String type = sysIntInfoVO.getInterfacetype().toLowerCase(Locale.ROOT);//get/post/webserver/corba
            String paramType = sysIntInfoVO.getParamtype();//xml/json
            String returnType = sysIntInfoVO.getReturntype();//xml/json
            String requestmethod= sysIntInfoVO.getRequestmethod();
            String interfaceFunction = sysIntInfoVO.getInterfaceFunction();//主要是webservice的方法名
            String namespace = sysIntInfoVO.getNamespace();//namespace
            String soapaction = sysIntInfoVO.getSoapaction();//soapaction
            String targName = sysIntInfoVO.getTargName();//targName
            String cxfaxis = sysIntInfoVO.getCxfaxis();//webservice是cxf/axis
            //查询param
            List<SysIntParamDO> sysIntParamDOList = sysIntInfoServiceI.getParamsBySystemInfoOid(sysIntInfoVO.getOid());
            //查询header
            List<SysIntHeaderDO> sysIntHeaderDOList = sysIntInfoServiceI.getHeadersBySystemInfoOid(sysIntInfoVO.getOid());
            if(type.equals(URLTYPE_HTTP)) {
                if (requestmethod.equals(URLTYPE_GET)) {//GET请求
                    String sendurl = url + "?" + DATA_PARAM_NAME + "=" + sendString;
                    //拼接param
                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
                        sendurl = sendurl + "&" + sysIntParamDO.getParamkey() + "=" + sysIntParamDO.getParamvalue();
                    }
                    paramString = sendurl;
                    backString = HttpUtils.get(sendurl);
                } else if (requestmethod.equals(URLTYPE_POST)) {//POST请求
                    MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
                        params.add(sysIntParamDO.getParamkey(), sysIntParamDO.getParamvalue());
                    }
                    params.add(DATA_PARAM_NAME,sendString);
                    paramString = params.toString();
                    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
                    for (SysIntHeaderDO sysIntHeaderDO : sysIntHeaderDOList) {
                        headers.add(sysIntHeaderDO.getHeaderkey(), sysIntHeaderDO.getHeaderalue());
                    }
                    backString = HttpUtils.post(url, params, headers);
                }
                if(backString.startsWith("\"")){
                    backString=backString.substring(backString.indexOf("\"")+1);
                }
                if(backString.endsWith("\"")){
                    backString=backString.substring(0,backString.lastIndexOf("\""));
                }
                if(backString.contains("\n")){
                    String res="\n";
                    backString=  backString.replaceAll(res,"");
                }
                if(backString.contains("\\")){
                    String res="\\\\\"";
                    backString=  backString.replaceAll(res,"\"").trim();
                }
            }else if (type.equals(URLTYPE_WEBSERVICE)) {//webserver请求
                MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
                for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
                    params.add(sysIntParamDO.getParamkey(), sysIntParamDO.getParamvalue());
                }
                paramString = sendString;
                MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
                for (SysIntHeaderDO sysIntHeaderDO : sysIntHeaderDOList) {
                    headers.add(sysIntHeaderDO.getHeaderkey(), sysIntHeaderDO.getHeaderalue());
                }
                backString = WsErpClientUtil.sendMsg(url, namespace, soapaction, interfaceFunction, targName, sendString, 10000);
            } else {//corba接口
                //paramString=sendString;
                //  backString = jacorbClient.getBOFactoryService().sendCode(sendString);
            }
            ResultJsonDTO resultJsonDTO = new ResultJsonDTO();
            if(returnType.equals(DATATYPE_JSON)){
                resultJsonDTO =JSONObject.toJavaObject(JSONObject.parseObject(backString), ResultJsonDTO.class);
            }else {
                //组织返回接口信息
                XStream xStream = new XStream(new DomDriver());
                xStream.processAnnotations(ResultNodeDataDTO.class);
                xStream.autodetectAnnotations(true);
                ResultNodeDataDTO resultNodeDataDTO = (ResultNodeDataDTO) xStream.fromXML(backString);
                resultJsonDTO.setData(resultNodeDataDTO);
            }
            ResultNodeDataDTO resultNodeDataDTO=resultJsonDTO.getData();
            resultNodeObjectDTOS=resultNodeDataDTO.getObject();
        }catch (Throwable e){
            msg="调用接口失败:"+e;
            e.printStackTrace();
         //   throw  new Throwable("调用接口失败:"+e);
            ResultNodeObjectDTO   resultNodeObjectDTO=new ResultNodeObjectDTO();
            resultNodeObjectDTO.setErroid("1");
            resultNodeObjectDTO.setMsg(msg);
            resultNodeObjectDTO.setCode(sysIntInfoVO.getPushType().equalsIgnoreCase("2")?dockingTaskDO.getClassifyid():dockingTaskDO.getId());
            resultNodeObjectDTO.setOid(dockingTaskDO.getBtmoid());
            resultNodeObjectDTOS.add(resultNodeObjectDTO);
        }finally {
            boolean isSend = false;
            for (ResultNodeObjectDTO resultNodeObjectDTO:resultNodeObjectDTOS){
                String erroid = resultNodeObjectDTO.getErroid();
                msg = resultNodeObjectDTO.getMsg();
                if("0".equals(erroid)){
                    isSend = true;
                }else if("1".equals(erroid)){
                    isSend=false;
                }else{
                    isSend=false;
                }
                DockingLogeDO dockingLogeDO = new DockingLogeDO();
                String oid=redisService.getUUIDEveryDay();
                dockingLogeDO.setOid(oid);
                dockingLogeDO.setSystemcode(dockingTaskDO.getSystemcode());
                dockingLogeDO.setSystemname(dockingTaskDO.getSystemname());
                dockingLogeDO.setSystemoid(dockingTaskDO.getSystemoid());
                dockingLogeDO.setClassifyoid(dockingTaskDO.getClassifyoid());
                dockingLogeDO.setClassifyid(dockingTaskDO.getClassifyid());
                dockingLogeDO.setClassifyname(dockingTaskDO.getClassifyname());
                dockingLogeDO.setId(dockingTaskDO.getId());
                dockingLogeDO.setUniquecode(dockingTaskDO.getUniquecode());
                dockingLogeDO.setParamstring(paramString);
                dockingLogeDO.setReturnstring(backString);
                dockingLogeDO.setInterfacestatus(isSend?"true":"false");
                dockingLogeDO.setType(DATA_LOGE_OUT);
                dockingLogeDO.setMsg(msg);
                logger.error("集成推送数据,systemcode:"+dockingTaskDO.getSystemcode()+",systemname:"+dockingTaskDO.getSystemname()+",url:"+url+",param:"+paramString+",e:"+msg);
                BatchCBO dockingLogeDOBo = dockingLogeDaoI.insert(dockingLogeDO);
                batchCBO.copyFromOther(dockingLogeDOBo);
            }
            //全都接收成功的情况下,修改dockingtask sendflag为已发送
            if(isSend) {
                dockingTaskDO.setSendflag(MdmDuckingConstant.SEND_FLAG_TRUE);
                BatchCBO updateTask = dockingTaskDaoI.updateByPrimaryKey(dockingTaskDO);
                batchCBO.copyFromOther(updateTask);
            }
        }
    }
    public void initSysadmin(){
        SessionInfo sessionInfo = new SessionInfo();
        sessionInfo.setUserId("sysAdmin");
        sessionInfo.setUserName("系统管理员");
        sessionInfo.setIp(WebUtil.getLocalIp());
        sessionInfo.setUserOid("193C026F-7DB8-27B4-F383-4E8BE083FB07");
        sessionInfo.setUserSecret(UserSecretEnum.PRIVACY.getValue()+"");
        WebUtil.setSessionInfo(sessionInfo);
    }
    @Autowired
    private PlatformClientUtil platformClientUtil;
    */
/**
     * dockingdata根据oid修改sendflag
     * @param oid
     * @param sendflag
     * @return
     *//*
    public boolean updateDockingDatasSendFlag(String oid,String sendflag){
        boolean u=false;
        String sql = "update PLATFORMBTM_codedockingdata set sendFlag = '"+sendflag+"' where oid='"+oid+"'";
        try {
            u=platformClientUtil.getBOFactoryService().executeUpdateSql(sql);
        }catch (Exception e){
        }
        return u;
    }
    @Override
    public R sendData(String oids) {
        return null;
    }
}
*/
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -5,8 +5,6 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.corba.se.impl.orbutil.ObjectUtility;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
import com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant;
@@ -19,13 +17,11 @@
import com.vci.ubcs.code.mapper.CodeWupinMapper;
import com.vci.ubcs.code.mapper.CommonsMapper;
import com.vci.ubcs.code.service.*;
import com.vci.ubcs.code.util.ClientBusinessObject;
import com.vci.ubcs.code.vo.CodeKeyAttrRepeatVO;
import com.vci.ubcs.code.vo.pagemodel.UITableFieldVO;
import com.vci.ubcs.code.vo.pagemodel.UITablePageVO;
import com.vci.ubcs.code.vo.pagemodel.*;
import com.vci.ubcs.omd.constant.BtmTypeLcStatusConstant;
import com.vci.ubcs.omd.entity.BtmTypeAttribute;
import com.vci.ubcs.omd.cache.EnumCache;
import com.vci.ubcs.omd.feign.*;
import com.vci.ubcs.omd.utils.VciOmdUtil;
@@ -38,7 +34,6 @@
import com.vci.ubcs.starter.revision.model.TreeQueryObject;
import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
import com.vci.ubcs.starter.util.UBCSSqlKeyword;
import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
import com.vci.ubcs.starter.web.constant.RegExpConstant;
import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
@@ -55,15 +50,12 @@
import com.vci.ubcs.system.user.feign.IUserClient;
import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
import oracle.sql.TIMESTAMP;
import org.apache.commons.collections4.MapUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.launch.constant.AppConstant;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringPool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache;
@@ -73,15 +65,10 @@
import javax.annotation.Resource;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
@@ -3466,6 +3453,7 @@
        return revisionModelUtil.doList2Trees(codeClassifies, treeWrapperOptions, null);
    }
    private String getTableName(String refertype){
        if ("codeclassify".equals(refertype)){
            return "pl_code_classify";