package com.vci.web.service.impl; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ZipUtil; import com.vci.bo.ItemSeniorQueryBO; import com.vci.common.utility.ObjectUtility; import com.vci.constant.FrameWorkLangCodeConstant; import com.vci.corba.common.PLException; import com.vci.corba.omd.qtm.QTD; import com.vci.corba.omd.qtm.QTInfo; import com.vci.corba.portal.PortalService.GetPagePortalVIArrayByPageInfoResult; import com.vci.corba.portal.data.PortalVI; import com.vci.dto.*; import com.vci.enumpck.UI.ItemTypeEnum; import com.vci.model.PRMDO; import com.vci.model.PRMItemDO; import com.vci.pagemodel.*; import com.vci.po.PortalVIPO; import com.vci.po.QTDPO; import com.vci.starter.poi.bo.ReadExcelOption; import com.vci.starter.poi.bo.WriteExcelData; import com.vci.starter.poi.bo.WriteExcelOption; import com.vci.starter.poi.util.ExcelUtil; import com.vci.starter.web.exception.VciBaseException; import com.vci.starter.web.pagemodel.BaseQueryObject; import com.vci.starter.web.pagemodel.BaseResult; import com.vci.starter.web.pagemodel.DataGrid; import com.vci.starter.web.util.LocalFileUtil; import com.vci.starter.web.util.VciBaseUtil; import com.vci.web.enumpck.PortalVIType; import com.vci.web.enumpck.PortalVITypeFlag; import com.vci.web.service.OsAttributeServiceI; import com.vci.web.service.OsPortalVIServiceI; import com.vci.web.service.OsQuereyTemplateServiceI; import com.vci.web.util.PlatformClientUtil; import com.vci.web.util.UITools; import com.vci.web.util.WebUtil; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; /* * 表单/表格服务 * @author xiej * @date 2024-08-14 */ @Service public class OsPortalVIServiceImpl implements OsPortalVIServiceI { /** * 日志 */ private Logger logger = LoggerFactory.getLogger(getClass()); /** * 加载自身 */ @Autowired(required = false) @Lazy private OsPortalVIServiceI self; /** * 加载自身 */ @Autowired(required = false) private OsAttributeServiceI osAttributeService; /** * 平台的调用工具类 */ @Autowired private PlatformClientUtil platformClientUtil; /** * 查询模板服务 */ @Autowired private OsQuereyTemplateServiceI quereyTemplateServiceI; @Override public void clearCache() { } /** * viType :Form("Form", "表单", (short)1), Table("Table", "表格", (short)0); * viTypeFlag: LinkType("LinkType", "链接类型的表单", (short)1), BtmType("BtmType", "业务类型的表单", (short)0); * @param baseQueryObject 查询对象 * @return */ @Override public DataGrid gridPortalVIVOs(BaseQueryObject baseQueryObject) { Map conditionMap= baseQueryObject.getConditionMap(); if(conditionMap==null){ conditionMap=new HashMap<>(); } String typeName=StringUtils.isBlank(conditionMap.get("typeName"))?"":conditionMap.get("typeName"); if(StringUtils.isBlank(typeName)){ return new DataGrid<>("没有选择业务类型"); } String viName=StringUtils.isBlank(conditionMap.get("viName"))?"":conditionMap.get("viName"); String viTypeLabel=StringUtils.isBlank(conditionMap.get("viType"))?"":conditionMap.get("viType"); PortalVIType portalVIType= PortalVIType.getByName(viTypeLabel); Short viType=-1; if(portalVIType!=null){ viType=portalVIType.getIntVal(); } String viTypeFlagLabel=StringUtils.isBlank(conditionMap.get("viTypeFlag"))?"":conditionMap.get("viTypeFlag"); PortalVITypeFlag portalVITypeFlag= PortalVITypeFlag.getByName(viTypeFlagLabel); Short viTypeFlag=-1; if(portalVITypeFlag!=null){ viTypeFlag=portalVITypeFlag.getIntVal(); } long pageIndex=baseQueryObject.getPage(); long pageSize=baseQueryObject.getLimit(); if(pageSize==-1){ pageSize=25; } DataGrid dataGrid = new DataGrid<>(); try { GetPagePortalVIArrayByPageInfoResult pagePortalVIArrayByPageInfoResult = platformClientUtil.getPortalService().getPagePortalVIArrayByPageInfo(typeName,viName,viType,viTypeFlag,pageIndex,pageSize); if(pagePortalVIArrayByPageInfoResult.total>0) { PortalVI[] portalVIS = pagePortalVIArrayByPageInfoResult.returnValue; List portalVIVOS = portalVIDOO2VOS(Arrays.asList(portalVIS)); dataGrid.setData(portalVIVOS); dataGrid.setTotal(pagePortalVIArrayByPageInfoResult.total); }else{ dataGrid = new DataGrid<>(); } } catch (PLException e) { e.printStackTrace(); dataGrid = new DataGrid<>("沒有表单出现异常:"+e.getMessage()); } return dataGrid; } /*** * 表单/表格添加 * @param portalVIDTO * @return * @throws PLException */ @Override public BaseResult addSave(PortalVIDTO portalVIDTO) throws VciBaseException { return savePortalVIDTO(portalVIDTO,false); } /** * 根据表单id获取具体数据 * @param id * @param viType * @return * @throws VciBaseException */ @Override public PortalVIVO getPortalVIById(String id,String viType) throws PLException { VciBaseUtil.alertNotNull(id,"主键"); String lableName=PortalVIType.Form.getLabel(); if(PortalVIType.Table.getName()==viType){ lableName=PortalVIType.Table.getLabel(); } PortalVIVO portalVIVO = null; PortalVI portalVI = platformClientUtil.getPortalService().getPortalVIById(id); if(portalVI==null||StringUtils.isBlank(portalVI.id)){ throw new VciBaseException("根据主键未查询到数据"); } portalVIVO = portalVIDOO2VO(portalVI); return portalVIVO; } /*** * 表单/表格更改 * @param portalVIDTO * @return * @throws PLException */ @Override public BaseResult editSave(PortalVIDTO portalVIDTO) throws VciBaseException { return savePortalVIDTO(portalVIDTO,true); } @Override public boolean delete(DeletePortalVIDTOList portalVIDTOList) throws PLException { if(portalVIDTOList==null||CollectionUtils.isEmpty(portalVIDTOList.getPortalVIDTOList())){ // VciBaseUtil.alertNotNull("删除的对象"); throw new PLException("1001",new String[]{"请选择要删除的对象!}"}); } try { for(PortalVIDTO portalVIDTO:portalVIDTOList.getPortalVIDTOList()) { boolean formFlag = false; short viType = portalVIDTO.getViType(); String typeName = portalVIDTO.getTypeName(); String viewName = portalVIDTO.getViName(); String id = portalVIDTO.getId(); if (viType == PortalVIType.Form.getIntVal()) { // 判断该表单是否在表格中被引用 formFlag = platformClientUtil.getPortalService().judgeDeleteButton(id, typeName); if (formFlag) { throw new Throwable(viewName + "表单已经在表格中被引用,请重新选择要删除的对象!"); } } // 判断该表单或表格是否在UI定义时被引用 formFlag = platformClientUtil.getPortalService().judgeUpdateButton(viType, viewName, typeName); if (formFlag) { throw new Throwable(viewName + "数据已经被UI组件引用,请重新选择要删除的对象!"); } PortalVI portalVI = new PortalVI(); portalVI.id = portalVIDTO.getId(); portalVI.viName = portalVIDTO.getViName(); portalVI.viType = portalVIDTO.getViType(); portalVI.typeName = portalVIDTO.getTypeName(); portalVI.typeFlag = portalVIDTO.getTypeFlag(); platformClientUtil.getPortalService().deletePortalVI(portalVI); } }catch (Throwable e){ String exceptionMessage = "删除表单时出现错误,原因:" + VciBaseUtil.getExceptionMessage(e); logger.error(exceptionMessage); throw new PLException("100",new String[]{exceptionMessage}); } return true; } @Override public boolean delete(String ids) throws PLException { VciBaseUtil.alertNotNull(ids,"主键"); List idsList = VciBaseUtil.str2List(ids); List portalVIDTOList = new ArrayList<>(); DeletePortalVIDTOList deletePortalVIDTOList=new DeletePortalVIDTOList(); idsList.stream().forEach(id->{ PortalVI portalVI= null; try { portalVI = platformClientUtil.getPortalService().getPortalVIById(id); PortalVIDTO portalVIDTO = new PortalVIDTO(); portalVIDTO.setId(portalVI.id); portalVIDTO.setTypeFlag(portalVI.typeFlag); portalVIDTO.setTypeName(portalVI.typeName); portalVIDTO.setViName(portalVI.viName); portalVIDTO.setViType(portalVI.viType); portalVIDTOList.add(portalVIDTO); } catch (PLException e) { e.printStackTrace(); } }); deletePortalVIDTOList.setPortalVIDTOList(portalVIDTOList); return delete(deletePortalVIDTOList); } /** * 表单/表格克隆 * @param clonePortalVIDTOList * @return * @throws VciBaseException */ @Override public boolean clone(ClonePortalVIDTOList clonePortalVIDTOList) throws VciBaseException { if(clonePortalVIDTOList == null || CollectionUtils.isEmpty(clonePortalVIDTOList.getClonePortalVIDTOList())){ throw new VciBaseException("请选择要克隆的对象!"); } try { String typeName=clonePortalVIDTOList.getClonePortalVIDTOList().get(0).getTypeName(); PortalVI[] portalVIS= platformClientUtil.getPortalService().getPortalVIArrayByTypeName(typeName); Map PortalVIMap=new HashMap<>(); if(!CollectionUtils.isEmpty(Arrays.asList(portalVIS))) { List portalVIVOS = portalVIDOO2VOS(Arrays.asList(portalVIS)); PortalVIMap =portalVIVOS.stream().collect(Collectors.toMap(PortalVIVO::getViName, Function.identity())); } List portalVIList=new ArrayList<>(); for (ClonePortalVIDTO clonedestObject : clonePortalVIDTOList.getClonePortalVIDTOList()) { String viName = clonedestObject.getViName(); PortalVIDTO portalVIDTO = clonedestObject.getOldPortalVIDTO(); short typeFlag = clonedestObject.getTypeFlag(); if (viName != null) { VciBaseUtil.alertNotNull(viName, "克隆名称不允许为空"); //throw new PLException("1001",new String[]{"请选择要删除的对象!}"}); if( PortalVIMap.containsKey(viName)){ throw new VciBaseException("克隆名称"+viName+"已存在,请核对!"); } PortalVI portalVI = UITools.getService().getPortalVIById(portalVIDTO.getId()); portalVI.id = ObjectUtility.getNewObjectID36(); portalVI.viName = viName; //如果克隆选择了业务类型则拷贝到新的业务类型下 if (StringUtils.isNotBlank(typeName)) { portalVI.typeName = typeName; } if (typeFlag == PortalVITypeFlag.BtmType.getIntVal() || typeFlag == PortalVITypeFlag.LinkType.getIntVal()) { portalVI.typeFlag = typeFlag; } platformClientUtil.getPortalService().savePortalVI(portalVI); portalVIList.add(portalVI); } } }catch (PLException e){ throw new VciBaseException("克隆出现异常:"+e.getMessage()); } return true; } @Override public String exportToExcel(Collection idList) { String defaultTempFolder = LocalFileUtil.getDefaultTempFolder(); String xfileName="export.xls"; List rowDataList = new ArrayList<>(); List qtRowDataList = new ArrayList<>(); //VciBaseUtil.alertNotNull(idList); List portalVIDTOList= listByIds(idList); final int index=0; String excelFileName = defaultTempFolder + File.separator + xfileName; File excelFile = new File(excelFileName); try { excelFile.createNewFile(); }catch (Throwable e){ String msg = "在创建excel文件的时候出现了错误"; if(logger.isErrorEnabled()){ logger.error(msg,e); } throw new VciBaseException(msg+",{0}",new String[]{excelFileName},e); } rowDataList.add(new WriteExcelData(index, 0, "业务类型名称")); rowDataList.add(new WriteExcelData(index, 1, "名称")); rowDataList.add(new WriteExcelData(index, 2, "业务类型")); rowDataList.add(new WriteExcelData(index, 3, "表单类型")); rowDataList.add(new WriteExcelData(index, 4, "配置文本")); rowDataList.add(new WriteExcelData(index, 5, "属性")); rowDataList.add(new WriteExcelData(index, 6, "查询模板名称")); rowDataList.add(new WriteExcelData(index, 7, "查询模板配置文本")); rowDataList.add(new WriteExcelData(index, 8, "查询模板业务类型")); qtRowDataList.add(new WriteExcelData(index, 0, "业务类型名称")); qtRowDataList.add(new WriteExcelData(index, 1, "链接类型名称")); qtRowDataList.add(new WriteExcelData(index, 2, "查询模板定义名称")); qtRowDataList.add(new WriteExcelData(index, 3, "属性")); if(!CollectionUtils.isEmpty(portalVIDTOList)){ final int[] rowIndex = {1}; boolean isLink=PortalVITypeFlag.LinkType.getIntVal()== portalVIDTOList.get(0).getTypeFlag()?true:false; try { BaseResult baseResult= quereyTemplateServiceI.queryTemplateList( portalVIDTOList.get(0).getTypeName(),isLink); if(baseResult.isSuccess()){ final int[] rowIndex1 = {1}; Collection< QTD> qtdList= baseResult.getData(); if(!CollectionUtils.isEmpty(qtdList)){ qtdList.stream().forEach(qtd -> { qtRowDataList.add(new WriteExcelData(rowIndex1[0], 0, qtd.btmName)); qtRowDataList.add(new WriteExcelData(rowIndex1[0], 1, qtd.linkTypeName)); qtRowDataList.add(new WriteExcelData(rowIndex1[0], 2, qtd.name)); qtRowDataList.add(new WriteExcelData(rowIndex1[0], 3, VciBaseUtil.array2String(qtd.abNames))); rowIndex1[0]++; }); } } } catch (PLException e) { e.printStackTrace(); } portalVIDTOList.stream().forEach(portalVIDTO -> { //先是名称 rowDataList.add(new WriteExcelData(rowIndex[0], 0, portalVIDTO.getTypeName()));//业务类型名称 rowDataList.add(new WriteExcelData(rowIndex[0], 1, portalVIDTO.getViName()));//名称 rowDataList.add(new WriteExcelData(rowIndex[0], 2, PortalVITypeFlag.getByIntVal(portalVIDTO.getTypeFlag()).getLabel()));//业务类型 rowDataList.add(new WriteExcelData(rowIndex[0], 3,PortalVIType.getByIntVal(portalVIDTO.getViType()).getLabel()));//表单类型 try { String prmText=UITools.getPRMText(prmDOO2VIS(portalVIDTO.getPrm(),portalVIDTO.getViType())); String prmTextFileName= ObjectUtility.getNewObjectID36() + ".txt"; String prmTextFileNameAllName = xfileName + "." + prmTextFileName; if (portalVIDTO.getViType() == PortalVIType.Table.getIntVal()) {//如果导入的table,则需要校验表格关联的表单是否存在,如果不存在则在execl中是否存在 PortalVI[] pvs = platformClientUtil.getPortalService().getPortalVIArrayByTypeName(portalVIDTO.getTypeName()); PRMDTO prmdto= portalVIDTO.getPrm(); List prmItemDTOS= prmdto.getPrmItemList(); if (!CollectionUtils.isEmpty(Arrays.asList(pvs))) { Optional.ofNullable(prmItemDTOS).orElseGet(()->new ArrayList<>()).stream().forEach(prmItemDTO -> { Arrays.stream(pvs).forEach(pv -> { if (prmItemDTO.getItemInObj().equals(pv.typeName + ":" + pv.viName)) { prmItemDTO.setItemInObj(pv.id); } }); }); } } writeDataToFile(defaultTempFolder,prmTextFileNameAllName,prmText); rowDataList.add(new WriteExcelData(rowIndex[0], 4,prmTextFileName));//配置文本 } catch (Throwable e) { e.printStackTrace(); } String attributeStr=""; try { List osAttributeVOList=osAttributeService.getOsAttributeVOSByBtName(portalVIDTO.getTypeName(),portalVIDTO.getTypeFlag(),false); if(!CollectionUtils.isEmpty(osAttributeVOList)){ List filedList= osAttributeVOList.stream().map(OsAttributeVO::getId).collect(Collectors.toList()); attributeStr=VciBaseUtil.array2String(filedList.toArray(new String[]{})); } } catch (Exception e) { e.printStackTrace(); } rowDataList.add(new WriteExcelData(rowIndex[0], 5, attributeStr));//属性 String qtName=""; try { QTInfo qt = platformClientUtil.getQTDService().getQT(portalVIDTO.getPrm().getFormQtName()); qtName=qt.qtName; rowDataList.add(new WriteExcelData(rowIndex[0], 6,qtName));//查询模板名称 String qtFileName = ObjectUtility.getNewObjectID36() + ".txt"; String qtFileNameAllName = xfileName + "." + qtFileName; writeDataToFile(defaultTempFolder,qtFileNameAllName,qt.qtText); rowDataList.add(new WriteExcelData(rowIndex[0], 7, qtFileName));//查询模板配置文本 rowDataList.add(new WriteExcelData(rowIndex[0], 8, qt.btmName));//查询模板业务类型 } catch (PLException e) { e.printStackTrace(); } rowIndex[0]++; }); } /* String excelTemplateFileName = "/excelTemplate/dataBaseExport.xls"; if(this.getClass().getResource(excelTemplateFileName) == null){ throw new VciBaseException("请联系管理员,系统中缺少{0}这个模板文件",new String[]{excelTemplateFileName}); } try { ExcelUtil.copyFileFromJar(excelTemplateFileName,excelFile); //这个方法会关闭文件流 }catch (Throwable e){ String msg = "从模板文件拷贝到目标文件出现了错误"; if(logger.isErrorEnabled()){ logger.error(msg,e); } throw new VciBaseException(msg+",{0}",new String[]{excelFileName},e); }*/ try{ WriteExcelOption excelOption = new WriteExcelOption(); excelOption.addSheetDataList("portalvi",rowDataList); excelOption.addSheetDataList("QTD",qtRowDataList); ExcelUtil.writeDataToFile(excelFile,excelOption); }catch (Throwable e){ String msg = "把数据写入到excel文件中出现错误"; if(logger.isErrorEnabled()){ logger.error(msg,e); } throw new VciBaseException(msg+",{0}",new String[]{excelFileName},e); } File zip = ZipUtil.zip(defaultTempFolder); FileUtil.del(defaultTempFolder + File.separator); //最后返回excel文件名称 return zip.getAbsoluteFile().getAbsolutePath(); } @Override public BaseResult importData(File file)throws Throwable{ if (file == null) { return BaseResult.fail(FrameWorkLangCodeConstant.IMPORT_FAIL, new String[]{"无导入的文件"}); } try { File unzip = ZipUtil.unzip(file); String filePath=unzip.getAbsolutePath() + File.separator + "export.xls"; File btmExcel = new File(filePath); List portalVIPOList=new ArrayList<>(); List QTDPOPOList=new ArrayList<>(); try { ReadExcelOption PortalVIPOReadExcelOption=new ReadExcelOption(); PortalVIPOReadExcelOption.setSheetName("portalvi"); PortalVIPOReadExcelOption.setSheetIndex(0); portalVIPOList = ExcelUtil.readDataObjectFromExcel(btmExcel, PortalVIPO.class,PortalVIPOReadExcelOption); //从execl获取查询模板定义. /* ReadExcelOption QTDPOReadExcelOption=new ReadExcelOption(); QTDPOReadExcelOption.setSheetName("QTD"); QTDPOReadExcelOption.setSheetIndex(1); QTDPOPOList = ExcelUtil.readDataObjectFromExcel(btmExcel, QTDPO.class,QTDPOReadExcelOption);*/ }catch (VciBaseException e){ throw new Throwable("读取execl数据出错:"+e.getMessage()); } List portalVIList=new ArrayList<>(); if(!CollectionUtils.isEmpty(portalVIPOList)){ MapformNameMap=new HashMap<>(); StringBuffer checkInObj=new StringBuffer(); StringBuffer checkPortalVI=new StringBuffer(); List sjkExitsList=new ArrayList<>(); portalVIPOList.stream().forEach(portalVIPO -> { PortalVI portalVI=new PortalVI(); String ploid = ObjectUtility.getNewObjectID36(); portalVI.id=ploid; portalVI.viName=portalVIPO.getViName(); portalVI.typeName=portalVIPO.getTypeName(); portalVI.viType=PortalVIType.getByLabel(portalVIPO.getViTypeText()).getIntVal(); portalVI.typeFlag=PortalVITypeFlag.getByLabel(portalVIPO.getTypeFlagText()).getIntVal(); String fileName= portalVIPO.getPrmFileName(); String prmStr = readLines(filePath+"."+fileName); try { PortalVI[] pvs = platformClientUtil.getPortalService().getPortalVIArrayByTypeName(portalVI.typeName); if (portalVI.viType == PortalVIType.Table.getIntVal()) {//如果导入的table,则需要校验表格关联的表单是否存在,如果不存在则在execl中是否存在 formNameMap.put(portalVI.typeName + ":" + portalVI.viName, ploid); PRMDO prmObj = UITools.getPRM(prmStr); List prmItemList = prmObj.getPrmItemList(); if (!CollectionUtils.isEmpty(prmItemList)) { prmItemList.stream().forEach(prmItemDO -> { if (!CollectionUtils.isEmpty(Arrays.asList(pvs))) { Arrays.stream(pvs).forEach(pv -> { if (prmItemDO.getItemInObj().equals(portalVI.typeName + ":" + pv.viName)) { prmItemDO.setItemInObj(pv.id); } }); } else { if (formNameMap.containsKey(prmItemDO.getItemInObj())) { prmItemDO.setItemInObj(formNameMap.get(prmItemDO.getItemInObj())); } else { if (!checkInObj.toString().contains(prmItemDO.getItemInObj())) { String[] split = prmItemDO.getItemInObj().split(":"); checkInObj.append(split[1]).append(","); } } } }); } prmStr = UITools.getPRMText(prmObj); } portalVI.prm = prmStr.trim(); //校验表单是否存在 if (!CollectionUtils.isEmpty(Arrays.asList(pvs))) { Arrays.stream(pvs).forEach(pv -> { if (pv.viName.equals(portalVI.viName)) { checkPortalVI.append(portalVI.viName).append(","); } }); } //校验属性是否正确 List osAttributeVOList = osAttributeService.getOsAttributeVOSByBtName(portalVI.typeName, portalVI.typeFlag,false); if (!CollectionUtils.isEmpty(osAttributeVOList)) { List filedList = osAttributeVOList.stream().map(OsAttributeVO::getId).collect(Collectors.toList()); List attributeList = VciBaseUtil.str2List(portalVIPO.getAttributeKey()); //数据库不存在 List sjkExitsLists = Optional.ofNullable(attributeList).orElseGet(() -> new ArrayList<>()).stream().filter(s -> !attributeList.contains(s)).collect(Collectors.toList()); sjkExitsList.addAll(sjkExitsLists); } }catch (Throwable e){ e.printStackTrace(); } portalVIList.add(portalVI); if(StringUtils.isNotBlank(portalVIPO.getQtName())&&StringUtils.isNotBlank(portalVIPO.getQtNameFile())) { QTInfo qt = new QTInfo(); String qtText = readLines(filePath + "." + portalVIPO.getQtNameFile()); qt.qtText=qtText; qt.qtName = portalVIPO.getQtName(); qt.btmName=portalVIPO.getQtName(); QTInfo qt2 = null; try { qt2 = platformClientUtil.getQTDService().getQT(qt.qtName); if (qt2 == null) { platformClientUtil.getQTDService().saveQT(qt); } } catch (PLException e) { e.printStackTrace(); } } }); if (checkInObj.length() > 0) { throw new Throwable( checkInObj.toString() + "表单不存在!"); } if (checkPortalVI.length() > 0) { throw new Throwable( checkInObj.toString() + "名称已经存在!"); } if(sjkExitsList.size()>0){ throw new Throwable( checkInObj.toString() + "属性在类型中不存在!"); } for (PortalVI pvi : portalVIList) { platformClientUtil.getPortalService().savePortalVI(pvi); } } }catch (Throwable e){ // throw new Throwable("导入失败:"+e.getMessage()); return BaseResult.fail("导入失败:"+e.getMessage()); } return BaseResult.success("导入成功"); } private String readLines(String filePath){ StringBuffer sb=new StringBuffer(); FileInputStream prmFile=null; try { prmFile = new FileInputStream(filePath); List prm= IOUtils.readLines(prmFile,"UTF-8"); prm.stream().forEach(s -> { sb.append(s); }); } catch (IOException e) { IOUtils.closeQuietly(prmFile); e.printStackTrace(); }finally { IOUtils.closeQuietly(prmFile); } return sb.toString(); } /** * 拷贝数据到word模板中 * @param fileName 要写入的数据 * @return word 文件路径 */ public String writeDataToFile(String defaultTempFolder,String fileName,String str){ String tempFolder = LocalFileUtil.getDefaultTempFolder(); //拷贝文件 String filePath = tempFolder + File.separator + fileName; File file = new File(filePath); FileOutputStream out = null; try { file.createNewFile(); out= new FileOutputStream(file); IOUtils.write(str,out); }catch (Throwable e){ IOUtils.closeQuietly(out); String msg = "在创建文件的时候出现了错误"; if(logger.isErrorEnabled()){ logger.error(msg,e); } throw new VciBaseException(msg+",{0}",new String[]{filePath},e); }finally { IOUtils.closeQuietly(out); //移动属性到链接类型文件夹里面去 FileUtil.move(file, new File(defaultTempFolder),true); FileUtil.del(tempFolder); } return filePath; } public List listByIds(Collection idList){ List portalVIVOList=new ArrayList<>(); if(CollectionUtils.isEmpty(idList)){ throw new VciBaseException("请选择需要导出的数据"); } List portalVIList=new ArrayList<>(); idList.stream().forEach(id->{ try { PortalVI portalVI= platformClientUtil.getPortalService().getPortalVIById(id.toString()); portalVIList.add(portalVI); } catch (PLException e) { e.printStackTrace(); } }); portalVIVOList= portalVIO2DTOS(portalVIList); return portalVIVOList; } private BaseResult savePortalVIDTO(PortalVIDTO portalVIDTO,boolean isEdit) { boolean _isBtm=false; boolean flag = false; String labelName=PortalVIType.Form.getName(); try { VciBaseUtil.alertNotNull( portalVIDTO.getViName(),"名称" /*,portalVIDTO.getPrm().getFormQtName(),"绑定表单"*/); if(portalVIDTO.getPrm()==null||portalVIDTO.getPrm().getPrmItemList()==null||portalVIDTO.getPrm().getPrmItemList().size()==0){ throw new Throwable(labelName+",未设置"); } if(PortalVIType.Table.getIntVal()==portalVIDTO.getViType()){//如果是表格的的校验 labelName=PortalVIType.Table.getName(); PRMItemDTO prmItemDTO = portalVIDTO.getPrm().getPrmItemList().get(0); //每页显示校验 String rtnContent = isCorrectPageNums(prmItemDTO.getItemPageSize()); if (StringUtils.isNotBlank(rtnContent)) { throw new VciBaseException(rtnContent); } } labelName= PortalVIType.getByIntVal(portalVIDTO.getViType()).getLabel(); if(!_isBtm){ PortalVI[] portalVIS = platformClientUtil.getPortalService().getPortalVIArrayByTypeName(portalVIDTO.getTypeName()); for (int i = 0; i < portalVIS.length; i++) { PortalVI portalVI = portalVIS[i]; String viName = portalVI.viName; if(isEdit){//如果为修改 try { PortalVI oldPortalVI = platformClientUtil.getPortalService().getPortalVIById(portalVIDTO.getId()); flag = platformClientUtil.getPortalService().judgeUpdateButton(oldPortalVI.typeFlag, oldPortalVI.viName, oldPortalVI.typeName); if (flag && (StringUtils.isNotBlank(portalVIDTO.getViName()))&&(!oldPortalVI.viName.equals(portalVIDTO.getViName()))) { throw new Throwable("该"+labelName+"已经被引用,不能修改名称!"); } } catch (PLException e) { throw new Throwable("查询原有表单出现异常:"+e.getMessage()); } if (!portalVI.id.equals(portalVIDTO.getId())) { if (portalVI.viName.equals(portalVIDTO.getViName())) { throw new Throwable("名称已经存在!"); } } } else { portalVIDTO.setId(ObjectUtility.getNewObjectID36()); if (portalVI.viName.equals(portalVIDTO.getViName())) { throw new Throwable("名称已经存在!"); } } } }else{ flag=platformClientUtil.getPortalService().judgeUpdateButton(portalVIDTO.getTypeFlag(), portalVIDTO.getViName(), portalVIDTO.getTypeName()); } PortalVI pvi = portalVIDTOO2VI(portalVIDTO); if (!isEdit) { flag= platformClientUtil.getPortalService().savePortalVI(pvi); } else { flag= platformClientUtil.getPortalService().updatePortalVI(pvi); } if(flag){ return BaseResult.success("保存"+labelName+"成功!"); }else{ new Throwable("保存"+labelName+"失败!"); } } catch (Throwable e) { String exceptionMessage = "保存"+labelName+"出现异常:"+ VciBaseUtil.getExceptionMessage(e); logger.error(exceptionMessage); return BaseResult.fail(exceptionMessage); } return BaseResult.success("保存"+labelName+"成功!"); } @Override public Map selectAllPortalVIMap() throws VciBaseException { return null; } /** * 判断每页行数定义是否正确 * @Title :isCorrectPageNums * @Description : * @param pageText * @return */ protected String isCorrectPageNums(String pageText) { if (pageText == null || pageText.trim().equals("")) { return ""; } //edit by guo当每页行数中不止一个选项时,需要填写默认的显示条数,且默认的应该存在于选项中。 if(pageText.indexOf(",")!=-1){ try { String[] pages = pageText.split(","); int index = pageText.indexOf("#"); String subpageText1 = pageText.substring(0, index); String subpageText2 = pageText.substring(index+1); if(subpageText1.contains(subpageText2)){ for (String page : pages) { //if(!page.equalsIgnoreCase("all")){ if(page.contains("#")){ index = page.indexOf("#"); page = page.substring(0, index); } Integer.parseInt(page); //} } } else { return "输入页数不符合规范,请参照文本框提示再重新填写!"; } } catch (Exception e) { return "输入页数不符合规范,请参照文本框提示再重新填写!"; } }else { try { Integer.parseInt(pageText); } catch (Exception e) { return "输入页数不符合规范,请参照文本框提示重新填写!"; } } return ""; } /** * 枚举的数据对象转换为显示对象 * * @param portalVIS 枚举的对象 * @return 显示对象 */ @Override public List portalVIDOO2VOS(Collection portalVIS) { List portalVIVOS = new ArrayList<>(); Optional.ofNullable(portalVIS).orElseGet(()->new ArrayList<>()).stream().forEach(portalVI -> { PortalVIVO portalVIVO = portalVIDOO2VO(portalVI); portalVIVOS.add(portalVIVO); }); return portalVIVOS; } /** * 表单的数据对象转换为显示对象 * @param portalVIDTOS 表单的对象 * @return 显示对象 */ @Override public List portalVIDTOO2VIS(Collection portalVIDTOS) { List portalVIS = new ArrayList<>(); Optional.ofNullable(portalVIDTOS).orElseGet(()->new ArrayList<>()).stream().forEach(portalVIDTO -> { PortalVI portalVI = portalVIDTOO2VI(portalVIDTO); portalVIS.add(portalVI); }); return portalVIS; } /** * 表单的数据对象转换为显示对象 * @param PortalVIS 表单的对象 * @return 显示对象 */ @Override public List portalVIO2DTOS(Collection PortalVIS) { List PortalVIDTOS = new ArrayList<>(); Optional.ofNullable(PortalVIS).orElseGet(()->new ArrayList<>()).stream().forEach(PortalVI -> { PortalVIDTO PPortalVIDTO = portalVIO2DTO(PortalVI); PortalVIDTOS.add(PPortalVIDTO); }); return PortalVIDTOS; } /** * 表单的数据对象转换为显示对象 * @param portalVIDTO * @return */ @Override public PortalVI portalVIDTOO2VI(PortalVIDTO portalVIDTO) { PortalVI portalVI = new PortalVI(); portalVI.id = StringUtils.isNotBlank(portalVIDTO.getId()) ? portalVIDTO.getId() : WebUtil.getPk(); portalVI.typeFlag = portalVIDTO.getTypeFlag(); portalVI.typeName = portalVIDTO.getTypeName(); portalVI.viName = portalVIDTO.getViName(); portalVI.viType = portalVIDTO.getViType(); short viType = portalVIDTO.getViType(); PRMDO prmdo = prmDOO2VIS(portalVIDTO.getPrm(),viType); try { portalVI.prm=UITools.getPRMText(prmdo); } catch (Throwable e) { e.printStackTrace(); } return portalVI; } /** * 表单的数据对象转换为显示对象 * @param portalVI * @return */ @Override public PortalVIDTO portalVIO2DTO(PortalVI portalVI) { PortalVIDTO portalVIDTO=new PortalVIDTO(); portalVIDTO.setId(portalVI.id); portalVIDTO.setTypeFlag(portalVI.typeFlag); portalVIDTO.setTypeName(portalVI.typeName); portalVIDTO.setViName(portalVI.viName); portalVIDTO.setViType(portalVI.viType); short viType =portalVIDTO.getViType(); PRMDO prmdo= UITools.getPRM(portalVI.prm); portalVIDTO.setPrm(prmDOO2DTOS(prmdo,viType)); return portalVIDTO; } /** * 表单数据对象转换 * @param prmdto * @param viType * @return */ private PRMDO prmDOO2VIS(PRMDTO prmdto, short viType) { PRMDO prmdo=new PRMDO(); prmdo.setShowCols(prmdto.getShowCols()); prmdo.setFormQtName(prmdto.getFormQtName()); prmdo.setPrmItemList(pRMItemDTOO2DOS(prmdto.getPrmItemList(),viType)); return prmdo; } /** * 表单数据对象转换 * @param prmdo * @param viType * @return */ private PRMDTO prmDOO2DTOS( PRMDO prmdo, short viType) { PRMDTO prmdto=new PRMDTO(); prmdto.setShowCols(prmdo.getShowCols()); prmdto.setFormQtName(prmdo.getFormQtName()); prmdto.setPrmItemList(pRMItemDOO2DTOS(prmdo.getPrmItemList(),viType)); return prmdto; } @Override public PortalVIVO portalVIDOO2VO(PortalVI portalVI) { PortalVIVO portalVIVO = new PortalVIVO(); portalVIVO.setId(portalVI.id); portalVIVO.setTypeFlagText(PortalVITypeFlag.getByIntVal(portalVI.typeFlag).getLabel()); portalVIVO.setTypeFlag(portalVI.typeFlag); portalVIVO.setTypeName(portalVI.typeName); portalVIVO.setViName(portalVI.viName); portalVIVO.setViType(portalVI.viType); portalVIVO.setViTypeText(PortalVIType.getByIntVal(portalVI.viType).getLabel()); String prm = portalVI.prm; if(StringUtils.isNotBlank(prm)) { PRMDO prmdo = UITools.getPRM(prm); portalVIVO.setPrm(prmDOO2VOS(prmdo, portalVI.viType)); } return portalVIVO; } private PRMVO prmDOO2VOS(PRMDO prmdo,short viType){ PRMVO prmvo=new PRMVO(); prmvo.setFormQtName(prmdo.getFormQtName()); prmvo.setShowCols(prmdo.getShowCols()); List prmItemDOS= prmdo.getPrmItemList(); prmvo.setPrmItemList(pRMItemDOO2VOS(prmItemDOS,viType)); return prmvo; } public List pRMItemDOO2VOS(Collection prmItemDOS,short viType) { List portalVIVOS = new ArrayList<>(); Optional.ofNullable(prmItemDOS).orElseGet(()->new ArrayList<>()).stream().forEach(prmItemDO -> { PRMItemVO prmItemVO = pRMItemDOO2VO(prmItemDO,viType); portalVIVOS.add(prmItemVO); }); return portalVIVOS; } public List pRMItemDTOO2DOS(Collection prmItemDTOS,short viType) { List portalVIVOS = new ArrayList<>(); Optional.ofNullable(prmItemDTOS).orElseGet(()->new ArrayList<>()).stream().forEach(PRMItemDTO -> { PRMItemDO PRMItemDO = pRMItemDTOO2DO(PRMItemDTO,viType); portalVIVOS.add(PRMItemDO); }); return portalVIVOS; } public List pRMItemDOO2DTOS(Collection prmItemDOS,short viType) { List portalVIVOS = new ArrayList<>(); Optional.ofNullable(prmItemDOS).orElseGet(()->new ArrayList<>()).stream().forEach(prmItemDO -> { PRMItemDTO prmItemDTO = pRMItemDOO2DTO(prmItemDO,viType); portalVIVOS.add(prmItemDTO); }); return portalVIVOS; } /** * 数据对象转换 * @param prmItemDTO 数据对象 * @param viType 表单类型 * @return */ private PRMItemDO pRMItemDTOO2DO(PRMItemDTO prmItemDTO,short viType) { PRMItemDO prmItemDO=new PRMItemDO(); prmItemDO.setItemBat(prmItemDTO.getItemBat()); prmItemDO.setItemCols(prmItemDTO.getItemCols()); prmItemDO.setItemEQ(prmItemDTO.getItemEQ()); prmItemDO.setItemDbl(prmItemDTO.getItemDbl()); prmItemDO.setItemCut(prmItemDTO.getItemCut()); prmItemDO.setItemOR(prmItemDTO.getItemOR()); prmItemDO.setItemAddFilter(prmItemDTO.getItemAddFilter()); prmItemDO.setItemField(prmItemDTO.getItemField()); prmItemDO.setItemImgWH(prmItemDTO.getItemImgWH()); prmItemDO.setItemCtrlDisplyCol(prmItemDTO.getItemCtrlDisplyCol());//控制显示列 prmItemDO.setItemDateFormat(prmItemDTO.getItemDateFormat());// 数据为日期类型时的格式化字符串 如 yyyy-MM-dd HH:mm:ss prmItemDO.setItemInObj(prmItemDTO.getItemInObj()); prmItemDO.setItemName(prmItemDTO.getItemName()); prmItemDO.setItemCustomClass(prmItemDTO.getItemCustomClass());//自定义类路径 prmItemDO.setItemIsHidden(prmItemDTO.getItemIsHidden()); prmItemDO.setItemIsEditable(prmItemDTO.getItemIsEditable()); prmItemDO.setItemIsRequired(prmItemDTO.getItemIsRequired()); prmItemDO.setItemFieldWidth(prmItemDTO.getItemFieldWidth()); prmItemDO.setItemTxf(prmItemDTO.getItemTxf()); prmItemDO.setItemRows(prmItemDTO.getItemRows()); prmItemDO.setItemHrefConf(prmItemDO.getItemHrefConf());//超链接配置 prmItemDO.setItemTips(prmItemDTO.getItemTips()); prmItemDO.setItemTrim(prmItemDTO.getItemTrim()); //prmItemDO.setItemDateFormat(prmItemDTO.getItemDateFormat()); prmItemDO.setItemCtrlDisplyCondition(prmItemDTO.getItemCtrlDisplyCondition());////控制显示条件 prmItemDO.setItemEditableProgram(prmItemDTO.getItemEditableProgram()); prmItemDO.setItemEditCondition(prmItemDTO.getItemEditCondition()); prmItemDO.setItemHrefFields(prmItemDTO.getItemHrefFields());//超链接字段 prmItemDO.setItemValueList(prmItemDTO.getItemValueList()); prmItemDO.setItemValue(prmItemDTO.getItemValue()); prmItemDO.setItemStyle(prmItemDTO.getItemStyle()); prmItemDO.setItemShowExpression(prmItemDTO.getItemShowExpression());// 显示表达式 ${aa}-${bb} prmItemDO.setItemSeniorQueryColsCounts(prmItemDTO.getItemSeniorQueryColsCounts());//高级查询各列使用次数 prmItemDO.setItemType(prmItemDTO.getItemType()); prmItemDO.setItemScript(prmItemDTO.getItemScript()); prmItemDO.setItemRight(prmItemDTO.getItemRight()); prmItemDO.setItemQuerySql(prmItemDTO.getItemQuerySql()); prmItemDO.setItemQueryRefFields(prmItemDTO.getItemQueryRefFields());//查询关联列 prmItemDO.setItemQtName(prmItemDTO.getItemQtName());//末班名称 prmItemDO.setItemParentFolderName(prmItemDTO.getItemParentFolderName());//父文件夹名称 prmItemDO.setItemPageSize(prmItemDTO.getItemPageSize()); prmItemDO.setItemOutType(prmItemDTO.getItemOutType()); prmItemDO.setItemOutFields(prmItemDTO.getItemOutFields()); prmItemDO.setItemListVal(prmItemDTO.getItemListVal()); prmItemDO.setItemListTxt(prmItemDTO.getItemListTxt()); prmItemDO.setItemListTable(prmItemDTO.getItemListTable()); prmItemDO.setItemKeyFields(prmItemDTO.getItemKeyFields()); prmItemDO.setItemIsShowFolder(prmItemDTO.getItemIsShowFolder());//是否显示文件夹 prmItemDO.setItemIsNavigatorExpand(prmItemDTO.getItemIsNavigatorExpand());////查询区域显示控制 prmItemDO.setItemIsHttpSave(prmItemDTO.getItemIsHttpSave()); prmItemDO.setItemHttpVolumnPath(prmItemDTO.getItemHttpVolumnPath()); prmItemDO.setItemHttpPathField(prmItemDTO.getItemHttpPathField()); if(viType==PortalVIType.Table.getIntVal()) {//如果是表格 initTableConfigDTOO2DOData(prmItemDO,prmItemDTO); }else{ List itemValueList=new ArrayList<>(); List keyValueList=prmItemDTO.getItemKeyValueList(); Optional.ofNullable(keyValueList).orElseGet(()->new ArrayList<>()).stream().forEach(keyValue -> { String value= keyValue.getValue()+"{"+keyValue.getKey()+"}"; itemValueList.add(value); }); prmItemDO.setItemValueList(itemValueList); } return prmItemDO; } /** * PRMItemDO 转 PRMItemVO * @param prmItemDO * @param viType * @return */ private PRMItemVO pRMItemDOO2VO(PRMItemDO prmItemDO,short viType) { PRMItemVO prmItemVO=new PRMItemVO(); prmItemVO.setItemBat(prmItemDO.getItemBat()); prmItemVO.setItemCols(prmItemDO.getItemCols()); prmItemVO.setItemEQ(prmItemDO.getItemEQ()); prmItemVO.setItemDbl(prmItemDO.getItemDbl()); prmItemVO.setItemCut(prmItemDO.getItemCut()); prmItemVO.setItemOR(prmItemDO.getItemOR()); prmItemVO.setItemAddFilter(prmItemDO.getItemAddFilter()); prmItemVO.setItemField(prmItemDO.getItemField()); prmItemVO.setItemImgWH(prmItemDO.getItemImgWH()); prmItemVO.setItemCtrlDisplyCol(prmItemDO.getItemCtrlDisplyCol());//控制显示列 prmItemVO.setItemDateFormat(prmItemDO.getItemDateFormat());// 数据为日期类型时的格式化字符串 如 yyyy-MM-dd HH:mm:ss prmItemVO.setItemInObj(prmItemDO.getItemInObj()); prmItemVO.setItemName(prmItemDO.getItemName()); prmItemVO.setItemCustomClass(prmItemDO.getItemCustomClass());//自定义类路径 prmItemVO.setItemIsHidden(prmItemDO.getItemIsHidden()); prmItemVO.setItemIsEditable(prmItemDO.getItemIsEditable()); prmItemVO.setItemIsRequired(prmItemDO.getItemIsRequired()); prmItemVO.setItemFieldWidth(prmItemDO.getItemFieldWidth()); prmItemVO.setItemTxf(prmItemDO.getItemTxf()); prmItemVO.setItemRows(prmItemDO.getItemRows()); prmItemVO.setItemHrefConf(prmItemDO.getItemHrefConf());//超链接配置 prmItemVO.setItemTips(prmItemDO.getItemTips()); prmItemVO.setItemTrim(prmItemDO.getItemTrim()); prmItemVO.setItemDateFormat(prmItemDO.getItemDateFormat()); prmItemVO.setItemCtrlDisplyCondition(prmItemDO.getItemCtrlDisplyCondition());////控制显示条件 prmItemVO.setItemEditableProgram(prmItemDO.getItemEditableProgram()); prmItemVO.setItemEditCondition(prmItemDO.getItemEditCondition()); prmItemVO.setItemHrefFields(prmItemDO.getItemHrefFields());//超链接字段 prmItemVO.setItemValueList(prmItemDO.getItemValueList()); prmItemVO.setItemValue(prmItemDO.getItemValue()); prmItemVO.setItemStyle(prmItemDO.getItemStyle()); prmItemVO.setItemShowExpression(prmItemDO.getItemShowExpression());// 显示表达式 ${aa}-${bb} prmItemVO.setItemSeniorQueryColsCounts(prmItemDO.getItemSeniorQueryColsCounts());//高级查询各列使用次数 prmItemVO.setItemQuerySql(prmItemDO.getItemQuerySql());//高级查询sql prmItemVO.setItemType(prmItemDO.getItemType());//属性基本类型 prmItemVO.setItemTypeText(ItemTypeEnum.getTextByValue(prmItemDO.getItemType()));//属性基本类型显示值 prmItemVO.setItemScript(prmItemDO.getItemScript()); prmItemVO.setItemRight(prmItemDO.getItemRight()); prmItemVO.setItemQueryRefFields(prmItemDO.getItemQueryRefFields());//查询关联列 prmItemVO.setItemQtName(prmItemDO.getItemQtName()); prmItemVO.setItemParentFolderName(prmItemDO.getItemParentFolderName());//父文件夹名称 prmItemVO.setItemPageSize(prmItemDO.getItemPageSize()); prmItemVO.setItemOutType(prmItemDO.getItemOutType()); prmItemVO.setItemOutFields(prmItemDO.getItemOutFields()); prmItemVO.setItemListVal(prmItemDO.getItemListVal());//参照值 prmItemVO.setItemListTxt(prmItemDO.getItemListTxt()); prmItemVO.setItemListTable(prmItemDO.getItemListTable()); prmItemVO.setItemKeyFields(prmItemDO.getItemKeyFields()); prmItemVO.setItemIsShowFolder(prmItemDO.getItemIsShowFolder());//是否显示文件夹 prmItemVO.setItemIsNavigatorExpand(prmItemDO.getItemIsNavigatorExpand());////查询区域显示控制 prmItemVO.setItemIsHttpSave(prmItemDO.getItemIsHttpSave()); prmItemVO.setItemHttpVolumnPath(prmItemDO.getItemHttpVolumnPath()); prmItemVO.setItemHttpPathField(prmItemDO.getItemHttpPathField()); if(viType==PortalVIType.Table.getIntVal()) {//如果是表格 initTableConfigDOO2VOData(prmItemVO,prmItemDO); }else{ List enumList= prmItemDO.getItemValueList(); ListitemKeyValueList=new ArrayList<>(); Optional.ofNullable(enumList).orElseGet(()->new ArrayList<>()).stream().forEach(enumValue->{ List keyValueList= VciBaseUtil.str2List(VciBaseUtil.removeComma(enumValue,"}"),"\\{"); KeyValue keyValue=new KeyValue(); keyValue.setKey(keyValueList.get(1)); keyValue.setValue(keyValueList.get(0)); itemKeyValueList.add(keyValue); }); prmItemVO.setItemKeyValueList(itemKeyValueList); } return prmItemVO; } /** * 数据对象转换 * @param prmItemDO 数据对象 * @param viType 表单类型 * @return */ private PRMItemDTO pRMItemDOO2DTO(PRMItemDO prmItemDO,short viType) { PRMItemDTO prmItemDTO=new PRMItemDTO(); prmItemDTO.setItemBat(prmItemDO.getItemBat()); prmItemDTO.setItemCols(prmItemDO.getItemCols()); prmItemDTO.setItemEQ(prmItemDO.getItemEQ()); prmItemDTO.setItemDbl(prmItemDO.getItemDbl()); prmItemDTO.setItemCut(prmItemDO.getItemCut()); prmItemDTO.setItemOR(prmItemDO.getItemOR()); prmItemDTO.setItemAddFilter(prmItemDO.getItemAddFilter()); prmItemDTO.setItemField(prmItemDO.getItemField()); prmItemDTO.setItemImgWH(prmItemDO.getItemImgWH()); prmItemDTO.setItemCtrlDisplyCol(prmItemDO.getItemCtrlDisplyCol());//控制显示列 prmItemDTO.setItemDateFormat(prmItemDO.getItemDateFormat());// 数据为日期类型时的格式化字符串 如 yyyy-MM-dd HH:mm:ss prmItemDTO.setItemInObj(prmItemDO.getItemInObj()); prmItemDTO.setItemName(prmItemDO.getItemName()); prmItemDTO.setItemCustomClass(prmItemDO.getItemCustomClass());//自定义类路径 prmItemDTO.setItemIsHidden(prmItemDO.getItemIsHidden()); prmItemDTO.setItemIsEditable(prmItemDO.getItemIsEditable()); prmItemDTO.setItemIsRequired(prmItemDO.getItemIsRequired()); prmItemDTO.setItemFieldWidth(prmItemDO.getItemFieldWidth()); prmItemDTO.setItemTxf(prmItemDO.getItemTxf()); prmItemDTO.setItemRows(prmItemDO.getItemRows()); prmItemDTO.setItemHrefConf(prmItemDO.getItemHrefConf());//超链接配置 prmItemDTO.setItemTips(prmItemDO.getItemTips()); prmItemDTO.setItemTrim(prmItemDO.getItemTrim()); prmItemDTO.setItemDateFormat(prmItemDO.getItemDateFormat()); prmItemDTO.setItemCtrlDisplyCondition(prmItemDO.getItemCtrlDisplyCondition());////控制显示条件 prmItemDTO.setItemEditableProgram(prmItemDO.getItemEditableProgram()); prmItemDTO.setItemEditCondition(prmItemDO.getItemEditCondition()); prmItemDTO.setItemHrefFields(prmItemDO.getItemHrefFields());//超链接字段 prmItemDTO.setItemValueList(prmItemDO.getItemValueList()); prmItemDTO.setItemValue(prmItemDO.getItemValue()); prmItemDTO.setItemStyle(prmItemDO.getItemStyle()); prmItemDTO.setItemShowExpression(prmItemDO.getItemShowExpression());// 显示表达式 ${aa}-${bb} prmItemDTO.setItemSeniorQueryColsCounts(prmItemDO.getItemSeniorQueryColsCounts());//高级查询各列使用次数 prmItemDTO.setItemQuerySql(prmItemDO.getItemQuerySql());//高级查询sql prmItemDTO.setItemType(prmItemDO.getItemType());//属性基本类型 prmItemDTO.setItemTypeText(ItemTypeEnum.getTextByValue(prmItemDO.getItemType()));//属性基本类型显示值 prmItemDTO.setItemScript(prmItemDO.getItemScript()); prmItemDTO.setItemRight(prmItemDO.getItemRight()); prmItemDTO.setItemQueryRefFields(prmItemDO.getItemQueryRefFields());//查询关联列 prmItemDTO.setItemQtName(prmItemDO.getItemQtName()); prmItemDTO.setItemParentFolderName(prmItemDO.getItemParentFolderName());//父文件夹名称 prmItemDTO.setItemPageSize(prmItemDO.getItemPageSize()); prmItemDTO.setItemOutType(prmItemDO.getItemOutType()); prmItemDTO.setItemOutFields(prmItemDO.getItemOutFields()); prmItemDTO.setItemListVal(prmItemDO.getItemListVal());//参照值 prmItemDTO.setItemListTxt(prmItemDO.getItemListTxt()); prmItemDTO.setItemListTable(prmItemDO.getItemListTable()); prmItemDTO.setItemKeyFields(prmItemDO.getItemKeyFields()); prmItemDTO.setItemIsShowFolder(prmItemDO.getItemIsShowFolder());//是否显示文件夹 prmItemDTO.setItemIsNavigatorExpand(prmItemDO.getItemIsNavigatorExpand());////查询区域显示控制 prmItemDTO.setItemIsHttpSave(prmItemDO.getItemIsHttpSave()); prmItemDTO.setItemHttpVolumnPath(prmItemDO.getItemHttpVolumnPath()); prmItemDTO.setItemHttpPathField(prmItemDO.getItemHttpPathField()); if(viType==PortalVIType.Table.getIntVal()) {//如果是表格 initTableConfigDOO2VOData(prmItemDTO,prmItemDO); }else{ List enumList= prmItemDO.getItemValueList(); ListitemKeyValueList=new ArrayList<>(); Optional.ofNullable(enumList).orElseGet(()->new ArrayList<>()).stream().forEach(enumValue->{ List keyValueList= VciBaseUtil.str2List(VciBaseUtil.removeComma(enumValue,"}"),"\\{"); KeyValue keyValue=new KeyValue(); keyValue.setKey(keyValueList.get(1)); keyValue.setValue(keyValueList.get(0)); itemKeyValueList.add(keyValue); }); prmItemDTO.setItemKeyValueList(itemKeyValueList); } return prmItemDTO; } /** * 初始化表格所用特殊字段配置 * @param prmItemVO * @param prmItemDO */ private void initTableConfigDOO2VOData(PRMItemVO prmItemVO,PRMItemDO prmItemDO){ prmItemVO.setItemFieldWidthList(initItemFieldWidthList(prmItemDO.getItemOutFields(),prmItemDO.getItemFieldWidth()));//列显示宽段 itemOutFieldList 相匹配 prmItemVO.setItemSeniorQueryBOS(initItemSeniorQueryBOData(prmItemDO.getItemSeniorQueryCols(),prmItemDO.getItemSeniorQueryColsCounts(),prmItemDO.getItemQuerySql()));//高级查询对象 List allKeyList= getRefFormVIName(prmItemDO.getItemInObj()); List itemOutFieldList =VciBaseUtil.str2List(prmItemDO.getItemOutFields()); List itemKeyFieldList =VciBaseUtil.str2List(prmItemDO.getItemKeyFields()); List itemSelectOutFieldList= allKeyList.stream() .filter(s -> !itemOutFieldList.contains(s)) .collect(Collectors.toList()); prmItemVO.setItemSelectOutFieldList(itemSelectOutFieldList);//待选择的属性字段 prmItemVO.setItemOutFieldList(itemOutFieldList);//需要使用的集合 // List itemSearchFieldList= itemOutFieldList.stream().filter(s ->!CollectionUtils.isEmpty(itemKeyFieldList).stream().map(s1 -> s1).collect(Collectors.toList()).contains(s) ).collect(Collectors.toList()); List itemSearchFieldList=new ArrayList<>(); if(!CollectionUtils.isEmpty(itemKeyFieldList)){ itemSearchFieldList= itemOutFieldList.stream().filter(s ->!itemKeyFieldList.contains(s)).collect(Collectors.toList()); }else{ itemSearchFieldList=itemOutFieldList; } prmItemVO.setItemSearchFieldList(itemSearchFieldList);//待搜索字段 prmItemVO.setItemKeyFieldList(itemKeyFieldList);//搜索字段 } /** * 初始化表格所用特殊字段配置 * @param prmItemDTO * @param prmItemDO */ private void initTableConfigDOO2VOData(PRMItemDTO prmItemDTO,PRMItemDO prmItemDO){ prmItemDTO.setItemFieldWidthList(initItemFieldWidthList(prmItemDO.getItemOutFields(),prmItemDO.getItemFieldWidth()));//列显示宽段 itemOutFieldList 相匹配 prmItemDTO.setItemSeniorQueryBOS(initItemSeniorQueryBOData(prmItemDO.getItemSeniorQueryCols(),prmItemDO.getItemSeniorQueryColsCounts(),prmItemDO.getItemQuerySql()));//高级查询对象 List allKeyList= getRefFormVIName(prmItemDO.getItemInObj()); List itemOutFieldList =VciBaseUtil.str2List(prmItemDO.getItemOutFields()); List itemKeyFieldList =VciBaseUtil.str2List(prmItemDO.getItemKeyFields()); List itemSelectOutFieldList= allKeyList.stream().filter(s ->!itemOutFieldList.stream().map(s1 -> s1).collect(Collectors.toList()).contains(s) ).collect(Collectors.toList()); prmItemDTO.setItemSelectoutFieldList(itemSelectOutFieldList);//待选择的属性字段 prmItemDTO.setItemOutFieldList(itemOutFieldList);//需要使用的集合 List itemSearchFieldList=new ArrayList<>(); if(!CollectionUtils.isEmpty(itemKeyFieldList)){ itemSearchFieldList= itemOutFieldList.stream().filter(s ->!itemKeyFieldList.contains(s)).collect(Collectors.toList()); }else{ itemSearchFieldList=itemOutFieldList; } prmItemDTO.setItemSearchFieldList(itemSearchFieldList);//待搜索字段 prmItemDTO.setItemKeyFieldList(itemKeyFieldList);//搜索字段 } /** * 初始化表格所用特殊字段配置 * @param prmItemDTO * @param prmItemDO */ private void initTableConfigDTOO2DOData(PRMItemDO prmItemDO,PRMItemDTO prmItemDTO){ prmItemDO.setItemOutFields(VciBaseUtil.array2String(prmItemDTO.getItemOutFieldList().toArray(new String[]{}))); //需要使用的字段prmItemDO.setItemKeyFields(CollectionUtils.isEmpty(prmItemDTO.getItemKeyFieldList())?"":VciBaseUtil.array2String(prmItemDTO.getItemKeyFieldList().toArray(new String[]{})));//需要搜索的字段 // TODO: 2024/12/5 Ludc 这儿去重用的不对,KeyValue::getValue是对宽度去重了 List newItemFieldWidthList = prmItemDTO.getItemFieldWidthList().stream().distinct().map(KeyValue::getValue).collect(Collectors.toList()); // TODO: 2024/12/5 Ludc 分隔符要和平台统一用,而不是用: prmItemDO.setItemFieldWidth(VciBaseUtil.array2String(newItemFieldWidthList.toArray(new String[]{}),","));//字段宽度 List itemSeniorQueryBOS = prmItemDTO.getItemSeniorQueryBOS(); List itemSeniorQueryColsList = new ArrayList<>(); List itemSeniorQueryColsCountsList=new ArrayList<>(); List itemQuerySqlList = new ArrayList<>(); itemSeniorQueryBOS.stream().forEach(itemSeniorQueryBO -> { String itemSeniorQueryCols = itemSeniorQueryBO.getItemSeniorQueryCols(); String itemSeniorQueryColsCounts = itemSeniorQueryBO.getItemSeniorQueryColsCounts(); String itemQuerySql = itemSeniorQueryBO.getItemQuerySql(); if(StringUtils.isNotBlank(itemSeniorQueryCols)) { itemSeniorQueryColsList.add(itemSeniorQueryCols); } if(StringUtils.isNotBlank(itemSeniorQueryColsCounts)) { itemSeniorQueryColsCountsList.add(itemSeniorQueryColsCounts); } if(StringUtils.isNotBlank(itemQuerySql)){ itemQuerySqlList.add(itemQuerySql); } }); prmItemDO.setItemSeniorQueryCols(VciBaseUtil.array2String(itemSeniorQueryColsList.toArray(new String[]{}))); prmItemDO.setItemSeniorQueryColsCounts(VciBaseUtil.array2String(itemSeniorQueryColsCountsList.toArray(new String[]{}))); prmItemDO.setItemQuerySql(VciBaseUtil.array2String(itemQuerySqlList.toArray(new String[]{}),";")); } /** * 初始化表格列宽度集合 */ private List initItemFieldWidthList(String itemOutFields,String itemFieldWidth){ List keyValueList=new ArrayList<>(); ListitemOutFieldList = VciBaseUtil.str2List(itemOutFields); ListitemFieldWidthList =VciBaseUtil.str2List(itemFieldWidth,","); if(itemOutFieldList.size()>0) { for (int i = 0; i < itemOutFieldList.size(); i++) { KeyValue keyValue = new KeyValue(); String with="250"; if(i initItemSeniorQueryBOData(String itemSeniorQueryCols,String itemSeniorQueryColsCounts,String itemQuerySql){ List itemSeniorQueryBOList=new ArrayList<>(); List itemSeniorQueryColList= VciBaseUtil.str2List(itemSeniorQueryCols); List itemSeniorQueryColsCountList= VciBaseUtil.str2List(itemSeniorQueryColsCounts); List itemQuerySqlList= VciBaseUtil.str2List(itemQuerySql,";"); if (itemSeniorQueryColList!=null&&itemSeniorQueryColList.size()>0){ for (int i=0;i getRefFormVIName(String refFormOid){ List keyList=new ArrayList<>(); try { PortalVI refFormVI = UITools.getService().getPortalVIById(refFormOid); PortalVIVO portalVIVO= portalVIDOO2VO(refFormVI); if(portalVIVO!=null&&portalVIVO.getPrm().getPrmItemList().size()>0){ portalVIVO.getPrm().getPrmItemList().stream().forEach(k->{ keyList.add(k.getItemField()); }); } } catch (PLException e) { // TODO Auto-generated catch block e.printStackTrace(); return keyList; } return keyList; } }