package com.vci.ubcs.code.service.impl; import com.alibaba.fastjson.JSONObject; import com.vci.ubcs.code.constant.MdmDuckingConstant; import com.vci.ubcs.code.constant.MdmEngineConstant; import com.vci.ubcs.code.mapper.DockingLogeMapper; import com.vci.ubcs.code.enumpack.CodeSecTypeEnum; import com.vci.ubcs.code.entity.CodeClassifyDO; import com.vci.ubcs.code.entity.DockingLogeDO; import com.vci.ubcs.code.service.CodeClassifyServiceI; import com.vci.ubcs.code.service.MdmEngineServiceI; import com.vci.ubcs.code.service.MdmIOServiceI; import com.vci.ubcs.code.service.UniversalInterfaceI; import com.vci.ubcs.code.utils.AttributeMapConfig; import com.vci.ubcs.code.utils.gennerAttrMapUtil; import com.vci.ubcs.code.vo.pagemodel.*; import com.vci.ubcs.code.vo.universalInter.apply.*; import com.vci.ubcs.code.vo.universalInter.attrmap.DataObjectVO; import com.vci.ubcs.code.vo.universalInter.classify.*; import com.vci.ubcs.code.vo.universalInter.data.*; import com.vci.ubcs.code.vo.universalInter.result.json.*; import com.vci.ubcs.code.vo.universalInter.result.xml.XMLResultClassfyVO; import com.vci.ubcs.code.vo.universalInter.result.xml.XMLResultDataObjectDetailDO; import com.vci.ubcs.code.vo.universalInter.result.xml.XMLResultSystemVO; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; import com.vci.starter.web.constant.QueryOptionConstant; import com.vci.starter.web.pagemodel.SessionInfo; import com.vci.starter.web.pagemodel.TreeQueryObject; import com.vci.starter.web.util.BeanUtilForVCI; 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.webservice.annotation.VciWebservice; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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.vo.universalInter.attrmap.ClsfAttrMappingDO; import com.vci.ubcs.code.vo.universalInter.attrmap.LibraryClsfDO; import com.vci.ubcs.code.vo.universalInter.attrmap.LibraryDO; import com.vci.ubcs.code.vo.universalInter.attrmap.RowDatas; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.util.CollectionUtils; import plm.bs.bom.clientobject.ClientBusinessObject; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; /*** * 统一接口 */ @VciWebservice(path = "/universalInterface") public class UniversalInterfaceImpl implements UniversalInterfaceI { /** * 日志 */ private Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private AttributeMapConfig attributeMapConfig; /** * 缓存服务 */ @Autowired private RedisService redisService; /** * 主题库分类的服务 */ @Autowired private CodeClassifyServiceI classifyService; /** * 主数据引擎的服务 */ @Autowired private MdmEngineServiceI engineService; /** * 集成接口日志服务的配置 */ @Resource private DockingLogeMapper dockingLogeDao; /** * 密级的服务 */ @Autowired private MdmIOServiceI mdmIOService; /** * 数据的服务 */ @Autowired @Lazy private WebBoServiceI boService; private static String separator="##VCI##"; private String errorid="0"; private String msg="成功"; private String objerrorCode="0"; private String objerrorMsg="成功"; @Override public String applyCode(String data, String dataType) throws Throwable { String resultStr = ""; String errorid="0"; msg="成功"; objerrorCode="0"; objerrorMsg="成功"; logger.info("申请编码的数据参数:->"+data); logger.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 -> { logger.info("参数:分类COde:" + classVO.getClassCode()); LinkedList resultDataObjectDetailDOs = new LinkedList<>(); //获取分类信息 try { String libray = classVO.getLibrary(); CodeClassifyVO codeClassifyVO = getClassfy(classVO); logger.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系统中对应模板"); } logger.info("end:模板查询完毕"); ApplyDatasVO applyDatasVO = classVO.getObjects(); DataObjectVO dataObjectVO = new DataObjectVO(); List attrVOS = templateVO.getAttributes().stream().filter(s -> !MdmEngineConstant.DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormdisplayflag()) ).collect(Collectors.toList()); this.getConfigDatas(finalSystemId, libray, applyDatasVO, attrVOS, dataObjectVO); logger.info("end:数据组织完毕"); //规则的主键需要去获取 CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyVO.getOid()); if(classifyFullInfo==null ||classifyFullInfo.getCurrentClassifyVO()==null || StringUtils.isBlank(classifyFullInfo.getCurrentClassifyVO().getOid())){ objerrorCode="1"; logger.info("classifyFullInfo:"+"根据传输的分类,未获取分类相关信息"); throw new Throwable ("根据传输的分类,未获取分类相关信息"); } CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo); if(ruleVO==null||StringUtils.isBlank(ruleVO.getOid())){ objerrorCode="102"; throw new Throwable ("根据传输的分类,未获取MDM系统中对应规则"); } logger.info("end:规则获取完毕"); List codeOrderSecDTOList = getRuleCodeOrderSecDTOs(classVO.getSections().getSection(), ruleVO); logger.info("end:码段获取完毕"); CodeOrderDTO orderDTO = new CodeOrderDTO(); orderDTO.setCodeClassifyOid(codeClassifyVO.getOid());//分类主键 orderDTO.setSecDTOList(codeOrderSecDTOList);//分类码段 mdmIOService.batchSyncApplyCode(orderDTO, dataObjectVO, resultDataObjectDetailDOs); logger.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(); /* XMLResultSystemVO XMLResultSystemVO=new XMLResultSystemVO(); XMLResultSystemVO.setErrorid(errorid); XMLResultSystemVO.setMsg("申请编码失败:->"+e.getMessage()); XMLResultSystemVO.setClassifys(resultClassfyVOList); resultStr=transferResultXMl(XMLResultSystemVO,dataType); logger.error("申请编码失败:->"+e); return resultStr;*/ }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(); } } logger.info("返回参数:"+resultStr); return resultStr; } /*** * 集成更新接口 * @param data :数据信息参数:根据datatype定义其格式xml/json * @param dataType 确定属性信息参数传输格式 * @return * @throws Throwable */ @Override public String syncEditData(String data, String dataType) throws Throwable { String resultStr = ""; String errorid="0"; msg="成功"; String systemId=""; objerrorCode="0"; objerrorMsg="成功"; logger.info("更改编码的数据参数:->"+data); logger.info("更改编码的数据类型:->"+dataType); 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->{ logger.info("参数:分类COde:" + classVO.getClassCode()); LinkedList resultDataObjectDetailDOs = new LinkedList<>(); //获取分类信息 try { String libray = classVO.getLibrary(); CodeClassifyVO codeClassifyVO = getClassfy(classVO); if(codeClassifyVO==null || StringUtils.isBlank(codeClassifyVO.getOid())){ objerrorCode="100"; throw new Throwable ("根据传输的分类,未获取到分类信息"); } logger.info("end:分类查询完毕"); //获取分类模板信息 CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid()); if(templateVO==null||StringUtils.isBlank(templateVO.getOid())){ objerrorCode="102"; throw new Throwable ("根据传输的分类,未获取MDM系统中对应模板"); } logger.info("end:模板查询完毕"); ApplyDatasVO applyDatasVO = classVO.getObjects(); DataObjectVO dataObjectVO = new DataObjectVO(); //将默认的属性全部替换掉 List attrVOS = templateVO.getAttributes().stream().filter(s -> !MdmEngineConstant.DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormdisplayflag()) ).collect(Collectors.toList()); this.getConfigDatas(finalSystemId, libray, applyDatasVO, attrVOS, dataObjectVO); logger.info("end:数据构建完毕"); logger.info("start:修改数据执行完毕"); mdmIOService.batchSyncEditDatas(codeClassifyVO,dataObjectVO, resultDataObjectDetailDOs); logger.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); } }); }catch (Throwable e){ e.printStackTrace();; msg="编码更改/状态更改/删除:"+e.getMessage(); /* XMLResultSystemVO XMLResultSystemVO=new XMLResultSystemVO(); XMLResultSystemVO.setErrorid(errorid); XMLResultSystemVO.setMsg("申请编码失败:->"+e.getMessage()); XMLResultSystemVO.setClassifys(resultClassfyVOList); resultStr=transferResultXMl(XMLResultSystemVO,dataType); logger.error("申请编码失败:->"+e); return resultStr;*/ }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, "syncEditData"); }catch (Throwable e){ e.printStackTrace(); } } logger.info("返回参数:"+resultStr); //存储日志 return resultStr; } /**** * 查询分类 * @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=""; logger.info("查询分类的数据参数:->"+data); logger.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.getUserVo(); systemId=queryData.getSystemId(); QueryLibraryVO libraryVO= queryData.getLibrary(); String libId= libraryVO.getId(); List classifyIdList= libraryVO.getClassifyid(); List codeClassifyDOS =new ArrayList<>(); //这是账号信息 //这是账号信息 SessionInfo sessionInfo = new SessionInfo(); sessionInfo.setUserId(userVo.getUserName()); sessionInfo.setUserName(userVo.getTrueName()); sessionInfo.setIp(userVo.getIp()); VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); if(!CollectionUtils.isEmpty(classifyIdList)){ //先简称是否有关联模板,有模板要先删除 VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyDO.class); queryWrapper.addQueryMap("id", QueryOptionConstant.IN + VciBaseUtil.toInSql(classifyIdList.toArray(new String[0]))); codeClassifyDOS=classifyService.selectByWrapper(queryWrapper); }else { VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyDO.class); queryWrapper.addQueryMap("id", QueryOptionConstant.IN + VciBaseUtil.toInSql(libId)); List libIdDos =classifyService.selectByWrapper(queryWrapper); String oid= libIdDos.get(0).getOid(); TreeQueryObject treeQueryObject=new TreeQueryObject(); treeQueryObject.setParentOid(oid); treeQueryObject.setQueryAllLevel(true); codeClassifyDOS=classifyService.selectCodeClassifyDOByTree(treeQueryObject); } LibraryVO libraryVo=new LibraryVO(); libraryVo.setId(libId); libraryVo.setName(""); if(!CollectionUtils.isEmpty(codeClassifyDOS)){ errorid = "0"; msg="成功!"; codeClassifyDOS.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(); } logger.info("返回参数:"+resultStr); return resultStr; } /*** * * @param data * @param dataType * @return * @throws Throwable */ @Override public String queryData(String data, String dataType) throws Throwable { boolean issucess=false; String resultStr = ""; String errorid="0"; msg="成功"; String systemId=""; logger.info("查询分类的数据参数:->"+data); logger.info("查询分类的数据类型:->"+dataType); DataCondtionsVO dataCondtionsVO=new DataCondtionsVO(); ResultDataVO resultDataVO=new ResultDataVO(); try { try { if ("xml".equals(dataType)) { XStream xStream = new XStream(new DomDriver()); xStream.processAnnotations(CondtionsVO.class); xStream.autodetectAnnotations(true); CondtionsVO condtionsVO = (CondtionsVO) xStream.fromXML(data); dataCondtionsVO.setCondtions(condtionsVO); } else { dataCondtionsVO = JSONObject.toJavaObject(JSONObject.parseObject(data), DataCondtionsVO.class); } } catch (Throwable e) { errorid = "101"; msg = "接口参数:传入数据参数解析失败"; e.printStackTrace(); throw new Throwable("接口参数:传入数据参数解析失败"); } CondtionsVO condtionsVO=dataCondtionsVO.getCondtions(); systemId=condtionsVO.getSystemId(); UserVO userVo=condtionsVO.getUser(); CondtionVO condtionVO= condtionsVO.getCondtion(); SessionInfo sessionInfo = new SessionInfo(); sessionInfo.setUserId(userVo.getUserName()); sessionInfo.setUserName(userVo.getTrueName()); sessionInfo.setIp(userVo.getIp()); VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); String classCode=condtionVO.getClassCode(); String library= condtionVO.getLibrary(); String queryFileds= condtionVO.getQueryFileds(); List codeClassifyDOS =new ArrayList<>(); //先简称是否有关联模板,有模板要先删除 VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyDO.class); queryWrapper.addQueryMap("id", QueryOptionConstant.IN + VciBaseUtil.toInSql(classCode)); List libIdDos =classifyService.selectByWrapper(queryWrapper); if(!CollectionUtils.isEmpty(libIdDos)){ CodeClassifyDO currentCodeClassifyDO=libIdDos.get(0); String oid=currentCodeClassifyDO.getOid(); TreeQueryObject treeQueryObject=new TreeQueryObject(); treeQueryObject.setParentOid(oid); treeQueryObject.setQueryAllLevel(true); codeClassifyDOS=classifyService.selectCodeClassifyDOByTree(treeQueryObject); codeClassifyDOS.add(currentCodeClassifyDO); Map oidCodeclassifyDOMap = codeClassifyDOS.stream().filter(systeDataObject -> systeDataObject != null && StringUtils.isNotBlank(systeDataObject.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)); List propertyVOS=condtionVO.getPro(); Map condtionMap=new HashMap<>(); propertyVOS.stream().forEach(propertyVO -> { condtionMap.put(propertyVO.getFiledName(),propertyVO.getFiledValue()); }); condtionMap.put("codeclsfid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(oidCodeclassifyDOMap.keySet().toArray(new String[0])) + ")"); List clientBusinessObjects= boService.queryCBO( currentCodeClassifyDO.getBtmTypeId(),condtionMap); List dataObjectVOS=new ArrayList<>(); if(!CollectionUtils.isEmpty(clientBusinessObjects)){ CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(currentCodeClassifyDO.getOid()); Map filedAttributeMap = templateVO.getAttributes().stream().filter(attribute -> attribute != null && StringUtils.isNotBlank(attribute.getId())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getId(), t -> t)); clientBusinessObjects.stream().forEach(cbo -> { com.vci.ubcs.code.vo.universalInter.data.DataObjectVO dataObjectVO=new com.vci.ubcs.code.vo.universalInter.data.DataObjectVO(); dataObjectVO.setCode(cbo.getId()); dataObjectVO.setStatus(cbo.getLcStatus()); String codeclsfid=cbo.getAttributeValue("codeclsfid"); if(oidCodeclassifyDOMap.containsKey(codeclsfid)){ CodeClassifyDO classifyDO= oidCodeclassifyDOMap.get(codeclsfid); dataObjectVO.setClassCode(classifyDO.getId()); } dataObjectVO.setLibrary(library); String [] newQueryFileds=queryFileds.split(","); List propertyVOList=new ArrayList<>(); for(String filed:newQueryFileds){ String value=cbo.getAttributeValue(filed); if(filedAttributeMap.containsKey(filed)){ CodeClassifyTemplateAttrVO attrVO= filedAttributeMap.get(filed); PropertyVO propertyVO=new PropertyVO(); propertyVO.setFiledName(filed); propertyVO.setFiledValue(value); propertyVO.setOutname(attrVO.getName()); propertyVOList.add(propertyVO); } } dataObjectVO.setPro(propertyVOList); dataObjectVOS.add(dataObjectVO); }); resultDataVO.setObject(dataObjectVOS); } } errorid = "0"; msg = "数据查询成功"; }catch (Throwable e){ e.printStackTrace();; msg="查询数据失败:"+e.getMessage(); }finally { resultDataVO.setErrorid(errorid); resultDataVO.setMsg(msg); } ResultVO resultVO=new ResultVO(); resultVO.setData(resultDataVO); if(dataType.equals("xml")){ //组织返回接口信息 XStream xStream = new XStream(new DomDriver()); xStream.processAnnotations(XMLResultSystemVO.class); xStream.autodetectAnnotations(true); resultStr = "\n" + xStream.toXML(resultDataVO); }else{ Object object = JSONObject.toJSON(resultVO); resultStr = object.toString(); } try { //记录日志 this.saveLogs(systemId, systemId, data, resultStr, issucess, msg, "queryClassify"); }catch (Throwable e){ e.printStackTrace(); } logger.info("返回参数:"+resultStr); return resultStr; } /*** * 查询校验分类信息 * @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<>(); conditionMap.put("id", classCode); VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap, CodeClassifyDO.class); List codeClassifyDOS = classifyService.selectByWrapper(wrapper); if (!CollectionUtils.isEmpty(codeClassifyDOS)) { CodeClassifyDO classifyDO = codeClassifyDOS.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(); logger.info("码段名称:"+name); logger.info("描述:"+sectypeText); CodeOrderSecDTO CodeOrderSecDTO = new CodeOrderSecDTO(); if (sectionVOMap.containsKey(name)) { CodeOrderSecDTO.setSecOid(codeBasicSecVO.getOid()); String sectypeValue = sectionVOMap.get(name); logger.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 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; } /*** * 记录日志信息 * @param systemId * @param parmaData * @param result * @return */ private void saveLogs(String systemId,String systemName,String parmaData, String result,boolean isSucess,String msg,String operation){ //记录日志信息 DockingLogeDO dockingLogeDO=new DockingLogeDO(); String oid=redisService.getUUIDEveryDay(); dockingLogeDO.setSystemcode(StringUtils.isBlank(systemId)?"-":systemId);//设置系统标识 dockingLogeDO.setSystemname(StringUtils.isBlank(systemName)?"-":systemName); dockingLogeDO.setMsg(msg);//日志消息 dockingLogeDO.setClassifyid("-");//分类编号 dockingLogeDO.setClassifyname("-");//分类名称 dockingLogeDO.setClassifyoid("-");//分类主键 dockingLogeDO.setUniquecode("-");//唯一标识 dockingLogeDO.setSystemoid("-");//系统标识 // dockingLogeDO.setName(operation); dockingLogeDO.setOid(oid);//日志主键 dockingLogeDO.setParamstring(parmaData);//参数信息 dockingLogeDO.setReturnstring(result);//返回信息 dockingLogeDO.setType(operation);//日志操作类型 if(isSucess) { dockingLogeDO.setInterfacestatus(MdmDuckingConstant.INTERFACE_STATUS_TRUE);//接口集成状态 }else{ dockingLogeDO.setInterfacestatus(MdmDuckingConstant.INTERFACE_STATUS_FALSE);//接口集成状态 } BatchCBO insert = dockingLogeDao.insert(dockingLogeDO); logger.info("集成推送数据成功,systemId:"+systemId+",systemname:"+systemName+",operation:"+operation+",param:"+parmaData); } }