package com.vci.ubcs.code.service.impl; import com.alibaba.fastjson.JSONObject; import com.vci.ubcs.code.constant.MdmBtmTypeConstant; import com.vci.ubcs.code.constant.MdmDuckingConstant; import com.vci.ubcs.code.constant.MdmEngineConstant; 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.enumpack.SysIntegrationAuthorityTypeEnum; import com.vci.ubcs.code.enumpack.SysIntegrationRequestTypeEnum; import com.vci.ubcs.code.enumpack.sysIntegrationPushTypeEnum; import com.vci.ubcs.code.mapper.*; import com.vci.ubcs.code.service.CodeClassifyServiceI; import com.vci.ubcs.code.service.MdmEngineServiceI; import com.vci.ubcs.code.service.SysIntBaseServiceI; import com.vci.ubcs.code.service.SysIntInfoServiceI; import com.vci.ubcs.code.utils.HttpUtils; import com.vci.ubcs.code.utils.WsErpClientUtil; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant; import com.vci.starter.revision.service.RevisionModelUtil; import com.vci.starter.web.constant.QueryOptionConstant; import com.vci.starter.web.exception.VciBaseException; import com.vci.starter.web.pagemodel.BaseResult; import com.vci.starter.web.pagemodel.DataGrid; import com.vci.starter.web.pagemodel.PageHelper; 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.util.VciDateUtil; import com.vci.starter.web.wrapper.VciQueryWrapperForDO; import com.vci.ubcs.code.entity.*; import com.vci.ubcs.code.vo.pagemodel.*; import com.vci.web.pageModel.BatchCBO; import com.vci.web.redis.RedisService; import com.vci.web.service.WebBoServiceI; import com.vci.web.util.WebUtil; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO; import com.vci.ubcs.code.dto.SysIntHeaderDTO; import com.vci.ubcs.code.dto.SysIntInfoDTO; import com.vci.ubcs.code.dto.SysIntParamDTO; import com.vci.ubcs.code.dto.UpdateSysInfoStatusDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*; /** * 系统集成基础信息服务 * @author lihang * @date 2022-03-07 */ @Service public class SysIntInfoServiceImpl implements SysIntInfoServiceI { @Value("${dataSyncPush.dataParamName:xmlData}") public String DATA_PARAM_NAME; /** * 日志 */ private Logger logger = LoggerFactory.getLogger(getClass()); /** * 数据操作层 */ @Resource private SysIntInfoMapper sysIntInfoMapper; /** * 业务类型操作的服务 */ @Autowired @Lazy private WebBoServiceI boService; /** * 对象的操作 */ @Autowired private RevisionModelUtil revisionModelUtil; /** * 系统集成中的系统信息服务 */ @Autowired private SysIntBaseServiceI sysIntBaseService; /** * 接口参数 */ @Autowired private SysIntParamMapper sysIntParamDaoI; /** * 接口验证信息 */ @Autowired private SysIntHeaderMapper sysIntHeaderDaoI; /** * 分类业务类型操作服务 */ @Autowired @Lazy private CodeClassifyServiceI codeClassifyServiceI; /** * 缓存服务 */ @Autowired private RedisService redisService; /** * 集成日志数据操作层 */ @Resource private DockingLogeMapper dockingLogeDaoI; @Resource private DockingTaskMapper dockingTaskDaoI; /** * 数据服务 */ @Autowired(required = false) @Lazy private MdmEngineServiceI mdmEngineServiceI; /** * 查询所有的系统集成基础信息 * @param conditionMap 查询条件 * @param pageHelper 分页和排序 * @return 执行结果 * @throws VciBaseException 查询条件和分页出错的时候会抛出异常 */ @Override public DataGrid gridSysIntInfo(Map conditionMap, PageHelper pageHelper) throws VciBaseException{ if (pageHelper == null) { pageHelper = new PageHelper(-1); } pageHelper.addDefaultDesc("createTime"); List doList = sysIntInfoMapper.selectByCondition(conditionMap,pageHelper); // Set targetIdList = doList.stream().map(SysIntInfoDO::getTargetSystemOid).collect(Collectors.toSet()); // Set sourceIdList = doList.stream().map(SysIntInfoDO::getSourceSystemOid).collect(Collectors.toSet()); // List oidList = new ArrayList<>(); // oidList.addAll(targetIdList); // oidList.addAll(sourceIdList); // if (!CollectionUtils.isEmpty(oidList)) { // List sysIntBaseVOList = (List) sysIntBaseService.listSysIntBaseByOids(oidList); // matchSysOid2BuildInfoDO(doList, sysIntBaseVOList); // } DataGrid dataGrid=new DataGrid(); if (!CollectionUtils.isEmpty(doList)) { dataGrid.setData(sysIntInfoDO2VOs(doList)); dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(sysIntInfoMapper.countByCondition(conditionMap)))); } return dataGrid; } /** * 根据BaseVO集合中的oid对InfoDO的目标系统主键、来源系统主键进行匹配,组装系统名称和系统标识 * @param doList 系统集成基础信息对象集合 * @param sysIntBaseVOList 系统集成系统信息集合 */ private void matchSysOid2BuildInfoDO(List doList, List sysIntBaseVOList) { doList.forEach(info -> { sysIntBaseVOList.stream().filter(vo -> { return info.getTargetSystemOid().equals(vo.getOid()); }).forEach(base -> { info.setTargetSysId(base.getId()); info.setTargetSysName(base.getName()); }); sysIntBaseVOList.stream().filter(vo -> { return info.getSourceSystemOid().equals(vo.getOid()); }).forEach(base -> { info.setSourceSysId(base.getId()); info.setSourceSysName(base.getName()); info.setAuthorityTypeText(SysIntegrationAuthorityTypeEnum.getTextByValue(info.getAuthorityType())); }); }); } @Override public List selectAll(Map conditonMap){ return sysIntInfoMapper.selectAll(conditonMap); } /** * 批量数据对象转换为显示对象 * @param sysIntInfoDOs 数据对象列表 * @return 显示对象 * @throws VciBaseException 参数为空或者不存在的时候会抛出异常 */ @Override public List sysIntInfoDO2VOs(Collection sysIntInfoDOs) throws VciBaseException{ List voList = new ArrayList(); if(!CollectionUtils.isEmpty(sysIntInfoDOs)){ for(SysIntInfoDO s: sysIntInfoDOs){ SysIntInfoVO vo = sysIntInfoDO2VO(s); if(vo != null){ voList.add(vo); } } } return voList; } /** * 数据对象转换为显示对象 * @param sysIntInfoDO 数据对象 * @return 显示对象 * @throws VciBaseException 拷贝属性出错的时候会抛出异常 */ @Override public SysIntInfoVO sysIntInfoDO2VO(SysIntInfoDO sysIntInfoDO) throws VciBaseException{ SysIntInfoVO vo = new SysIntInfoVO(); if(sysIntInfoDO != null){ BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntInfoDO,vo); //如果有lcstatus的类的话 vo.setPushTypeText(sysIntegrationPushTypeEnum.getTextByValue(vo.getPushType())); } return vo; } /** * 增加系统集成基础信息 * @param sysIntInfoDTO 系统集成基础信息数据传输对象 * @return 执行结果 * @throws VciBaseException 参数为空,唯一项,必输项不通过时会抛出异常 */ @Override public SysIntInfoVO addSave(SysIntInfoDTO sysIntInfoDTO) throws VciBaseException{ VciBaseUtil.alertNotNull(sysIntInfoDTO,"需要添加的数据对象"); checkColumnNotNull(sysIntInfoDTO); String sourcesystemoid = sysIntInfoDTO.getSourcesystemoid(); SysIntBaseVO sysIntBaseVO = sysIntBaseService.getObjectByOid(sourcesystemoid); sysIntInfoDTO.setSysbaseoid(sourcesystemoid); sysIntInfoDTO.setSysbaseid(sysIntBaseVO.getId()); sysIntInfoDTO.setSysbasename(sysIntBaseVO.getName()); sysIntInfoDTO.setUsedflag("true");//设置默认启用状态 //将DTO转换为DO SysIntInfoDO sysIntInfoDO = new SysIntInfoDO(); BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntInfoDTO,sysIntInfoDO); WebUtil.setPersistence(false);//不执行保存 BatchCBO batchCBO_update = new BatchCBO(); BatchCBO sysIntInfoBo= sysIntInfoMapper.insert(sysIntInfoDO); List sysIntParamDTOS= sysIntInfoDTO.getSysIntParamDTOs(); List sysIntParamDOS=new ArrayList<>(); if(!CollectionUtils.isEmpty(sysIntParamDTOS)) { sysIntParamDTOS.stream().forEach(sysIntParamDTO -> { SysIntParamDO sysIntParamDO = new SysIntParamDO(); sysIntParamDTO.setInfoOid(sysIntInfoDO.getOid()); BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntParamDTO, sysIntParamDO); sysIntParamDOS.add(sysIntParamDO); }); } List sysIntHeaderDTOs= sysIntInfoDTO.getSysIntHeaderDTOS(); List sysIntHeaderDOS = new ArrayList<>(); if(!CollectionUtils.isEmpty(sysIntHeaderDTOs)) { sysIntHeaderDTOs.stream().forEach(sysIntHeaderDTO -> { SysIntHeaderDO sysIntHeaderDO = new SysIntHeaderDO(); sysIntHeaderDTO.setInfoOid(sysIntInfoDO.getOid()); BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntHeaderDTO, sysIntHeaderDO); sysIntHeaderDOS.add(sysIntHeaderDO); }); } batchCBO_update.copyFromOther(sysIntInfoBo); //批量处理保存header对象 if(!CollectionUtils.isEmpty(sysIntHeaderDOS)) { BatchCBO sysIntHeaderBO = sysIntHeaderDaoI.batchInsert(sysIntHeaderDOS); batchCBO_update.copyFromOther(sysIntHeaderBO); } //批量处理保存Param对象 if(!CollectionUtils.isEmpty(sysIntParamDOS)) { BatchCBO sysIntParamBO = sysIntParamDaoI.batchInsert(sysIntParamDOS); batchCBO_update.copyFromOther(sysIntParamBO); } WebUtil.setPersistence(true); boService.persistenceBatch(batchCBO_update);//一起执行保存 return sysIntInfoDO2VO(sysIntInfoDO,sysIntHeaderDOS,sysIntParamDOS); } /** * * @param sysIntInfoDO * @param sysIntHeaderDOS * @param sysIntParamDOS * @return */ private SysIntInfoVO sysIntInfoDO2VO(SysIntInfoDO sysIntInfoDO, List sysIntHeaderDOS, List sysIntParamDOS) { SysIntInfoVO vo = new SysIntInfoVO(); if(sysIntInfoDO != null){ BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntInfoDO,vo); //如果有lcstatus的类的话 List sysIntParamVOs=new ArrayList<>(); if(!CollectionUtils.isEmpty(sysIntParamDOS)){ sysIntParamDOS.stream().forEach(sysIntParamDO -> { SysIntParamVO sysIntParamVO=new SysIntParamVO(); BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntParamDO,sysIntParamVO); sysIntParamVOs.add(sysIntParamVO); }); vo.setSysIntParamVOs(sysIntParamVOs); } List sysIntHeaderVOs=new ArrayList<>(); if(!CollectionUtils.isEmpty(sysIntHeaderDOS)){ sysIntHeaderDOS.stream().forEach(sysIntHeaderDO -> { SysIntHeaderVO sysIntHeaderVO=new SysIntHeaderVO(); BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntHeaderDO,sysIntHeaderVO); sysIntHeaderVOs.add(sysIntHeaderVO); }); vo.setSysIntHeaderVOs(sysIntHeaderVOs); } } return vo; } /** * 系统集成接口基础信息Null字段检验 * @param sysIntInfoDTO 系统集成基础信息数据传输对象 * @throws VciBaseException 参数为空,唯一项,必输项不通过时会抛出异常 */ private void checkColumnNotNull(SysIntInfoDTO sysIntInfoDTO) throws VciBaseException { if (SysIntegrationRequestTypeEnum.HTTP.getValue().equals(sysIntInfoDTO.getInterfacetype())){ VciBaseUtil.alertNotNull(sysIntInfoDTO.getRequesturl(),"HTTP接口的请求地址",sysIntInfoDTO.getRequestmethod(),"HTTP接口的请求方式"); } if (SysIntegrationRequestTypeEnum.WEB_SERVICE.getValue().equals(sysIntInfoDTO.getInterfacetype())){ VciBaseUtil.alertNotNull(sysIntInfoDTO.getInterfaceFunction(),"WebService的接口函数"); } if (SysIntegrationRequestTypeEnum.CLASSPATH.getValue().equals(sysIntInfoDTO.getInterfacetype())){ VciBaseUtil.alertNotNull(sysIntInfoDTO.getClassPath(),"类路径"); } } /** * 修改系统集成基础信息 * @param sysIntInfoDTO 系统集成基础信息数据传输对象 * @return 执行结果 * @throws VciBaseException 参数为空,唯一项,必输项不通过时会抛出异常 */ @Override public SysIntInfoVO editSave(SysIntInfoDTO sysIntInfoDTO) throws VciBaseException{ VciBaseUtil.alertNotNull(sysIntInfoDTO,"数据对象",sysIntInfoDTO.getOid(),"系统集成基础信息主键"); String sourcesystemoid = sysIntInfoDTO.getSourcesystemoid(); SysIntBaseVO sysIntBaseVO = sysIntBaseService.getObjectByOid(sourcesystemoid); sysIntInfoDTO.setSysbaseoid(sourcesystemoid); sysIntInfoDTO.setSysbaseid(sysIntBaseVO.getId()); sysIntInfoDTO.setSysbasename(sysIntBaseVO.getName()); //将DTO转换为DO SysIntInfoDO sysIntInfoDO = selectByOid(sysIntInfoDTO.getOid()); revisionModelUtil.copyFromDTOIgnore(sysIntInfoDTO,sysIntInfoDO); String sysInfoOid=sysIntInfoDO.getOid(); List sysIntParamDTOS= sysIntInfoDTO.getSysIntParamDTOs(); List sysIntParamDOS=new ArrayList<>(); if(!CollectionUtils.isEmpty(sysIntParamDTOS)) { sysIntParamDTOS.stream().forEach(sysIntParamDTO -> { SysIntParamDO sysIntParamDO = new SysIntParamDO(); BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntParamDTO, sysIntParamDO); sysIntParamDOS.add(sysIntParamDO); }); } List sysIntHeaderDTOs= sysIntInfoDTO.getSysIntHeaderDTOS(); List sysIntHeaderDOS = new ArrayList<>(); if(!CollectionUtils.isEmpty(sysIntHeaderDTOs)) { sysIntHeaderDTOs.stream().forEach(sysIntHeaderDTO -> { SysIntHeaderDO sysIntHeaderDO = new SysIntHeaderDO(); BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntHeaderDTO, sysIntHeaderDO); sysIntHeaderDOS.add(sysIntHeaderDO); }); } WebUtil.setPersistence(false);//不执行保存 BatchCBO batchCBO_update = new BatchCBO(); BatchCBO sysIntInfoBo= sysIntInfoMapper.updateByPrimaryKey(sysIntInfoDO); batchCBO_update.copyFromOther(sysIntInfoBo); //批量处理保存header对象 if(!CollectionUtils.isEmpty(sysIntHeaderDOS)) { List idList=new ArrayList<>(); List headers_old = getHeadersBySystemInfoOid(sysInfoOid); for (SysIntHeaderDO sysIntHeaderDO:headers_old){ sysIntHeaderDO.setUsedflag(MdmDuckingConstant.FLAG_FAIL); idList.add(sysIntHeaderDO.getOid()); } if(idList.size()!=0){ BatchCBO sysIntHeaderDeleteBO = sysIntHeaderDaoI.batchDeleteByOids(idList); batchCBO_update.copyFromOther(sysIntHeaderDeleteBO); } //再新增headers for(SysIntHeaderDO sysIntHeaderDO:sysIntHeaderDOS){ sysIntHeaderDO.setUsedflag(MdmDuckingConstant.FLAG_TRUE); sysIntHeaderDO.setInfoOid(sysIntInfoDTO.getOid()); } BatchCBO batchCBO_insert = sysIntHeaderDaoI.batchInsert(sysIntHeaderDOS); batchCBO_update.copyFromOther(batchCBO_insert); } //批量处理保存Param对象 if(!CollectionUtils.isEmpty(sysIntParamDOS)) { //先删除params_old List idList=new ArrayList<>(); List params_old = getParamsBySystemInfoOid(sysInfoOid); for (SysIntParamDO sysIntParamDO:params_old){ sysIntParamDO.setUsedflag(MdmDuckingConstant.FLAG_FAIL); idList.add(sysIntParamDO.getOid()); } if(idList.size()!=0){ BatchCBO sysIntParamDeleteBO = sysIntParamDaoI.batchDeleteByOids(idList); batchCBO_update.copyFromOther(sysIntParamDeleteBO); } //再新增params for(SysIntParamDO sysIntParamDOi:sysIntParamDOS){ sysIntParamDOi.setUsedflag(MdmDuckingConstant.FLAG_TRUE); sysIntParamDOi.setInfoOid(sysIntInfoDTO.getOid()); } BatchCBO sysIntParamBO = sysIntParamDaoI.batchInsert(sysIntParamDOS); batchCBO_update.copyFromOther(sysIntParamBO); } WebUtil.setPersistence(true);//不执行保存 boService.persistenceBatch(batchCBO_update);//一起执行保存 return sysIntInfoDO2VO(sysIntInfoDO,sysIntHeaderDOS,sysIntParamDOS); } /** * 校验是否可以删除,如果存在下级,并且下级有数据引用则不能删除 * @param sysIntInfoDTO 数据传输对象 * @param sysIntInfoDO 数据库中的数据对象 * @return success为true为可以删除,false表示有数据引用,obj为true表示有下级 */ private BaseResult checkIsCanDeleteForDO(SysIntInfoDTO sysIntInfoDTO, SysIntInfoDO sysIntInfoDO) { SysIntInfoDO tsDO = new SysIntInfoDO(); BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntInfoDTO,tsDO); boService.checkTs(tsDO); if(!checkIsLinked(sysIntInfoDO.getOid())) { return BaseResult.success(); }else{ return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""}); } } /** * 校验是否被引用 * @param oid 主键 * @throws VciBaseException 被引用的时候会抛出异常 */ private boolean checkIsLinked(String oid) throws VciBaseException{ //TODO 添加需要校验引用的地方 return false; } /** * 删除系统集成基础信息 * @param sysIntInfoDTO 系统集成基础信息数据传输对象,oid和ts需要传输 * @return 删除结果反馈::success:成功,fail:失败 * @throws VciBaseException 参数为空,被引用时抛出异常 */ @Override public BaseResult deleteSysIntInfo(SysIntInfoDTO sysIntInfoDTO) throws VciBaseException{ VciBaseUtil.alertNotNull(sysIntInfoDTO,"系统集成基础信息数据对象",sysIntInfoDTO.getOid(),"系统集成基础信息的主键"); SysIntInfoDO sysIntInfoDO = selectByOid(sysIntInfoDTO.getOid()); BaseResult baseResult = checkIsCanDeleteForDO(sysIntInfoDTO,sysIntInfoDO); if(baseResult.isSuccess()) { }else{ return baseResult; } WebUtil.setPersistence(false); BatchCBO batchCBO_update = new BatchCBO(); //执行删除操作 BatchCBO batchCBO = sysIntInfoMapper.deleteByPrimaryKey(sysIntInfoDO.getOid()); batchCBO_update.copyFromOther(batchCBO); List sysIntHeaderDOS=sysIntHeaderDaoI.selectBySysinfoOid(sysIntInfoDO.getOid()); if(!CollectionUtils.isEmpty(sysIntHeaderDOS)){ ListheaderIdList=new ArrayList<>(); sysIntHeaderDOS.stream().forEach(sysIntHeaderDO -> { headerIdList.add(sysIntHeaderDO.getOid()); }); BatchCBO headerBO=sysIntHeaderDaoI.batchDeleteByOids(headerIdList); batchCBO_update.copyFromOther(headerBO); } List sysIntParamDOS=sysIntParamDaoI.selectBySysinfoOid (sysIntInfoDO.getOid()); if(!CollectionUtils.isEmpty(sysIntParamDOS)){ ListparamIdList=new ArrayList<>(); sysIntParamDOS.stream().forEach(sysIntParamDO -> { paramIdList.add(sysIntParamDO.getOid()); }); BatchCBO paramBO= sysIntParamDaoI.batchDeleteByOids(paramIdList); batchCBO_update.copyFromOther(paramBO); } WebUtil.setPersistence(true); boService.persistenceBatch(batchCBO_update);//一起执行保存 return (batchCBO_update!=null && batchCBO_update.getDeleteCbos() !=null &&batchCBO_update.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL); } /** * 主键获取系统集成基础信息 * @param oid 主键 * @return 系统集成基础信息显示对象 * @throws VciBaseException 参数为空,数据不存在时会抛出异常 */ @Override public SysIntInfoVO getObjectByOid(String oid) throws VciBaseException{ SysIntInfoDO sysIntInfoDO= selectByOid(oid); List sysIntHeaderDOS=sysIntHeaderDaoI.selectBySysinfoOid(oid.trim()); List sysIntParamDOS=sysIntParamDaoI.selectBySysinfoOid(oid.trim()); return sysIntInfoDO2VO(sysIntInfoDO,sysIntHeaderDOS,sysIntParamDOS); } /** * 主键查询数据对象 * @param oid 主键 * @return 数据对象 * @throws VciBaseException 参数为空,并且数据不存在的时候会抛出异常 */ private SysIntInfoDO selectByOid(String oid) throws VciBaseException{ VciBaseUtil.alertNotNull(oid,"主键"); SysIntInfoDO sysIntInfoDO = sysIntInfoMapper.selectByPrimaryKey(oid.trim()); if(sysIntInfoDO == null || StringUtils.isBlank(sysIntInfoDO.getOid())){ throw new VciBaseException(DATA_OID_NOT_EXIST); } return sysIntInfoDO; } /** * 主键批量获取系统集成基础信息 * @param oidCollections 主键集合,但是受性能影响,建议一次查询不超过10000个 * @return 系统集成基础信息显示对象 * @throws VciBaseException 查询出现异常时会抛出 */ @Override public Collection listSysIntInfoByOids(Collection oidCollections) throws VciBaseException{ VciBaseUtil.alertNotNull(oidCollections,"数据对象主键集合"); List sysIntInfoDOList = listSysIntInfoDOByOidCollections(oidCollections); return sysIntInfoDO2VOs(sysIntInfoDOList); } /** * 使用主键集合查询数据对象 * @param oidCollections 主键的集合 * @return 数据对象列表 */ private List listSysIntInfoDOByOidCollections(Collection oidCollections){ List sysIntInfoDOList = new ArrayList(); if(!CollectionUtils.isEmpty(oidCollections)){ Collection> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections); for(Collection oids: oidCollectionsList){ List tempDOList = sysIntInfoMapper.selectByPrimaryKeyCollection(oids); Set oidSet = tempDOList.stream().map(SysIntInfoDO::getTargetSystemOid).collect(Collectors.toSet()); oidSet.addAll(tempDOList.stream().map(SysIntInfoDO::getSourceSystemOid).collect(Collectors.toSet())); List baseVOList = (List) sysIntBaseService.listSysIntBaseByOids(oidSet); matchSysOid2BuildInfoDO(tempDOList,baseVOList); if(!CollectionUtils.isEmpty(tempDOList)){ sysIntInfoDOList.addAll(tempDOList); } } } return sysIntInfoDOList; } /** * 参照系统集成基础信息列表 * @param conditionMap 查询条件 * @param pageHelper 分页和排序 * @return 系统集成基础信息显示对象列表,生效的内容 * @throws VciBaseException 查询条件和分页出错的时候会抛出异常 */ @Override public DataGrid refDataGridSysIntInfo(Map conditionMap, PageHelper pageHelper) throws VciBaseException{ if(conditionMap == null){ conditionMap = new HashMap(); } return gridSysIntInfo(conditionMap,pageHelper); } /** * 当前接口信息是否有使用目标信息 * @param sysOid 系统Oid * @param authorityOid 认证方式Oid * @return true = 在使用 ;false = 未使用 * @throws VciBaseException 查询条件和分页出错的时候会抛出异常 */ @Override public boolean isAlreadyUse(String sysOid, String authorityOid) throws VciBaseException { Map conditionMap = new HashMap<>(); if (StringUtils.isNotBlank(sysOid)){ conditionMap.put("sourceSystemOid",sysOid); Long countSource = sysIntInfoMapper.countByCondition(conditionMap); if (countSource > 0){ return true; } conditionMap.clear(); conditionMap.put("targetSystemOid",sysOid); Long countTarget = sysIntInfoMapper.countByCondition(conditionMap); if (countTarget > 0){ return true; } conditionMap.clear(); } if (StringUtils.isNotBlank(authorityOid)){ conditionMap.put("authorityOid",authorityOid); Long countAuthority = sysIntInfoMapper.countByCondition(conditionMap); if (countAuthority > 0){ return true; } } return false; } //=========以下系统参数和验证信息 /** * 根据系统信息查询接口param * @param sysInfoOid * @return */ @Override public List getParamsBySystemInfoOid(String sysInfoOid){ VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(SysIntParamDO.class); queryWrapper.addQueryMap("infoOid",sysInfoOid); queryWrapper.addQueryMap("usedflag", MdmDuckingConstant.FLAG_TRUE); List all_params = sysIntParamDaoI.selectByWrapper(queryWrapper); return all_params; } /** * 1、先删除以前所有param * 2、再查询传入的所有param * @return */ @Override public BaseResult updateParams(String sysInfoOid,List params){ //先作废所有的params_old List params_old = getParamsBySystemInfoOid(sysInfoOid); for (SysIntParamDO sysIntParamDO:params_old){ sysIntParamDO.setUsedflag(MdmDuckingConstant.FLAG_FAIL); } WebUtil.setPersistence(false);//不执行保存 BatchCBO batchCBO_update = new BatchCBO(); if(params_old.size()!=0){ batchCBO_update = sysIntParamDaoI.batchUpdate(params_old); } if(params!=null&¶ms.size()!=0) { //再新增params for(SysIntParamDO sysIntParamDOi:params){ sysIntParamDOi.setUsedflag(MdmDuckingConstant.FLAG_TRUE); } BatchCBO batchCBO_insert = sysIntParamDaoI.batchInsert(params); batchCBO_update.copyFromOther(batchCBO_insert); } WebUtil.setPersistence(true);//执行保存 boService.persistenceBatch(batchCBO_update);//一起执行保存 return BaseResult.success("保存成功!"); } /** * 根据系统信息查询接口header * @param sysInfoOid * @return */ @Override public List getHeadersBySystemInfoOid(String sysInfoOid){ VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(SysIntHeaderDO.class); queryWrapper.addQueryMap("infoOid",sysInfoOid); queryWrapper.addQueryMap("usedflag", MdmDuckingConstant.FLAG_TRUE); List all_headers = sysIntHeaderDaoI.selectByWrapper(queryWrapper); return all_headers; } /** * 1、先删除以前所有header * 2、再查询传入的所有header * @return */ @Override public BaseResult updateHeaders(String sysInfoOid,List headers){ //先作废所有的headers_old List headers_old = getHeadersBySystemInfoOid(sysInfoOid); for (SysIntHeaderDO sysIntHeaderDO:headers_old){ sysIntHeaderDO.setUsedflag(MdmDuckingConstant.FLAG_FAIL); } WebUtil.setPersistence(false);//不执行保存 BatchCBO batchCBO_update = new BatchCBO(); if(headers_old.size()!=0){ batchCBO_update = sysIntHeaderDaoI.batchUpdate(headers_old); } if(headers!=null&&headers.size()!=0) { //再新增headers for(SysIntHeaderDO sysIntHeaderDO:headers){ sysIntHeaderDO.setUsedflag(MdmDuckingConstant.FLAG_TRUE); } BatchCBO batchCBO_insert = sysIntHeaderDaoI.batchInsert(headers); batchCBO_update.copyFromOther(batchCBO_insert); } WebUtil.setPersistence(true);//执行保存 boService.persistenceBatch(batchCBO_update);//一起执行保存 return BaseResult.success("保存成功!"); } @Override public List getSysInfoByClassifyOid(String[] classifyOids) { return null; } /*** *设置是否启用/停用 * @param sysInfoStatusDTO * @return */ @Override public BaseResult updateStatus(UpdateSysInfoStatusDTO sysInfoStatusDTO){ VciBaseUtil.alertNotNull(sysInfoStatusDTO.getOid(),"数据对象",sysInfoStatusDTO.getOid(),"系统集成基础信息主键"); SysIntInfoDO sysIntInfoDO = selectByOid(sysInfoStatusDTO.getOid()); try { sysIntInfoDO.setTs(VciDateUtil.str2Date(sysInfoStatusDTO.getTs(), VciDateUtil.DateTimeFormat)); } catch (Exception e) { e.printStackTrace(); } if(sysInfoStatusDTO.getUpdate().equals("disable")) { sysIntInfoDO.setUsedflag("false"); }else{ sysIntInfoDO.setUsedflag("true"); } sysIntInfoMapper.updateByPrimaryKey(sysIntInfoDO); return BaseResult.success(); } /*** * 推送分类/数据 * @param sysIntInfoDTO * @return * @throws VciBaseException */ @Override public BaseResult pushData(SysIntInfoDTO sysIntInfoDTO) throws VciBaseException { VciBaseUtil.alertNotNull(sysIntInfoDTO,"数据对象",sysIntInfoDTO.getOid(),"系统集成基础信息主键"); boolean issuccess=false; String type="数据推送"; if(sysIntInfoDTO.getPushType().equalsIgnoreCase("1")){//推送数据 pushDockingTasks(sysIntInfoDTO); }else if(sysIntInfoDTO.getPushType().equalsIgnoreCase("2")){//推送分类 issuccess= pushClsfDatas(sysIntInfoDTO); type="分类推送"; } return issuccess?BaseResult.successMsg(type+"成功!"):BaseResult.successMsg(type+"失败!"); } private BaseResult pushDockingTasks(SysIntInfoDTO sysIntInfoDTO) { String msg="数据推送到定时任务成功!"; try { SysIntInfoVO sysIntInfoVO = getObjectByOid(sysIntInfoDTO.getOid()); String codeClassifyOid = sysIntInfoVO.getClassifyoid(); CodeClassifyTemplateVO templateVO = mdmEngineServiceI.getUsedTemplateByClassifyOid(codeClassifyOid); CodeClassifyVO topClassifyVO = codeClassifyServiceI.getTopClassifyVO(codeClassifyOid); String btmTypeId = topClassifyVO.getBtmtypeid(); if (StringUtils.isBlank(btmTypeId)) { return BaseResult.fail("这个分类所属顶层分类没有添加业务类型"); } List codeClassifyIdPathVOS = codeClassifyServiceI.listChildrenClassify(topClassifyVO.getOid(), true, "id", false); List codeClassifynamePathVOS = codeClassifyServiceI.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 (!codeClassifyServiceI.checkHasChild(codeClassifyOid)) { conditionMap.put(MdmEngineConstant.CODE_CLASSIFY_OID_FIELD, codeClassifyOid); } else { conditionMap.put(MdmEngineConstant.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 = mdmEngineServiceI.getSqlByTemplateVO(btmTypeId, templateVO, conditionMap, pageHelper); List maps = boService.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); DockingTaskDO dockingTaskDO = new DockingTaskDO(); dockingTaskDO.setOid(date2Str +"_"+id); dockingTaskDO.setSendflag(MdmDuckingConstant.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(sysIntInfoVO.getOid());//intinfo的oid dockingTaskDO.setSystemoid(sysIntInfoVO.getSysbaseoid());//系统oid dockingTaskDO.setSystemcode(sysIntInfoVO.getSysbaseid());//系统编码 dockingTaskDO.setSystemname(sysIntInfoVO.getSysbasename());//系统name dockingTaskDO_insert.add(dockingTaskDO); }); } BatchCBO bo = dockingTaskDaoI.batchInsert(dockingTaskDO_insert); }catch (Throwable e){ msg="数据推送到定时任务失败!"; logger.error("数据推送到定时任务失败!"+e); e.printStackTrace(); }finally { logger.info(msg); return BaseResult.successMsg("数据推送到定时任务成功!"); } } 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(); } /*** * 分类推送集成 * @param sysIntInfoDTO * @return */ private boolean pushClsfDatas(SysIntInfoDTO sysIntInfoDTO){ SysIntInfoVO sysIntInfoVO= getObjectByOid(sysIntInfoDTO.getOid()); String classOid= sysIntInfoVO.getClassifyoid(); List listChildrenClassify= codeClassifyServiceI.listChildrenClassify(classOid,true,"id",false); ListnodeClassifyDTOList=new ArrayList<>(); JsonRootDataDTO jsonRootDataDTO=new JsonRootDataDTO(); NodeDataDTO nodeDataDTO=new NodeDataDTO(); //每个task一个事务,开启 WebUtil.setPersistence(false); BatchCBO batchCBO = new BatchCBO(); 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 = codeClassifyServiceI.getTopClassifyVO(classOid); nodeLibraryDTO.setId(rootClassify.getOid()); nodeLibraryDTO.setName(rootClassify.getName()); nodeDataDTO.setLibrary(nodeLibraryDTO); jsonRootDataDTO.setData(nodeDataDTO); String paramType = sysIntInfoDTO.getParamtype();//xml/json if (paramType.equals(MdmDuckingConstant.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, sysIntInfoVO, batchCBO); isSuccess=true; } }catch (Throwable e){ e.printStackTrace(); isSuccess=false; }finally { //每一个task一个事物 WebUtil.setPersistence(true); boService.persistenceBatch(batchCBO); return true; } } /*** * 调用接口 * @param sysIntInfoVO * @throws Throwable */ private void callInterface(String sendString , SysIntInfoVO sysIntInfoVO,BatchCBO batchCBO) throws Throwable{ String paramString = ""; String backString = ""; String msg=""; String url = sysIntInfoVO.getRequesturl();//url List resultNodeObjectDTOS =new ArrayList<>(); try { String type = sysIntInfoVO.getInterfacetype().toLowerCase(Locale.ROOT);//get/post/webserver/corba String paramType = sysIntInfoVO.getParamtype();//xml/json String returnType = sysIntInfoVO.getReturntype();//xml/json String requestmethod= sysIntInfoVO.getRequestmethod(); String interfaceFunction = sysIntInfoVO.getInterfaceFunction();//主要是webservice的方法名 String namespace = sysIntInfoVO.getNamespace();//namespace String soapaction = sysIntInfoVO.getSoapaction();//soapaction String targName = sysIntInfoVO.getTargName();//targName String cxfaxis = sysIntInfoVO.getCxfaxis();//webservice是cxf/axis //查询param List sysIntParamVOList = sysIntInfoVO.getSysIntParamVOs(); //查询header List sysIntHeaderVOList =sysIntInfoVO.getSysIntHeaderVOs(); if(type.equals(MdmDuckingConstant.URLTYPE_HTTP)) { if (requestmethod.equals(MdmDuckingConstant.URLTYPE_GET)) {//GET请求 String sendurl = url + "?" + DATA_PARAM_NAME + "=" + sendString; //拼接param for (SysIntParamVO sysIntParamVO : sysIntParamVOList) { sendurl = sendurl + "&" + sysIntParamVO.getParamkey() + "=" + sysIntParamVO.getParamvalue(); } paramString = sendurl; backString = HttpUtils.get(sendurl); } else if (requestmethod.equals(MdmDuckingConstant.URLTYPE_POST)) {//POST请求 MultiValueMap params = new LinkedMultiValueMap<>(); if(!CollectionUtils.isEmpty(sysIntParamVOList)) { for (SysIntParamVO 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 (SysIntHeaderVO sysIntHeaderVO : sysIntHeaderVOList) { headers.add(sysIntHeaderVO.getHeaderkey(), sysIntHeaderVO.getHeaderalue()); } } backString = HttpUtils.post(url, params, headers); } if(backString.startsWith("\"")){ backString=backString.substring(backString.indexOf("\"")+1); } if(backString.endsWith("\"")){ backString=backString.substring(0,backString.lastIndexOf("\"")); } if(backString.contains("\n")){ String res="\n"; backString= backString.replaceAll(res,""); } if(backString.contains("\\")){ String res="\\\\\""; backString= backString.replaceAll(res,"\"").trim(); } }else if (type.equals(MdmDuckingConstant.URLTYPE_WEBSERVICE)) {//webserver请求 MultiValueMap params = new LinkedMultiValueMap<>(); for (SysIntParamVO sysIntParamVO : sysIntParamVOList) { params.add(sysIntParamVO.getParamkey(), sysIntParamVO.getParamvalue()); } paramString = sendString; MultiValueMap headers = new LinkedMultiValueMap<>(); for (SysIntHeaderVO sysIntHeaderVO : sysIntHeaderVOList) { headers.add(sysIntHeaderVO.getHeaderkey(), sysIntHeaderVO.getHeaderalue()); } backString = WsErpClientUtil.sendMsg(url, namespace, soapaction, interfaceFunction, targName, sendString, 10000); } else {//corba接口 //paramString=sendString; // backString = jacorbClient.getBOFactoryService().sendCode(sendString); } ResultJsonDTO resultJsonDTO = new ResultJsonDTO(); if(returnType.equals(MdmDuckingConstant.DATATYPE_JSON)){ resultJsonDTO =JSONObject.toJavaObject(JSONObject.parseObject(backString), ResultJsonDTO.class); }else { //组织返回接口信息 XStream xStream = new XStream(new DomDriver()); xStream.processAnnotations(ResultNodeDataDTO.class); xStream.autodetectAnnotations(true); ResultNodeDataDTO resultNodeDataDTO = (ResultNodeDataDTO) xStream.fromXML(backString); resultJsonDTO.setData(resultNodeDataDTO); } ResultNodeDataDTO resultNodeDataDTO=resultJsonDTO.getData(); resultNodeObjectDTOS=resultNodeDataDTO.getObject(); }catch (Throwable e){ msg="调用接口失败:"+e; e.printStackTrace(); // throw new Throwable("调用接口失败:"+e); ResultNodeObjectDTO resultNodeObjectDTO=new ResultNodeObjectDTO(); resultNodeObjectDTO.setErroid("1"); resultNodeObjectDTO.setMsg(msg); resultNodeObjectDTO.setCode(sysIntInfoVO.getClassifyid()); resultNodeObjectDTO.setOid(sysIntInfoVO.getClassifyoid()); resultNodeObjectDTOS.add(resultNodeObjectDTO); }finally { boolean isSend = false; for (ResultNodeObjectDTO resultNodeObjectDTO:resultNodeObjectDTOS){ String erroid = resultNodeObjectDTO.getErroid(); msg = resultNodeObjectDTO.getMsg(); if("0".equals(erroid)){ isSend = true; }else if("1".equals(erroid)){ isSend=false; }else{ isSend=false; } DockingLogeDO dockingLogeDO = new DockingLogeDO(); String oid=redisService.getUUIDEveryDay(); dockingLogeDO.setOid(oid); dockingLogeDO.setSystemcode(sysIntInfoVO.getSysbaseid()); dockingLogeDO.setSystemname(sysIntInfoVO.getSysbasename()); dockingLogeDO.setSystemoid(sysIntInfoVO.getSysbaseoid()); dockingLogeDO.setClassifyoid(sysIntInfoVO.getClassifyoid()); dockingLogeDO.setClassifyid(sysIntInfoVO.getClassifyid()); dockingLogeDO.setClassifyname(sysIntInfoVO.getClassifyname()); dockingLogeDO.setId(sysIntInfoVO.getId()); dockingLogeDO.setUniquecode(""); dockingLogeDO.setInterfacestatus(isSend?"true":"false"); dockingLogeDO.setParamstring(paramString); dockingLogeDO.setType(MdmDuckingConstant.DATA_LOGE_OUT); dockingLogeDO.setReturnstring(backString); dockingLogeDO.setMsg(msg); logger.info("集成推送数据,systemcode:"+sysIntInfoVO.getSysbaseid()+",systemname:"+sysIntInfoVO.getSysbasename()+",url:"+url+",param:"+paramString+",e:"+msg); BatchCBO dockingLogeDOBo = dockingLogeDaoI.insert(dockingLogeDO); batchCBO.copyFromOther(dockingLogeDOBo); } } } private void initData(String rootClassOid , Map clsfOidIdMap,Map clsfOidNameMap){ TreeQueryObject treeQueryObject=new TreeQueryObject(); treeQueryObject.setParentOid(rootClassOid); treeQueryObject.setQueryAllLevel(true); List codeClassifyDOList=codeClassifyServiceI.selectCodeClassifyDOByTree(treeQueryObject); if(!CollectionUtils.isEmpty(codeClassifyDOList)){ codeClassifyDOList.stream().forEach(codeClassify->{ String id=codeClassify.getId(); String name=codeClassify.getName(); }); } } }