ludc
2024-03-07 d97c5223b68df0153cef2180b9256d6916c5414d
集成相关更改
已修改4个文件
203 ■■■■ 文件已修改
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/util/gennerAttrMapUtil.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
@@ -78,6 +78,21 @@
        return null;
    }
    /**
     * 从map中获取值,并且可以忽略大小写
     * @param map
     * @param key
     * @return
     */
    public static String getMapStrValueIgnoreCase(Map<String, String> map,String key){
        for (Map.Entry<String, String> entry : map.entrySet()) {
            if (entry.getKey().equalsIgnoreCase(key)) {
                return entry.getValue();
            }
        }
        return null;
    }
    public static String getPk() {
        return String.valueOf(getPKLong(1,1));
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java
@@ -908,9 +908,8 @@
                DockingSystemConfig dockingSystemConfig = dockingSystemConfigService.getById(systeminfooid);
                String paramType = dockingSystemConfig.getParamType();//xml/json
                if(paramType.equals(DATATYPE_JSON)){
                    // Object object = JSONObject.toJSON(jsonRootDataDTO);
                    // sendString = object.toString();
                    sendString = jsonRootDataDTO;
                     Object object = JSONObject.toJSON(jsonRootDataDTO);
                     sendString = object;
                }else{
                    //组织返回接口信息
                    XStream xStream = new XStream(new DomDriver());
@@ -936,7 +935,7 @@
        for (DockingTask dockingTask:dockingTaskS){
            //每个task一个事务,开启
            String paramString="";
            String sendObject="";
            Object sendString="";
            String backString="";
            try {
                //查询系统接口信息,ip method,dataType
@@ -1010,16 +1009,17 @@
                String paramType = dockingSystemConfig.getParamType();//xml/json
                if (paramType.equals(DATATYPE_JSON)) {
                    Object object = JSONObject.toJSON(nodeJosnDTO);
                    sendObject = object.toString();
                    //sendString = object.toString();
                    sendString = object;
                } else {
                    //组织返回接口信息
                    XStream xStream = new XStream(new DomDriver());
                    xStream.processAnnotations(NodedataDTO.class);
                    xStream.autodetectAnnotations(true);
                    sendObject = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
                    sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
                }
                //调用接口
                callInterface(sendObject,dockingSystemConfig, dockingTask,"pushData");
                callInterface(sendString,dockingSystemConfig, dockingTask,"pushData");
            }catch (Throwable e){
                e.printStackTrace();
            }finally {
@@ -1037,7 +1037,7 @@
    private void callInterface(Object sendObject, DockingSystemConfig dockingSystemConfig,DockingTask dockingTask,String operation) throws  Throwable{
        String paramString = "";
        String backString = "";
        String sendString = dockingSystemConfig.getContentType().equals(DATATYPE_JSON) ? JSONObject.toJSON(sendObject).toString():sendObject.toString();
        String sendString = sendObject.toString();
        String msg= "" ;
        String url = dockingSystemConfig.getRequestUrl();//url
        List<ResultNodeObjectDTO> resultNodeObjectDTOS =new ArrayList<>();
@@ -1079,160 +1079,7 @@
                    for (DockingSysIntHeader dockingSysIntHeader : dockingSysIntHeaderList) {
                        headers.add(dockingSysIntHeader.getHeaderKey(), dockingSysIntHeader.getHeaderValue());
                    }
                    backString = HttpUtils.postByMediaType(url, params, headers,new MediaType(dockingSystemConfig.getContentType()));
                }
                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 (DockingSysIntParam dockingSysIntParam : dockingSysIntParamList) {
                    params.add(dockingSysIntParam.getParamKey(), dockingSysIntParam.getParamValue());
                }
                paramString = sendString;
                MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
                for (DockingSysIntHeader dockingSysIntHeader : dockingSysIntHeaderList) {
                    headers.add(dockingSysIntHeader.getHeaderKey(), dockingSysIntHeader.getHeaderValue());
                }
                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.getMessage();
            e.printStackTrace();
            log.error("调用接口失败:"+e);
            //   throw  new Throwable("调用接口失败:"+e);
            ResultNodeObjectDTO   resultNodeObjectDTO=new ResultNodeObjectDTO();
            resultNodeObjectDTO.setErroid("1");
            resultNodeObjectDTO.setMsg(msg);
            resultNodeObjectDTO.setCode(dockingSystemConfig.getPushType().equalsIgnoreCase("2")?dockingTask.getClassifyId():dockingTask.getId());
            resultNodeObjectDTO.setItemid(dockingTask.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;
                }
                DockingLog dockingLogeDO = new DockingLog();
                String oid=VciBaseUtil.getPk();
                dockingLogeDO.setOid(oid);
                dockingLogeDO.setSystemCode(dockingTask.getSystemCode());
                dockingLogeDO.setSystemName(dockingTask.getSystemName());
                dockingLogeDO.setSystemOid(dockingTask.getSystemOid());
                dockingLogeDO.setClassifyOid(dockingTask.getClassifyOid());
                dockingLogeDO.setClassifyId(dockingTask.getClassifyId());
                dockingLogeDO.setClassifyName(dockingTask.getClassifyName());
                dockingLogeDO.setCreateTime(new Date());
                dockingLogeDO.setId(dockingTask.getId());
                dockingLogeDO.setUniqueCode(dockingTask.getUniqueCode());
                dockingLogeDO.setParamString(paramString);
                dockingLogeDO.setReturnString(backString);
                dockingLogeDO.setInterfaceStatus(isSend?"true":"false");
                dockingLogeDO.setType(operation);
                dockingLogeDO.setMsg(msg);
                log.error("集成推送数据,systemcode:"+dockingTask.getSystemCode()+",systemname:"+dockingTask.getSystemName()+",url:"+url+",param:"+paramString+",e:"+msg);
                dockingLogeService.save(dockingLogeDO);
            }
            //全都接收成功的情况下,修改dockingtask sendflag为已发送
            if(isSend) {
                dockingTask.setSendFlag(MdmDuckingConstant.SEND_FLAG_TRUE);
                dockingTask.setLastModifyTime(new Date());
                dockingTaskService.updateById(dockingTask);
            }
        }
    }
    /**
     * 调用接口,传参为JSON时传object类型
     * @param sendObject
     * @param dockingSystemConfig
     * @param dockingTask
     * @param operation
     * @throws Throwable
     */
    private void callInterfaceByContentType(Object sendObject, DockingSystemConfig dockingSystemConfig,DockingTask dockingTask,String operation,String sendType) throws  Throwable{
        String paramString = "";
        String sendString = sendType.equals(DATATYPE_JSON) ? JSONObject.toJSON(sendObject).toString():sendObject.toString();
        String backString = "";
        String msg="";
        String url = dockingSystemConfig.getRequestUrl();//url
        List<ResultNodeObjectDTO> resultNodeObjectDTOS =new ArrayList<>();
        try {
            boolean usedFlag= dockingSystemConfig.getUsedFlag().equals("true")?true:false;
            if(!usedFlag){
                throw  new Throwable("接口已经停用!");
            }
            String type = dockingSystemConfig.getInterfaceType().toLowerCase(Locale.ROOT);//get/post/webserver/corba
            String paramType = dockingSystemConfig.getParamType();//xml/json
            String returnType = dockingSystemConfig.getReturnType();//xml/json
            String requestmethod= dockingSystemConfig.getRequestMethod();
            String interfaceFunction = dockingSystemConfig.getInterfaceFunction();//主要是webservice的方法名
            String namespace = dockingSystemConfig.getNamespace();//namespace
            String soapaction = dockingSystemConfig.getSoapAction();//soapaction
            String targName = dockingSystemConfig.getTargetName();//targName
            String cxfaxis = dockingSystemConfig.getCxfAxis();//webservice是cxf/axis
            //查询param
            List<DockingSysIntParam> dockingSysIntParamList = dockingSysIntParamService.list(Wrappers.<DockingSysIntParam>query().lambda().eq(DockingSysIntParam::getInfoOid,dockingSystemConfig.getOid()));
            //查询header
            List<DockingSysIntHeader> dockingSysIntHeaderList = dockingSysIntHeaderService.list(Wrappers.<DockingSysIntHeader>query().lambda().eq(DockingSysIntHeader::getInfoOid,dockingSystemConfig.getOid()));
            if(type.equals(URLTYPE_HTTP)) {
                if (requestmethod.equals(URLTYPE_GET)) {//GET请求
                    String sendurl = url + "?" + DATA_PARAM_NAME + "=" + sendString;
                    //拼接param
                    for (DockingSysIntParam dockingSysIntParam : dockingSysIntParamList) {
                        sendurl = sendurl + "&" + dockingSysIntParam.getParamKey() + "=" + dockingSysIntParam.getParamValue();
                    }
                    paramString = sendurl;
                    backString = HttpUtils.get(sendurl);
                } else if (requestmethod.equals(URLTYPE_POST)) {//POST请求
                    MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
                    for (DockingSysIntParam dockingSysIntParam : dockingSysIntParamList) {
                        params.add(dockingSysIntParam.getParamKey(), dockingSysIntParam.getParamValue());
                    }
                    params.add(DATA_PARAM_NAME,sendObject);
                    paramString = params.toString();
                    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
                    for (DockingSysIntHeader dockingSysIntHeader : dockingSysIntHeaderList) {
                        headers.add(dockingSysIntHeader.getHeaderKey(), dockingSysIntHeader.getHeaderValue());
                    }
                    // TODO: 2024-02-25改,为了满足HR以及其他情况下根据Content-type的类型来发请求,并且param中的json是最后的时候发送请求再转
                    backString = HttpUtils.postByMediaType(url, params, headers, MediaType.APPLICATION_FORM_URLENCODED);
                    backString = HttpUtils.postByMediaType(url, params, headers,MediaType.valueOf(dockingSystemConfig.getContentType()));
                }
                if(backString.startsWith("\"")){
                    backString=backString.substring(backString.indexOf("\"")+1);
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -2355,7 +2355,6 @@
        return clientBusinessObjectList;
    }
    private List<CodeOrderSecDTO> getRuleCodeOrderSecDTOsBZ(CodeRuleVO ruleVO,CodeClassifyFullInfoBO classifyFullInfo){
        List<CodeBasicSecVO>  codeBasicSecVOS= ruleVO.getSecVOList();
        List<CodeOrderSecDTO> codeOrderSecDTOList=new ArrayList<>();
@@ -2367,7 +2366,6 @@
        }
        return codeOrderSecDTOList;
    }
    /***
     * 根据传入的参数信息校验码段规则
@@ -2462,7 +2460,9 @@
                e.printStackTrace();
                throw new Throwable("集成系统标识为:【" + systemId + "】,分类库为:【" + libray + "】的集成属性配置文件读取失败");
            }
            String path = stringStringMap.get(systemId);
            // String path = stringStringMap.get(systemId);
            // 忽略key大小写,获取配置的映射文件路径
            String path = VciBaseUtil.getMapStrValueIgnoreCase(stringStringMap,systemId);
            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 + "从配置文件中找对应属性映射配置");
@@ -2587,7 +2587,9 @@
                e.printStackTrace();
                throw new Throwable("集成系统标识为:【" + systemId + "】,分类库为:【" + libray + "】的集成属性配置文件读取失败");
            }
            String path = stringStringMap.get(systemId);
            // String path = stringStringMap.get(systemId);
            // 忽略key大小写,获取配置的映射文件路径
            String path = VciBaseUtil.getMapStrValueIgnoreCase(stringStringMap,systemId);
            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 + "从配置文件中找对应属性映射配置");
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/util/gennerAttrMapUtil.java
@@ -6,9 +6,11 @@
import com.vci.ubcs.code.vo.webserviceModel.attrmap.LibraryDO;
import com.vci.ubcs.code.webService.config.AttributeMapConfig;
import com.vci.ubcs.starter.util.LocalFileUtil;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Locale;
import java.util.Map;
@Slf4j
@@ -34,8 +36,9 @@
            throw new Throwable("系统标识为空");
        }
        LibraryDO rootDataVO=new LibraryDO();
        if(system_attrmap.containsKey(systemId)){
           String path=system_attrmap.get(systemId);
        if(system_attrmap.containsKey(systemId.toLowerCase(Locale.ROOT)) || system_attrmap.containsKey(systemId.toUpperCase(Locale.ROOT))){
           //String path = system_attrmap.get(systemId);
            String path = VciBaseUtil.getMapStrValueIgnoreCase(system_attrmap,systemId);
           log.info("系统标识->"+systemId+";文件属性配置文件路径->"+path);
           String attributeMapData=  LocalFileUtil.readContentForFile(path);
           log.info("读取后的属性映射内容"+attributeMapData);