package com.vci.ubcs.code.service.impl; import com.alibaba.cloud.commons.lang.StringUtils; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO; import com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant; import com.vci.ubcs.code.constant.MdmBtmTypeConstant; import com.vci.ubcs.code.dto.DockingSysIntHeaderDTO; import com.vci.ubcs.code.dto.DockingSystemConfigDTO; import com.vci.ubcs.code.dto.DockingSysIntParamDTO; import com.vci.ubcs.code.dto.UpdateSysInfoStatusDTO; import com.vci.ubcs.code.dto.datapush.classify.JsonRootDataDTO; import com.vci.ubcs.code.dto.datapush.classify.NodeClassifyDTO; import com.vci.ubcs.code.dto.datapush.classify.NodeDataDTO; import com.vci.ubcs.code.dto.datapush.classify.NodeLibraryDTO; import com.vci.ubcs.code.dto.datapush.result.ResultJsonDTO; import com.vci.ubcs.code.dto.datapush.result.ResultNodeDataDTO; import com.vci.ubcs.code.dto.datapush.result.ResultNodeObjectDTO; import com.vci.ubcs.code.entity.*; import com.vci.ubcs.code.enumpack.*; import com.vci.ubcs.code.mapper.*; import com.vci.ubcs.code.service.*; import com.vci.ubcs.code.util.HttpUtils; import com.vci.ubcs.code.util.WsErpClientUtil; import com.vci.ubcs.code.vo.pagemodel.*; import com.vci.ubcs.code.wrapper.DockingSysIntHeaderWrapper; import com.vci.ubcs.code.wrapper.DockingSysIntParamWrapper; import com.vci.ubcs.code.wrapper.DockingSystemConfigWrapper; import com.vci.ubcs.starter.exception.VciBaseException; import com.vci.ubcs.starter.revision.service.RevisionModelUtil; import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil; import com.vci.ubcs.starter.web.constant.QueryOptionConstant; import com.vci.ubcs.starter.web.pagemodel.PageHelper; import com.vci.ubcs.starter.web.util.BeanUtilForVCI; import com.vci.ubcs.starter.web.util.VciBaseUtil; import com.vci.ubcs.starter.web.util.VciDateUtil; import lombok.extern.slf4j.Slf4j; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; 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.ubcs.code.constant.MdmDuckingConstant.*; import static com.vci.ubcs.starter.util.MdmBtmTypeConstant.CODE_CLASSIFY_OID_FIELD; /*** * 系统接口管理-接口配置服务 * @author xiejun * @date 2023-06-01 */ @Slf4j @Service public class DockingSystemConfigServiceImpl extends ServiceImpl implements IDockingSystemConfigService{ @Value("${dataSyncPush.dataParamName:xmlData}") public String DATA_PARAM_NAME; /*** * 集成系统管理服务 */ @Autowired(required = false) private DockingSystemConfigMapper dockingSystemConfigMapper; /*** * 集成接口-集成接口管理参数服务 */ @Autowired(required = false) private IDockingSysIntParamService dockingSysIntParamService; /*** * 集成接口-集成接口管理参数服务 */ @Autowired(required = false) private IDockingSysIntHeaderService dockingSysIntHeaderService; /*** * 集成接口-集成系统服务 */ @Autowired(required = false) private DockingSystemMapper dockingSystemMapper; // /*** // * 任务生成服务 // */ // @Resource // private IDockingTaskService dockingTaskService; /** * 主数据引擎的服务 */ @Resource private MdmEngineService engineService; /** * 主题库分类的服务 */ @Resource private ICodeClassifyService classifyService; /** * 对象的操作 */ @Autowired private RevisionModelUtil revisionModelUtil; /** * 通用查询 */ @Resource private CommonsMapper commonsMapper; /** * 日志文件服务 */ @Resource private IDockingLogeService dockingLogeService; @Override public IPage page(DockingSystemConfig DockingSystemConfig, Query query) { IPage pages = page(Condition.getPage(query), Condition.getQueryWrapper(DockingSystemConfig)); List dockingSystemConfigList= pages.getRecords(); dockingSystemConfigList.stream().forEach(dockingSystemConfig -> { dockingSystemConfig.setDataFlowTypeText(SysIntegrationDataFlowTypeEnum.getTextByValue(dockingSystemConfig.getDataFlowType())); dockingSystemConfig.setAuthorityTypeText(SysIntegrationAuthorityTypeEnum.getTextByValue(dockingSystemConfig.getAuthorityType())); dockingSystemConfig.setParamTypeText(SysIntegrationParamAndReturnTypeEnum.getTextByValue(dockingSystemConfig.getParamType())); dockingSystemConfig.setReturnTypeText(SysIntegrationParamAndReturnTypeEnum.getTextByValue(dockingSystemConfig.getReturnType())); dockingSystemConfig.setInterfaceTypeText(SysIntegrationRequestTypeEnum.getValueByText(dockingSystemConfig.getInterfaceType())); dockingSystemConfig.setPushTypeText(sysIntegrationPushTypeEnum.getTextByValue(dockingSystemConfig.getPushType())); dockingSystemConfig.setRequestMethodText(SysIntegrationRequestMethodEnum.getTextByValue(dockingSystemConfig.getRequestMethod())); //dockingSystemConfig.setSysBaseName(""); // dockingSystemConfig.setSourceSysName(""); //dockingSystemConfig.setTargetSysName(""); }); return DockingSystemConfigWrapper.build().pageVO(pages); } /** * 增加系统集成的接口管理信息 * @param dockingSystemConfigDTO 系统集成的系统信息数据传输对象 * @return 执行结果,success为true表示成功,msg是失败的提示信息,obj是添加完成后的显示对象 */ @Transactional(rollbackFor = Exception.class) @Override public boolean addSave(DockingSystemConfigDTO dockingSystemConfigDTO) { log.info(" 增加系统集成的接口管理信息:"+dockingSystemConfigDTO.toString()); VciBaseUtil.alertNotNull(dockingSystemConfigDTO, "需要添加的数据对象"); checkColumnNotNull(dockingSystemConfigDTO); String sourcesystemoid = dockingSystemConfigDTO.getSourceSystemOid(); DockingSystem dockingSystem = dockingSystemMapper.selectById(sourcesystemoid); dockingSystemConfigDTO.setSysBaseOid(sourcesystemoid); dockingSystemConfigDTO.setSysBaseId(dockingSystem.getId()); dockingSystemConfigDTO.setSysBaseName(dockingSystem.getName()); dockingSystemConfigDTO.setUsedFlag("true");//设置默认启用状态 //将DTO转换为DO DockingSystemConfig dockingSystemConfig = new DockingSystemConfig(); revisionModelUtil.copyFromDTOIgnore(dockingSystemConfigDTO,dockingSystemConfig); List sysIntParamDTOList= dockingSystemConfigDTO.getSysIntParamDTOS(); List sysIntParamList=new ArrayList<>(); if(!CollectionUtils.isEmpty(sysIntParamDTOList)) { sysIntParamDTOList.stream().forEach(sysIntParamDTO -> { DockingSysIntParam sysIntParamDO = new DockingSysIntParam(); sysIntParamDTO.setInfoOid(dockingSystemConfigDTO.getOid()); BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntParamDTO, sysIntParamDO); DefaultAttrAssimtUtil.addDefaultAttrAssimt(sysIntParamDO,MdmBtmTypeConstant.SYS_INT_PARAMTERY); sysIntParamList.add(sysIntParamDO); }); } List sysIntHeaderDTOs= dockingSystemConfigDTO.getSysIntHeaderDTOS(); List sysIntHeaderList = new ArrayList<>(); if(!CollectionUtils.isEmpty(sysIntHeaderDTOs)) { sysIntHeaderDTOs.stream().forEach(sysIntHeaderDTO -> { DockingSysIntHeader dockingSysIntHeader = new DockingSysIntHeader(); sysIntHeaderDTO.setInfoOid(dockingSystemConfigDTO.getOid()); BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntHeaderDTO, dockingSysIntHeader); DefaultAttrAssimtUtil.addDefaultAttrAssimt(dockingSysIntHeader,MdmBtmTypeConstant.SYS_INT_HEADER); sysIntHeaderList.add(dockingSysIntHeader); }); } dockingSysIntParamService.saveBatch(sysIntParamList); dockingSysIntHeaderService.saveBatch(sysIntHeaderList); DefaultAttrAssimtUtil.addDefaultAttrAssimt(dockingSystemConfig,MdmBtmTypeConstant.SYS_INT_INFO); dockingSystemConfigMapper.insert(dockingSystemConfig); return true; } /** * 修改 系统集成的接口管理信息 * @param dockingSystemConfigDTO 系统集成的系统信息数据传输对象 * @return 执行结果,success为true表示成功,msg是失败的提示信息,obj是添加完成后的显示对象 */ @Transactional(rollbackFor = Exception.class) @Override public boolean editSave(DockingSystemConfigDTO dockingSystemConfigDTO) { VciBaseUtil.alertNotNull(dockingSystemConfigDTO,"数据对象",dockingSystemConfigDTO.getOid(),"系统集成基础信息主键"); String sourcesystemoid = dockingSystemConfigDTO.getSourceSystemOid();//.getSourcesystemoid(); DockingSystem dockingSystem = dockingSystemMapper.selectById(sourcesystemoid); dockingSystemConfigDTO.setSysBaseOid(sourcesystemoid); dockingSystemConfigDTO.setSysBaseId(dockingSystem.getId()); dockingSystemConfigDTO.setBtmname(dockingSystem.getName()); //将DTO转换为DO DockingSystemConfig dockingSystemConfig = dockingSystemConfigMapper.selectById(dockingSystemConfigDTO.getOid()); revisionModelUtil.copyFromDTOIgnore(dockingSystemConfigDTO,dockingSystemConfig); String sysInfoOid=dockingSystemConfigDTO.getOid(); List dockingSysIntParamDTOS= dockingSystemConfigDTO.getSysIntParamDTOS(); List dockingSysIntParamList=new ArrayList<>(); if(!CollectionUtils.isEmpty(dockingSysIntParamDTOS)) { dockingSysIntParamDTOS.stream().forEach(dockingSysIntParamDTO -> { DockingSysIntParam dockingSysIntParam = new DockingSysIntParam(); BeanUtilForVCI.copyPropertiesIgnoreCase(dockingSysIntParamDTO, dockingSysIntParam); dockingSysIntParamList.add(dockingSysIntParam); }); } List dockingSysIntHeaderDTOS= dockingSystemConfigDTO.getSysIntHeaderDTOS(); List dockingSysIntHeaderList = new ArrayList<>(); if(!CollectionUtils.isEmpty(dockingSysIntHeaderDTOS)) { dockingSysIntHeaderDTOS.stream().forEach(dockingSysIntHeaderDTO -> { DockingSysIntHeader dockingSysIntHeader = new DockingSysIntHeader(); BeanUtilForVCI.copyPropertiesIgnoreCase(dockingSysIntHeaderDTO, dockingSysIntHeader); dockingSysIntHeaderList.add(dockingSysIntHeader); }); } //批量处理保存header对象 if(!CollectionUtils.isEmpty(dockingSysIntHeaderList)) { List idList=new ArrayList<>(); List headers_old =this.dockingSysIntHeaderService.list(Wrappers.query().lambda().eq(DockingSysIntHeader::getInfoOid,sysInfoOid));; for (DockingSysIntHeader sysIntHeader:headers_old){ sysIntHeader.setUsedFlag(FLAG_FAIL); idList.add(sysIntHeader.getOid()); } if(idList.size()!=0){ boolean res=dockingSysIntHeaderService.removeBatchByIds(idList); } //再新增headers for(DockingSysIntHeader sysIntHeader:dockingSysIntHeaderList){ sysIntHeader.setUsedFlag(FLAG_TRUE); sysIntHeader.setInfoOid(dockingSystemConfig.getOid()); } boolean res= dockingSysIntHeaderService.saveBatch(dockingSysIntHeaderList); } //批量处理保存Param对象 if(!CollectionUtils.isEmpty(dockingSysIntParamList)) { //先删除params_old List idList=new ArrayList<>(); List params_old =this.dockingSysIntParamService.list(Wrappers.query().lambda().eq(DockingSysIntParam::getInfoOid,sysInfoOid)); for (DockingSysIntParam sysIntParamDO:params_old){ sysIntParamDO.setUsedFlag(FLAG_FAIL); idList.add(sysIntParamDO.getOid()); } if(idList.size()!=0){ boolean res= dockingSysIntParamService.removeBatchByIds(idList); } //再新增params for(DockingSysIntParam sysIntParamDOi:dockingSysIntParamList){ sysIntParamDOi.setUsedFlag(FLAG_TRUE); sysIntParamDOi.setInfoOid(dockingSystemConfig.getOid()); } dockingSysIntParamService.saveBatch(dockingSysIntParamList); } this.dockingSystemConfigMapper.updateById(dockingSystemConfig); //return changeoDckingSystemEntityVOs(dockingSystemConfig,dockingSysIntHeaderList,dockingSysIntParamList); return true; } /*** * 更新接口配置信息状态 * @param sysInfoStatusDTO * @return */ @Override public R updateStatus(UpdateSysInfoStatusDTO sysInfoStatusDTO) { VciBaseUtil.alertNotNull(sysInfoStatusDTO.getOid(),"数据对象",sysInfoStatusDTO.getOid(),"系统集成基础信息主键"); DockingSystemConfig dockingSystemConfig = this.dockingSystemConfigMapper.selectById(sysInfoStatusDTO.getOid()); try { dockingSystemConfig.setTs(VciDateUtil.str2Date(sysInfoStatusDTO.getTs(), VciDateUtil.DateTimeFormat)); } catch (Exception e) { e.printStackTrace(); } if(sysInfoStatusDTO.getUpdate().equals("disable")) { dockingSystemConfig.setUsedFlag("false"); }else{ dockingSystemConfig.setUsedFlag("true"); } dockingSystemConfigMapper.updateById(dockingSystemConfig); return R.status(true); } /*** * 手动同步接口,只有推送的才会 * @param dockingSystemConfigDTO * @return * @throws VciBaseException */ @Transactional(rollbackFor = Exception.class) @Override public R pushData(DockingSystemConfigDTO dockingSystemConfigDTO) throws VciBaseException { VciBaseUtil.alertNotNull(dockingSystemConfigDTO.getOid(),"数据对象",dockingSystemConfigDTO.getOid(),"系统集成配置信息主键"); if(dockingSystemConfigDTO.getDataFlowType().equals(SysIntegrationDataFlowTypeEnum.ACCEPT.getValue())){ throw new VciBaseException("你所选择集成配置信息不属于推送类型的接口配置!"); } boolean issuccess=false; String type="数据推送"; if(dockingSystemConfigDTO.getPushType().equalsIgnoreCase("1")){//推送数据 pushDockingTasks(dockingSystemConfigDTO); }else if(dockingSystemConfigDTO.getPushType().equalsIgnoreCase("2")){//推送分类 issuccess= pushClsfDatas(dockingSystemConfigDTO); type="分类推送"; } return issuccess?R.success(type+"成功!"):R.fail(type+"失败!"); } /** * * @param dockingSystemConfig * @param dockingSysIntHeaderList * @param dockingSysIntParamList * @return */ private DockingSystemConfigVO changeoDckingSystemEntityVOs(DockingSystemConfig dockingSystemConfig , List dockingSysIntHeaderList , List dockingSysIntParamList) { DockingSystemConfigVO vo = new DockingSystemConfigVO(); if(dockingSystemConfig != null){ BeanUtilForVCI.copyPropertiesIgnoreCase(dockingSystemConfig,vo); //如果有lcstatus的类的话 if(!CollectionUtils.isEmpty(dockingSysIntParamList)) { List dockingSysIntParamVOList = DockingSysIntParamWrapper.build().entityVOs(dockingSysIntParamList); vo.setSysIntParamVOs(dockingSysIntParamVOList); } if(!CollectionUtils.isEmpty(dockingSysIntHeaderList)){ List dockingSysIntHeaderVOList= DockingSysIntHeaderWrapper.build().entityVOs(dockingSysIntHeaderList); vo.setSysIntHeaderVOs(dockingSysIntHeaderVOList); } } return vo; } @Override public boolean deleteDataById(String oids) { return false; } /** * 系统集成接口基础信息Null字段检验 * @param dockingSystemConfigDTO 系统集成基础信息数据传输对象 * @throws VciBaseException 参数为空,唯一项,必输项不通过时会抛出异常 */ private void checkColumnNotNull(DockingSystemConfigDTO dockingSystemConfigDTO) throws VciBaseException { if (SysIntegrationRequestTypeEnum.HTTP.getValue().equals(dockingSystemConfigDTO.getInterfaceType())){ VciBaseUtil.alertNotNull(dockingSystemConfigDTO.getRequestUrl(),"HTTP接口的请求地址",dockingSystemConfigDTO.getRequestMethod(),"HTTP接口的请求方式"); } if (SysIntegrationRequestTypeEnum.WEB_SERVICE.getValue().equals(dockingSystemConfigDTO.getInterfaceType())){ VciBaseUtil.alertNotNull(dockingSystemConfigDTO.getInterfaceFunction(),"WebService的接口函数"); } if (SysIntegrationRequestTypeEnum.CLASSPATH.getValue().equals(dockingSystemConfigDTO.getInterfaceType())){ VciBaseUtil.alertNotNull(dockingSystemConfigDTO.getClassPath(),"类路径"); } } private R pushDockingTasks(DockingSystemConfigDTO dockingSystemConfigDTO) { String msg="数据推送到定时任务成功!"; try { DockingSystemConfig dockingSystemConfig =dockingSystemConfigMapper.selectById(dockingSystemConfigDTO.getOid()); String codeClassifyOid = dockingSystemConfig.getClassifyOid(); CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyOid); CodeClassifyVO topClassifyVO = classifyService.getTopClassifyVO(codeClassifyOid); String btmTypeId = topClassifyVO.getBtmTypeId(); if (StringUtils.isBlank(btmTypeId)) { return R.fail("这个分类所属顶层分类没有添加业务类型"); } List codeClassifyIdPathVOS = classifyService.listChildrenClassify(topClassifyVO.getOid(), true, "id", false); List codeClassifynamePathVOS = classifyService.listChildrenClassify(topClassifyVO.getOid(), true, "name", false); Map clsfOidIdMap = codeClassifyIdPathVOS.stream().collect(Collectors.toMap(s -> s.getOid(), t -> reverseOrderByList(t.getPath(), topClassifyVO, 1).toLowerCase(Locale.ROOT), (o1, o2) -> o2)); Map clsfOidNameMap = codeClassifynamePathVOS.stream().collect(Collectors.toMap(s -> s.getOid(), t -> reverseOrderByList(t.getPath(), topClassifyVO, 2).toLowerCase(Locale.ROOT), (o1, o2) -> o2)); PageHelper pageHelper = new PageHelper(); pageHelper.setPage(1); pageHelper.setLimit(1000000); pageHelper.setStart(0); HashMap conditionMap = new HashMap<>(); if (!classifyService.checkHasChild(codeClassifyOid)) { conditionMap.put(CODE_CLASSIFY_OID_FIELD, codeClassifyOid); } else { conditionMap.put(CODE_CLASSIFY_OID_FIELD, QueryOptionConstant.IN + "(select oid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " where lcstatus='" + FrameWorkDefaultValueConstant.FRAMEWORK_DATA_ENABLED + "' start with parentCodeClassifyOid = '" + codeClassifyOid + "' CONNECT BY PRIOR OID = parentCodeClassifyOid )"); } conditionMap.put("islastr", "1"); conditionMap.put("islastv", "1"); List lcstatusList = new ArrayList<>(Arrays.asList(new String[]{"TakeBack", "Released", "Disabled"})); conditionMap.put("lcstatus", QueryOptionConstant.IN + VciBaseUtil.toInSql(lcstatusList.toArray(new String[0]))); CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(btmTypeId, templateVO, conditionMap, pageHelper); List> maps = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlHasPage()); List dockingTaskDO_insert = new ArrayList<>(); if (!CollectionUtils.isEmpty(maps)) { maps.stream().forEach(map -> { String btmoid = map.get("oid".toUpperCase(Locale.ROOT)) == null ? "" : map.get("oid".toUpperCase(Locale.ROOT)).toString();//数据oid String sendtype = map.get("lcstatus".toUpperCase(Locale.ROOT)) == null ? "" : map.get("lcstatus".toUpperCase(Locale.ROOT)).toString();//数据推送类型 String id = map.get("id".toUpperCase(Locale.ROOT)) == null ? "" : map.get("id".toUpperCase(Locale.ROOT)).toString();//编码 String btmid = topClassifyVO.getBtmTypeId();//数据业务类型 String classifyoid = map.get("codeclsfid".toUpperCase(Locale.ROOT)) == null ? "" : map.get("codeclsfid".toUpperCase(Locale.ROOT)).toString();//数据所在的分类id String date2Str = VciDateUtil.date2Str(new Date(), VciDateUtil.DateTimeFormatStr); DockingTask dockingTaskDO = new DockingTask(); dockingTaskDO.setOid(date2Str +"_"+id); dockingTaskDO.setSendFlag(SEND_FLAG_FALSE); dockingTaskDO.setId(id);//编码 dockingTaskDO.setUniqueCode(""); dockingTaskDO.setBtmOid(btmoid);//数据oid dockingTaskDO.setBtmId(btmid);//数据业务类型id if (clsfOidIdMap.containsKey(classifyoid)) { String classifyid = clsfOidIdMap.get(classifyoid); dockingTaskDO.setClassifyId(classifyid);//数据在分类id } dockingTaskDO.setClassifyOid(classifyoid);//数据所在分类oid if (clsfOidNameMap.containsKey(classifyoid)) { String classifyname = clsfOidNameMap.get(classifyoid); dockingTaskDO.setClassifyName(classifyname);//数据所在分类名称 } dockingTaskDO.setSendType(sendtype);//数据推送类型 //String dataoid=redisService.getUUIDEveryDay(); dockingTaskDO.setDataOid(date2Str +"_"+ btmoid); //intinfo dockingTaskDO.setSysInfoOid(dockingSystemConfigDTO.getOid());//intinfo的oid dockingTaskDO.setSystemOid(dockingSystemConfigDTO.getSysBaseOid());//系统oid dockingTaskDO.setSystemCode(dockingSystemConfigDTO.getSysBaseId());//系统编码 dockingTaskDO.setSystemName(dockingSystemConfigDTO.getSysBaseName());//系统name dockingTaskDO_insert.add(dockingTaskDO); }); } // dockingTaskService.saveBatch(dockingTaskDO_insert); }catch (Throwable e){ msg="数据推送到定时任务失败!"; log.error("数据推送到定时任务失败!"+e); e.printStackTrace(); }finally { log.info(msg); return R.success("数据推送到定时任务成功!"); } } /*** * 分类推送集成 * @param dockingSystemConfigDTO * @return */ private boolean pushClsfDatas(DockingSystemConfigDTO dockingSystemConfigDTO){ DockingSystemConfig dockingSystemConfig= dockingSystemConfigMapper.selectById(dockingSystemConfigDTO.getOid()); String classOid= dockingSystemConfig.getClassifyOid(); List listChildrenClassify= classifyService.listChildrenClassify(classOid,true,"id",false); ListnodeClassifyDTOList=new ArrayList<>(); JsonRootDataDTO jsonRootDataDTO=new JsonRootDataDTO(); NodeDataDTO nodeDataDTO=new NodeDataDTO(); //每个task一个事务,开启 boolean isSuccess=false; try { String sendString = ""; if (!CollectionUtils.isEmpty(listChildrenClassify)) { listChildrenClassify.stream().forEach(codeClassifyVO -> { NodeClassifyDTO nodeClassifyDTO = new NodeClassifyDTO(); nodeClassifyDTO.setClassCode(codeClassifyVO.getId());//分类代号 nodeClassifyDTO.setDescription(codeClassifyVO.getDescription());//分类描述 nodeClassifyDTO.setFullPathName(codeClassifyVO.getPath());//全路径 nodeClassifyDTO.setLcStatus(codeClassifyVO.getLcStatus());//状态 nodeClassifyDTO.setPid(codeClassifyVO.getId());//父id节点 nodeClassifyDTO.setId(codeClassifyVO.getOid());//分类oid nodeClassifyDTO.setName(codeClassifyVO.getName());//分类名称 nodeClassifyDTOList.add(nodeClassifyDTO); }); NodeLibraryDTO nodeLibraryDTO = new NodeLibraryDTO(); nodeLibraryDTO.setClassify(nodeClassifyDTOList); CodeClassifyVO rootClassify = classifyService.getTopClassifyVO(classOid); nodeLibraryDTO.setId(rootClassify.getOid()); nodeLibraryDTO.setName(rootClassify.getName()); nodeDataDTO.setLibrary(nodeLibraryDTO); jsonRootDataDTO.setData(nodeDataDTO); String paramType = dockingSystemConfigDTO.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 = "\n" + xStream.toXML(nodeDataDTO); } //调用接口 callInterface(sendString, dockingSystemConfigDTO); isSuccess=true; } }catch (Throwable e){ e.printStackTrace(); isSuccess=false; }finally { return true; } } /*** * 调用接口 * @param dockingSystemConfigDTO * @throws Throwable */ private void callInterface(String sendString , DockingSystemConfigDTO dockingSystemConfigDTO) throws Throwable{ String paramString = ""; String backString = ""; String msg=""; String url = dockingSystemConfigDTO.getRequestUrl();//url List resultNodeObjectDTOS =new ArrayList<>(); try { String type = dockingSystemConfigDTO.getInterfaceType().toLowerCase(Locale.ROOT);//get/post/webserver/corba String paramType = dockingSystemConfigDTO.getParamType();//xml/json String returnType = dockingSystemConfigDTO.getReturnType();//xml/json String requestmethod= dockingSystemConfigDTO.getRequestMethod(); String interfaceFunction = dockingSystemConfigDTO.getInterfaceFunction();//主要是webservice的方法名 String namespace = dockingSystemConfigDTO.getNamespace();//namespace String soapaction = dockingSystemConfigDTO.getSoapAction();//soapaction String targName = dockingSystemConfigDTO.getTargetName();//targName String cxfaxis = dockingSystemConfigDTO.getCxfAxis();//webservice是cxf/axis //查询param List sysIntParamVOList = dockingSystemConfigDTO.getSysIntParamDTOS(); //查询header List sysIntHeaderVOList =dockingSystemConfigDTO.getSysIntHeaderDTOS(); if(type.equals(URLTYPE_HTTP)) { if (requestmethod.equals(URLTYPE_GET)) {//GET请求 String sendurl = url + "?" + DATA_PARAM_NAME + "=" + sendString; //拼接param for (DockingSysIntParamDTO sysIntParamVO : sysIntParamVOList) { sendurl = sendurl + "&" + sysIntParamVO.getParamkey() + "=" + sysIntParamVO.getParamvalue(); } paramString = sendurl; backString = HttpUtils.get(sendurl); } else if (requestmethod.equals(URLTYPE_POST)) {//POST请求 MultiValueMap params = new LinkedMultiValueMap<>(); if(!CollectionUtils.isEmpty(sysIntParamVOList)) { for (DockingSysIntParamDTO sysIntParamVO : sysIntParamVOList) { params.add(sysIntParamVO.getParamkey(), sysIntParamVO.getParamvalue()); } } params.add(DATA_PARAM_NAME,sendString); paramString = params.toString(); MultiValueMap headers = new LinkedMultiValueMap<>(); if(!CollectionUtils.isEmpty(sysIntHeaderVOList)) { for (DockingSysIntHeaderDTO sysIntHeaderVO : sysIntHeaderVOList) { headers.add(sysIntHeaderVO.getHeaderKey(), sysIntHeaderVO.getHeaderValue()); } } 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 params = new LinkedMultiValueMap<>(); for (DockingSysIntParamDTO sysIntParamVO : sysIntParamVOList) { params.add(sysIntParamVO.getParamkey(), sysIntParamVO.getParamvalue()); } paramString = sendString; MultiValueMap headers = new LinkedMultiValueMap<>(); for (DockingSysIntHeaderDTO sysIntHeaderVO : sysIntHeaderVOList) { headers.add(sysIntHeaderVO.getHeaderKey(), sysIntHeaderVO.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; e.printStackTrace(); // throw new Throwable("调用接口失败:"+e); ResultNodeObjectDTO resultNodeObjectDTO=new ResultNodeObjectDTO(); resultNodeObjectDTO.setErroid("1"); resultNodeObjectDTO.setMsg(msg); resultNodeObjectDTO.setCode(dockingSystemConfigDTO.getClassifyId()); resultNodeObjectDTO.setOid(dockingSystemConfigDTO.getClassifyOid()); resultNodeObjectDTOS.add(resultNodeObjectDTO); }finally { boolean isSend = false; List dockingLogList=new ArrayList<>(); 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 dockingLog = new DockingLog(); String oid=VciBaseUtil.getPk(); dockingLog.setOid(oid); dockingLog.setSystemCode(dockingSystemConfigDTO.getSysBaseId()); dockingLog.setSystemName(dockingSystemConfigDTO.getSysBaseName()); dockingLog.setSystemOid(dockingSystemConfigDTO.getSysBaseOid()); dockingLog.setClassifyOid(dockingSystemConfigDTO.getClassifyOid()); dockingLog.setClassifyId(dockingSystemConfigDTO.getClassifyId()); dockingLog.setClassifyName(dockingSystemConfigDTO.getClassifyName()); dockingLog.setId(dockingSystemConfigDTO.getId()); dockingLog.setUniqueCode(""); dockingLog.setInterfaceStatus(isSend?"true":"false"); dockingLog.setParamString(paramString); dockingLog.setType(DATA_LOGE_OUT); dockingLog.setReturnString(backString); dockingLog.setMsg(msg); dockingLogList.add(dockingLog); log.info("集成推送数据,systemcode:"+dockingSystemConfigDTO.getSysBaseId()+",systemname:"+dockingSystemConfigDTO.getSysBaseName()+",url:"+url+",param:"+paramString+",e:"+msg); } dockingLogeService.saveBatch(dockingLogList); } } private String reverseOrderByList(String StringValue, CodeClassifyVO topClassifyVO,int type){ String[] s=StringValue.split("#"); StringBuffer sb=new StringBuffer(); List list=new ArrayList<>(Arrays.asList(s)); Collections.reverse(list); System.out.println(list.toString()); for (String o:list){ if(StringUtils.isNotBlank(o)){ sb.append(o).append(","); } } sb.append(type==1?topClassifyVO.getId():topClassifyVO.getName()); System.out.println(sb.toString()); return sb.toString(); } }