package com.vci.ubcs.code.service.impl; import com.alibaba.cloud.commons.lang.StringUtils; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO; import com.vci.ubcs.code.dto.CodeOrderDTO; import com.vci.ubcs.code.dto.CodeOrderSecDTO; import com.vci.ubcs.code.entity.*; import com.vci.ubcs.code.enumpack.CodeSecTypeEnum; import com.vci.ubcs.code.service.*; import com.vci.ubcs.code.util.gennerAttrMapUtil; import com.vci.ubcs.code.vo.pagemodel.*; import com.vci.ubcs.code.vo.webserviceModel.apply.*; import com.vci.ubcs.code.vo.webserviceModel.attrmap.*; import com.vci.ubcs.code.vo.webserviceModel.classify.*; import com.vci.ubcs.code.vo.webserviceModel.result.json.*; import com.vci.ubcs.code.vo.webserviceModel.result.xml.XMLResultClassfyVO; import com.vci.ubcs.code.vo.webserviceModel.result.xml.XMLResultDataObjectDetailDO; import com.vci.ubcs.code.vo.webserviceModel.result.xml.XMLResultSystemVO; import com.vci.ubcs.starter.revision.model.TreeQueryObject; import com.vci.ubcs.starter.web.pagemodel.SessionInfo; import com.vci.ubcs.starter.web.util.BeanUtilForVCI; import com.vci.ubcs.starter.web.util.VciBaseUtil; import com.vci.ubcs.webservice.annotation.VciWebservice; import com.vci.ubcs.webservice.config.AttributeMapConfig; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; import static com.vci.ubcs.code.constant.MdmEngineConstant.DEFAULT_SYNC_ATTR_LIST; /*** * 统一接口 */ @Service @Slf4j @VciWebservice(path = "/universalInterface") public class UniversalInterfaceImpl implements UniversalInterfaceI { @Autowired(required = false) private AttributeMapConfig attributeMapConfig; /** * 缓存服务 */ //@Autowired //private RedisService redisService; /** * 主题库分类的服务 */ @Autowired(required = false) private ICodeClassifyService classifyService; /** * 主数据引擎的服务 */ @Resource private MdmEngineService engineService; /** * 密级的服务 */ @Resource private MdmIOService mdmIOService; /*** * 集成接口日志服务的配置 */ @Resource private IDockingLogeService dockingLogeService; private static String separator="##VCI##"; private String errorid="0"; private String msg="成功"; private String objerrorCode="0"; private String objerrorMsg="成功"; /*** * 申请编码接口 * @param data 传递的数据参数 * @param dataType 标识data是xml格式还是json格式,接口返回数据也是按照这个格式,以下接口类同 * @return * @throws Throwable */ @Override public String applyCode(String data, String dataType) throws Throwable { { String resultStr = ""; String errorid="0"; msg="成功"; objerrorCode="0"; objerrorMsg="成功"; log.info("申请编码的数据参数:->"+data); log.info("申请编码的数据类型:->"+dataType); String systemId=""; List resultClassfyVOList = new ArrayList<>(); try { if(StringUtils.isBlank(data)) { errorid="101"; throw new Throwable("接口参数:传递为空"); } InterParameterVO interParameterVO =new InterParameterVO(); //如果dataType是xml则,通过xml序列化成对象形式,如果是json则通过json转换成对象格式 try { if ("xml".equals(dataType)) { XStream xStream = new XStream(new DomDriver()); xStream.processAnnotations(RootDataVO.class); xStream.autodetectAnnotations(true); RootDataVO rootDataVO = (RootDataVO) xStream.fromXML(data); interParameterVO.setData(rootDataVO); } else { interParameterVO = JSONObject.toJavaObject(JSONObject.parseObject(data), InterParameterVO.class); } }catch (Throwable e){ errorid="101"; throw new Throwable("接口参数:传入数据参数解析失败"); } ClassfysVO classfysVO = interParameterVO.getData().getClassifys(); systemId = interParameterVO.getData().getSystemId(); UserVO userVo = interParameterVO.getData().getUser(); List classVOList = classfysVO.getClassify(); InterParameterVO finalInterParameterVO = interParameterVO; //这是账号信息 SessionInfo sessionInfo = new SessionInfo(); sessionInfo.setUserId(userVo.getUserName()); sessionInfo.setUserName(userVo.getTrueName()); sessionInfo.setIp(userVo.getIp()); VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); String finalSystemId = systemId; classVOList.stream().forEach(classVO -> { log.info("参数:分类COde:" + classVO.getClassCode()); LinkedList resultDataObjectDetailDOs = new LinkedList<>(); //获取分类信息 try { String libray = classVO.getLibrary(); CodeClassifyVO codeClassifyVO = getClassfy(classVO); log.info("end:分类查询完毕"); //获取分类模板信息 if(codeClassifyVO==null || StringUtils.isBlank(codeClassifyVO.getOid())){ objerrorCode="100"; throw new Throwable ("根据传输的分类,未获取到分类信息"); } CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid()); if(templateVO==null||StringUtils.isBlank(templateVO.getOid())){ objerrorCode="1"; throw new Throwable ("根据传输的分类,未获取MDM系统中对应模板"); } log.info("end:模板查询完毕"); ApplyDatasVO applyDatasVO = classVO.getObjects(); DataObjectVO dataObjectVO = new DataObjectVO(); List attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag()) ).collect(Collectors.toList()); this.getConfigDatas(finalSystemId, libray, applyDatasVO, attrVOS, dataObjectVO); log.info("end:数据组织完毕"); //规则的主键需要去获取 CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyVO.getOid()); if(classifyFullInfo==null ||classifyFullInfo.getCurrentClassifyVO()==null || StringUtils.isBlank(classifyFullInfo.getCurrentClassifyVO().getOid())){ objerrorCode="1"; log.info("classifyFullInfo:"+"根据传输的分类,未获取分类相关信息"); throw new Throwable ("根据传输的分类,未获取分类相关信息"); } CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo); if(ruleVO==null|| StringUtils.isBlank(ruleVO.getOid())){ objerrorCode="102"; throw new Throwable ("根据传输的分类,未获取MDM系统中对应规则"); } log.info("end:规则获取完毕"); List codeOrderSecDTOList = getRuleCodeOrderSecDTOs(classVO.getSections().getSection(), ruleVO); log.info("end:码段获取完毕"); CodeOrderDTO orderDTO = new CodeOrderDTO(); orderDTO.setCodeClassifyOid(codeClassifyVO.getOid());//分类主键 orderDTO.setSecDTOList(codeOrderSecDTOList);//分类码段 mdmIOService.batchSyncApplyCode(orderDTO, dataObjectVO, resultDataObjectDetailDOs); log.info("end:申请获取完毕"); } catch (Throwable e) { XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO=new XMLResultDataObjectDetailDO(); xmlResultDataObjectDetailDO.setCode(""); xmlResultDataObjectDetailDO.setId(""); xmlResultDataObjectDetailDO.setErrorid(objerrorCode); xmlResultDataObjectDetailDO.setMsg("编码申请失败:"+e.getMessage()); resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO); e.printStackTrace(); }finally { XMLResultClassfyVO resultClassfyVO = new XMLResultClassfyVO(); resultClassfyVO.setClassCode(classVO.getClassCode()); resultClassfyVO.setLibrary(classVO.getLibrary()); resultClassfyVO.setFullclsfNamePath(classVO.getFullclsfNamePath()); resultClassfyVO.setObjects(resultDataObjectDetailDOs); resultClassfyVOList.add(resultClassfyVO); } }); XMLResultSystemVO xmlResultSystemVO=new XMLResultSystemVO(); xmlResultSystemVO.setClassifys(resultClassfyVOList); xmlResultSystemVO.setMsg(msg); xmlResultSystemVO.setErrorid(errorid); resultStr= transferResultXMl(xmlResultSystemVO,dataType); }catch (Throwable e){ e.printStackTrace();; msg="申请编码失败:"+e.getMessage(); }finally { XMLResultSystemVO xmlResultSystemVO=new XMLResultSystemVO(); xmlResultSystemVO.setClassifys(resultClassfyVOList); xmlResultSystemVO.setMsg(msg); xmlResultSystemVO.setErrorid(errorid); resultStr= transferResultXMl(xmlResultSystemVO,dataType); final boolean[] issucess = {true}; if(!errorid.equals("0")) { issucess[0] = false; }else { if(!CollectionUtils.isEmpty(resultClassfyVOList)) { resultClassfyVOList.stream().forEach(xMLResultClassfyVO -> { xMLResultClassfyVO.getObjects().stream().forEach(objec -> { if (!(objec.getErrorid().equals("0") || objec.getErrorid().equals("204"))) { issucess[0] = false; msg=objec.getMsg(); } }); }); } } try { //记录日志 this.saveLogs(systemId, systemId, data, resultStr, issucess[0], msg, "applyCode"); }catch (Throwable e){ e.printStackTrace(); } } log.info("返回参数:"+resultStr); return resultStr; } } /*** * 统一更新接口(更改状态,更改属性信息)接口 * @param data * @param dataType * @return * @throws Throwable */ @Override public String syncEditData(String data, String dataType) throws Throwable { return null; } /*** * 分类查询 * @param data * @param dataType * @return * @throws Throwable */ @Override public String queryClassify(String data, String dataType) throws Throwable { boolean issucess=false; String resultStr = ""; String errorid="0"; msg="成功"; String systemId=""; log.info("查询分类的数据参数:->"+data); log.info("查询分类的数据类型:->"+dataType); ResultClassifyVO resultClassifyVO =new ResultClassifyVO(); List classifyVOList=new ArrayList<>(); ResultData resultData=new ResultData(); try { if (StringUtils.isBlank(data)) { errorid = "101"; throw new Throwable("接口参数:传递为空"); } QueryClassifyVO queryClassifyVO = new QueryClassifyVO(); //如果dataType是xml则,通过xml序列化成对象形式,如果是json则通过json转换成对象格式 try { if ("xml".equals(dataType)) { XStream xStream = new XStream(new DomDriver()); xStream.processAnnotations(QueryData.class); xStream.autodetectAnnotations(true); QueryData queryData = (QueryData) xStream.fromXML(data); queryClassifyVO.setData(queryData); } else { queryClassifyVO = JSONObject.toJavaObject(JSONObject.parseObject(data), QueryClassifyVO.class); } } catch (Throwable e) { errorid = "101"; msg="接口参数:传入数据参数解析失败"; e.printStackTrace(); throw new Throwable("接口参数:传入数据参数解析失败"); } QueryData queryData=queryClassifyVO.getData(); UserVO userVo=queryData.getUser(); systemId=queryData.getSystemId(); QueryLibraryVO libraryVO= queryData.getLibrary(); String libId= libraryVO.getId(); List classifyIdList= libraryVO.getClassifyid(); List codeClassifyVOS =new ArrayList<>(); //这是账号信息 //这是账号信息 if(userVo!=null) { SessionInfo sessionInfo = new SessionInfo(); sessionInfo.setUserId(userVo.getUserName()); sessionInfo.setUserName(userVo.getTrueName()); sessionInfo.setIp(userVo.getIp()); VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); }else{ errorid = "101"; throw new Throwable("接口参数:账号信息获取失败"); } if(!CollectionUtils.isEmpty(classifyIdList)){ //先简称是否有关联模板,有模板要先删除 List libIdDos = classifyService.selectByWrapper(Wrappers.query().lambda().in(CodeClassify::getId, classifyIdList)); codeClassifyVOS=classifyService.codeClassifyDO2VOs(libIdDos); }else { List libIdDos = classifyService.selectByWrapper(Wrappers.query().lambda().eq(CodeClassify::getId, libId)); String oid= libIdDos.get(0).getOid(); TreeQueryObject treeQueryObject=new TreeQueryObject(); treeQueryObject.setParentOid(oid); treeQueryObject.setQueryAllLevel(true); codeClassifyVOS=classifyService.selectCodeClassifyDOByTree(treeQueryObject); } LibraryVO libraryVo=new LibraryVO(); libraryVo.setId(libId); libraryVo.setName(""); if(!CollectionUtils.isEmpty(codeClassifyVOS)){ errorid = "0"; msg="成功!"; codeClassifyVOS.stream().forEach(codeClassifyDO -> { ClassifyVO classifyVO=new ClassifyVO(); classifyVO.setId(codeClassifyDO.getOid()); classifyVO.setLcStatus(codeClassifyDO.getLcStatus()); classifyVO.setClassCode(codeClassifyDO.getId()); classifyVO.setDescription(codeClassifyDO.getDescription()); classifyVO.setName(codeClassifyDO.getName()); classifyVO.setPid(codeClassifyDO.getParentcodeclassifyoid()); classifyVO.setFullPathName(codeClassifyDO.getPath()); classifyVOList.add(classifyVO); }); libraryVo.setClassify(classifyVOList); }else{ errorid = "100"; msg="未查询到相关的分类信息"; } issucess=true; resultData.setLibrary(libraryVo); }catch (Throwable e){ e.printStackTrace();; msg="查询分类失败:"+e.getMessage(); }finally { resultData.setErrorid(errorid); resultData.setMsg(msg); resultClassifyVO.setResultData(resultData); } if(dataType.equals("xml")){ //组织返回接口信息 XStream xStream = new XStream(new DomDriver()); xStream.processAnnotations(XMLResultSystemVO.class); xStream.autodetectAnnotations(true); resultStr = "\n" + xStream.toXML(resultData); }else{ Object object = JSONObject.toJSON(resultClassifyVO); resultStr = object.toString(); } try { //记录日志 this.saveLogs(systemId, systemId, data, resultStr, issucess, msg, "queryClassify"); }catch (Throwable e){ e.printStackTrace(); } log.info("返回参数:"+resultStr); return resultStr; } /*** * 数据查询 * @param data * @param dataType * @return * @throws Throwable */ @Override public String queryData(String data, String dataType) throws Throwable { return null; } @Override public String queryClassifyRule(String data, String datatype) throws Throwable { return null; } /*** * 查询校验分类信息 * @param classfyVO */ private CodeClassifyVO getClassfy(ClassfyVO classfyVO) throws Throwable{ CodeClassifyVO classifyVO = new CodeClassifyVO(); try { String classCode = classfyVO.getClassCode(); String className = classfyVO.getFullclsfNamePath(); //根据分类代号查询分类信息 if (StringUtils.isNotBlank(classfyVO.getClassCode())) { Map conditionMap = new HashMap<>(); List codeClassifyList = classifyService.selectByWrapper(Wrappers.query().lambda().eq(CodeClassify::getId, classCode)); if (!CollectionUtils.isEmpty(codeClassifyList)) { CodeClassify classifyDO = codeClassifyList.get(0); //将DTO转换为DO classifyVO = new CodeClassifyVO(); BeanUtilForVCI.copyPropertiesIgnoreCase(classifyDO, classifyVO); if(StringUtils.isBlank(classifyVO.getOid())){ throw new Throwable("根据分类代号未查询到相应的分类信息"); } }else{ throw new Throwable("根据分类代号未查询到相应的分类信息"); } } else { classifyVO = classifyService.getObjectByClsfNamePath(className.replace(separator, "/")); if(StringUtils.isBlank(classifyVO.getOid())){ throw new Throwable("根据分类名称路径未查询到相应的分类信息"); } } }catch (Throwable e){ objerrorCode="100"; new Throwable("获取分类信息失败:"+e.getMessage()); } return classifyVO; } /*** * 根据穿入的参数信息校验码段规则 */ private List getRuleCodeOrderSecDTOs(List SectionVOList,CodeRuleVO ruleVO) throws Throwable{ List codeBasicSecVOS= ruleVO.getSecVOList(); Map sectionVOMap=new HashMap<>(); SectionVOList.stream().forEach(SectionVO->{ sectionVOMap.put(SectionVO.getName(),SectionVO.getValue()); }); List codeOrderSecDTOList=new ArrayList<>(); for(CodeBasicSecVO codeBasicSecVO: codeBasicSecVOS) { String sectype = codeBasicSecVO.getSecType(); if (!sectype.equals(CodeSecTypeEnum.CODE_SERIAL_SEC.getValue())) { String name = codeBasicSecVO.getName(); String sectypeText = codeBasicSecVO.getSecTypeText(); log.info("码段名称:"+name); log.info("描述:"+sectypeText); CodeOrderSecDTO CodeOrderSecDTO = new CodeOrderSecDTO(); if (sectionVOMap.containsKey(name)) { CodeOrderSecDTO.setSecOid(codeBasicSecVO.getOid()); String sectypeValue = sectionVOMap.get(name); log.info("码段值:"+sectypeValue); CodeOrderSecDTO.setSecValue(sectypeValue); codeOrderSecDTOList.add(CodeOrderSecDTO); } else { objerrorCode="101"; throw new Throwable("传入的码段规则缺少" + name + "码段"); } } } return codeOrderSecDTOList; } /*** * 根据属性映射转换编码所需字段 */ public void getConfigDatas(String systemId,String libray, ApplyDatasVO applyDatasVO,List codeClassifyTemplateAttrVOList,DataObjectVO dataObjectVO) throws Throwable { List applyDataVOList=applyDatasVO.getObject(); LinkedHashMap> dataKeyValueMap=new LinkedHashMap<>(); //如果将数据转换成所需要的数据对象 Map attrMapConfigMap=new HashMap<>(); Map propMaps=new HashMap<>(); try { Map stringStringMap=attributeMapConfig.getSystem_attrmap(); //stringStringMap.put("RLM","D:\\RLM.xml"); LibraryDO libraryDO= gennerAttrMapUtil.getNewInstance().gennerAttrMapBySystem(systemId,stringStringMap); List libraryClsfDOList=libraryDO.getClsf(); Map> libPropMaps = libraryClsfDOList.stream().collect(Collectors.toMap(LibraryClsfDO::getLibrary, LibraryClsfDO::getProp, (key1, key2) -> key2)); if(libPropMaps.containsKey(libray)){ List clsfAttrMappingDOList=libPropMaps.get(libray); propMaps = clsfAttrMappingDOList.stream().collect(Collectors.toMap(ClsfAttrMappingDO::getSourceKey, ClsfAttrMappingDO::getTargetKey, (key1, key2) -> key2)); } }catch (Throwable e){ objerrorCode="1"; throw new Throwable("MDM集成属性配置文件读取失败"); } LinkedList rowNameList=new LinkedList<>(); LinkedHashMap filedIndexMap=new LinkedHashMap<>(); //根据分类模板组织数据 final int[] index = {0}; try { codeClassifyTemplateAttrVOList.stream().forEach(codeClassifyTemplateAttrVO -> { String attrName = codeClassifyTemplateAttrVO.getName(); String field = codeClassifyTemplateAttrVO.getId(); rowNameList.add(attrName); filedIndexMap.put(field, index[0]++); }); dataObjectVO.setColName(rowNameList);//放入属性 attrMapConfigMap.putAll(propMaps); LinkedList rowDataList = new LinkedList<>(); //Map> dataPropMap = applyDataVOList.stream().collect(Collectors.toMap(ApplyDataVO::getId, ApplyDataVO::getProp, (key1, key2) -> key2)); final int[] rowIndex = {0}; applyDataVOList.stream().forEach(applyDataVO -> { rowIndex[0]++; RowDatas rowDatas = new RowDatas(); rowDatas.setOid(applyDataVO.getId()); rowDatas.setCreator(applyDataVO.getCreator()); rowDatas.setEditor(applyDataVO.getEditor()); rowDatas.setCode(applyDataVO.getCode()); rowDatas.setOperation(applyDataVO.getOperate()); rowDatas.setStatus(applyDataVO.getStatus()); rowDatas.setRowIndex(rowIndex[0] + ""); List proppertyVOList = applyDataVO.getProp(); LinkedHashMap integerValueMap = new LinkedHashMap<>(); Map filedValueMap = new HashMap<>(); if (!CollectionUtils.isEmpty(proppertyVOList)) { Map sourceKeyValueMap = proppertyVOList.stream().collect(Collectors.toMap(ProppertyVO::getKey, ProppertyVO::getValue, (key1, key2) -> key2)); Map keyValueMap = new HashMap<>(); //判断attrMapConfigMap是否有值,如果没有则说明基础默认的是编码系统字段 if (!CollectionUtils.isEmpty(attrMapConfigMap)) { sourceKeyValueMap.keySet().forEach(sourceKey -> { String dataValue = sourceKeyValueMap.get(sourceKey); if (attrMapConfigMap.containsKey(sourceKey)) { String targetKey = attrMapConfigMap.get(sourceKey); keyValueMap.put(targetKey, StringUtils.isBlank(dataValue)?"":dataValue); } }); } else { sourceKeyValueMap.forEach((filed,value)->{ keyValueMap.put(filed,StringUtils.isBlank(value)?"":value) ; }); } filedIndexMap.forEach((attrKey, column) -> { String keyValue = ""; if (keyValueMap.containsKey(attrKey)) { keyValue =StringUtils.isBlank(keyValueMap.get(attrKey))?"":keyValueMap.get(attrKey); } integerValueMap.put(column, keyValue); filedValueMap.put(attrKey, keyValue); }); } rowDatas.setData(integerValueMap); rowDatas.setFiledValue(filedValueMap); rowDataList.add(rowDatas); }); dataObjectVO.setRowData(rowDataList); }catch (Throwable e){ objerrorCode="1"; throw new Throwable("组织数据映射值失败"); } } /*** * 记录日志信息 * @param systemId * @param parmaData * @param result * @return */ private void saveLogs(String systemId,String systemName,String parmaData, String result,boolean isSucess,String msg,String operation){ //记录日志信息 DockingLog dockingLoge=new DockingLog(); //String oid=redisService.getUUIDEveryDay(); dockingLoge.setSystemCode(StringUtils.isBlank(systemId)?"-":systemId);//设置系统标识 dockingLoge.setSystemName(StringUtils.isBlank(systemName)?"-":systemName); dockingLoge.setMsg(msg);//日志消息 dockingLoge.setClassifyId("-");//分类编号 dockingLoge.setClassifyName("-");//分类名称 dockingLoge.setClassifyOid("-");//分类主键 dockingLoge.setUniqueCode("-");//唯一标识 dockingLoge.setSystemOid("-");//系统标识 // dockingLogeDO.setName(operation); //dockingLogeDO.setOid(oid);//日志主键 dockingLoge.setParamString(parmaData);//参数信息 dockingLoge.setReturnString(result);//返回信息 dockingLoge.setType(operation);//日志操作类型 if(isSucess) { dockingLoge.setInterfaceStatus("true");//接口集成状态 }else{ dockingLoge.setInterfaceStatus("false");//接口集成状态 } dockingLogeService.save(dockingLoge); log.info("集成推送数据成功,systemId:"+systemId+",systemname:"+systemName+",operation:"+operation+",param:"+parmaData); } /*** * 数据维护与编码申请返回 * @param resultSystemVO * @param dataType * @return */ private String transferResultXMl(XMLResultSystemVO resultSystemVO,String dataType){ String resultStr=""; if ("xml".equals(dataType)) { //组织返回接口信息 XStream xStream = new XStream(new DomDriver()); xStream.processAnnotations(XMLResultSystemVO.class); xStream.autodetectAnnotations(true); resultStr = "\n" + xStream.toXML(resultSystemVO); } else { List resultClassfyVOList =resultSystemVO.getClassifys(); JSONResultDataVO resultDataVO = new JSONResultDataVO(); JSONResultSystemVO jsonResultSystemVO = new JSONResultSystemVO(); JSONResultClassfysVO jsonResultClassfysVO = new JSONResultClassfysVO(); List jSONResultClassfyVOList = new ArrayList<>(); resultClassfyVOList.stream().forEach(resultClassfyVO -> { List xmlResultDataObjectDetailDOS = resultClassfyVO.getObjects(); List JSONResultDataObjectDetailDOList = new ArrayList<>(); xmlResultDataObjectDetailDOS.stream().forEach(xmlResultDataObjectDetail -> { JSONResultDataObjectDetailDO jsonResultDataObjectDetail = new JSONResultDataObjectDetailDO(); BeanUtilForVCI.copyPropertiesIgnoreCase(xmlResultDataObjectDetail, jsonResultDataObjectDetail); JSONResultDataObjectDetailDOList.add(jsonResultDataObjectDetail); }); JSONResultClassfyVO jsonResultClassfyVO = new JSONResultClassfyVO(); jsonResultClassfyVO.setClassCode(resultClassfyVO.getClassCode()); jsonResultClassfyVO.setLibrary(resultClassfyVO.getLibrary()); jsonResultClassfyVO.setFullclsfNamePath(resultClassfyVO.getFullclsfNamePath()); JSONResultDataObjectDO JSONResultDataObjectDO = new JSONResultDataObjectDO(); JSONResultDataObjectDO.setObject(JSONResultDataObjectDetailDOList); jsonResultClassfyVO.setObjects(JSONResultDataObjectDO); jSONResultClassfyVOList.add(jsonResultClassfyVO); }); jsonResultClassfysVO.setClassify(jSONResultClassfyVOList); jsonResultSystemVO.setClassifys(jsonResultClassfysVO); jsonResultSystemVO.setErrorid(resultSystemVO.getErrorid()); jsonResultSystemVO.setMsg(resultSystemVO.getMsg()); resultDataVO.setData(jsonResultSystemVO); Object object = JSONObject.toJSON(resultDataVO); resultStr = object.toString(); } return resultStr; } }