From a13255b4129ee8a7a7b7e1ecd8e02dd2c78f7c17 Mon Sep 17 00:00:00 2001 From: 田源 <tianyuan@vci-tech.com> Date: 星期四, 16 一月 2025 16:19:20 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java | 3419 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 3,275 insertions(+), 144 deletions(-) diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java index 4dc9c1c..e6b6c33 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java @@ -1,42 +1,51 @@ package com.vci.web.service.impl; -import com.sun.jnlp.ApiDialog; -import com.vci.client.mw.ClientContextVariable; import com.vci.common.utility.ObjectUtility; import com.vci.corba.common.PLException; +import com.vci.corba.common.data.UserEntityInfo; import com.vci.corba.framework.data.RoleRightInfo; import com.vci.corba.omd.btm.BizType; +import com.vci.corba.omd.ltm.LinkType; +import com.vci.corba.omd.qtm.QTInfo; import com.vci.corba.portal.PortalService; import com.vci.corba.portal.data.*; import com.vci.dto.RoleRightDTO; import com.vci.dto.UIAuthorDTO; -import com.vci.frameworkcore.compatibility.SmRoleQueryServiceI; -import com.vci.pagemodel.OsBtmTypeVO; -import com.vci.pagemodel.PLUILayoutCloneVO; -import com.vci.pagemodel.RoleRightVO; +import com.vci.model.PLDefination; +import com.vci.pagemodel.*; +import com.vci.starter.poi.bo.*; +import com.vci.starter.poi.util.ExcelUtil; import com.vci.starter.web.exception.VciBaseException; import com.vci.starter.web.pagemodel.*; -import com.vci.starter.web.util.VciBaseUtil; -import com.vci.starter.web.util.VciDateUtil; -import com.vci.starter.web.util.WebThreadLocalUtil; +import com.vci.starter.web.redis.RedisService; +import com.vci.starter.web.util.*; +import com.vci.starter.web.util.Lcm.BeanUtil; +import com.vci.starter.web.util.Lcm.CollectionUtil; +import com.vci.starter.web.util.Lcm.Func; import com.vci.web.service.OsBtmServiceI; import com.vci.web.service.UIManagerServiceI; -import com.vci.web.util.*; +import com.vci.web.util.PlatformClientUtil; +import com.vci.web.util.RightControlUtil; +import com.vci.web.util.UITools; +import com.vci.web.utility.UIDataFetcher; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; import org.apache.commons.lang3.StringUtils; -import org.apache.poi.ss.formula.functions.T; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; +import java.io.File; import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.regex.Pattern; import java.util.stream.Collectors; -import java.util.stream.Stream; /** - * UI瀹氫箟鏈嶅姟鐣岄潰鐩稿叧鎺ュ彛 + * UI瀹氫箟绠$悊鏈嶅姟鐣岄潰鐩稿叧鎺ュ彛 * @author ludc * @date 2024/8/28 17:05 */ @@ -48,11 +57,18 @@ */ @Resource private PlatformClientUtil platformClientUtil; + /** - * 瑙掕壊 + * 缂撳瓨宸ュ叿 */ @Resource - private SmRoleQueryServiceI smRoleQueryServiceI; + private RedisService redisService; + + /*** + * 鏄惁鏄鐞嗗憳 + */ + @Autowired + RightControlUtil rightControlUtil; /** * 涓氬姟绫诲瀷 @@ -64,6 +80,16 @@ * 鏃ュ織 */ private Logger logger = LoggerFactory.getLogger(getClass()); + + /** + * 瀵煎叆鏁版嵁鐨剆heet闆嗗悎 + */ + private final String IMPORTUIKEY = "importUIKey:"; + + /** + * ui瀹氫箟鏁版嵁寮曟搸 + */ + private UIDataFetcher uiDataFetcher = null; /** * 鎺掑簭姣旇緝鍣� @@ -108,7 +134,7 @@ } /** - * ton閫氳繃涓氬姟绫诲瀷鍜屽悕绉版煡璇� + * 閫氳繃涓氬姟绫诲瀷鍜屽悕绉版煡璇� * @param btemName * @param context * @return @@ -117,14 +143,14 @@ public List<PLUILayout> getUIContextDataByBtName(String btemName,String context) throws PLException { VciBaseUtil.alertNotNull(btemName,"涓氬姟绫诲瀷"); List<PLUILayout> pluiLayoutList=new ArrayList<>(); - List<String> contextList= VciBaseUtil.str2List(context); + List<String> contextList= new ArrayList<>(); if(StringUtils.isNotBlank(context)){ contextList=VciBaseUtil.str2List(context); }else{ contextList.add(""); } contextList.stream().forEach(code->{ - PLUILayout[] pluiLayouts= new PLUILayout[0]; + PLUILayout[] pluiLayouts= new PLUILayout[0]; try { pluiLayouts = platformClientUtil.getUIService().getPLUILayoutEntityByTypeAndCode(btemName,code); } catch (PLException e) { @@ -149,7 +175,6 @@ try { //ui涓婁笅鏂囧璞℃牎楠� canContinue(pluiLayout); - String code = pluiLayout.plCode; String name = pluiLayout.plName; boolean isExist = nameOrCodeIsExist(pluiLayout, false); @@ -230,9 +255,9 @@ * @return */ @Override - public boolean delUIContextData(String[] oids) throws PLException { + public boolean delUIContextData(String[] oids,String plRelatedType) throws PLException { VciBaseUtil.alertNotNull(oids,"寰呭垹闄ょ殑瀵硅薄鍒楄〃"); - //鍒犻櫎鏂规硶涓湁鍏宠仈鏁版嵁鍒犻櫎鐨勬搷浣滈�昏緫 + //鍒犻櫎鏂规硶涓湁鍏宠仈鏁版嵁鍒犻櫎鐨勬搷浣滈�昏緫,浣嗘槸杩欎釜鏂规硶瀛樺湪闂灏辨槸鍒犻櫎鐨勬暟鎹苟娌℃湁灏嗙紦瀛樼殑涓滆タ娓呯悊骞插噣 return platformClientUtil.getUIService().deletePLUILayoutByOidsForCascade(oids); } @@ -242,7 +267,7 @@ * @return */ @Override - public boolean cloneUiContextData(PLUILayoutCloneVO pluiLayoutCloneVO) throws PLException { + public boolean cloneUIContextData(PLUILayoutCloneVO pluiLayoutCloneVO) throws PLException { VciBaseUtil.alertNotNull( pluiLayoutCloneVO,"鍏嬮殕鍙傛暟瀵硅薄", pluiLayoutCloneVO.getSourcePLUILayout(),"鍏嬮殕鐨勬簮瀵硅薄淇℃伅", @@ -251,8 +276,9 @@ ); PLUILayout pluiLayout = new PLUILayout(); PLUILayout sourcePLUILayout = pluiLayoutCloneVO.getSourcePLUILayout(); + pluiLayout.plRelatedType = pluiLayoutCloneVO.getCloneTargetName(); //濡傛灉閫夋嫨鍏嬮殕鐩爣锛屽垯鍏嬮殕鍒伴�夋嫨鐨勭被鍨嬩笅锛屽鏋滄病鏈夐�夋嫨鍏嬮殕鐩爣锛屽垯鍏嬮殕鍒板綋鍓嶇被鍨嬩笅 - if(Func.isBlank(pluiLayoutCloneVO.getCloneTargetOid())){ + if(Func.isBlank(pluiLayoutCloneVO.getCloneTargetName())){ pluiLayout.plRelatedType = sourcePLUILayout.plRelatedType; } //鍏嬮殕鐨勫悕绉板拰ui涓婁笅鏂囩紪鍙锋煡閲� @@ -272,6 +298,9 @@ this.checkCodeName(pluiLayout); //1銆佸厛淇濆瓨ui涓婁笅鏂� boolean res = platformClientUtil.getUIService().savePLUILayout(pluiLayout); + if(!res){ + return res; + } //2銆佸啀鑰冭檻瀛愯妭鐐圭殑鍏嬮殕 PLTabPage[] pages = platformClientUtil.getUIService().getPLTabPagesByPageDefinationOId(sourcePLUILayout.plOId); //鎺у埗鍖鸿妭鐐瑰強鍏跺瓙鑺傜偣鐨勫厠闅� if(pages == null){ @@ -290,9 +319,1364 @@ } } + /** + * 鏍规嵁鍕鹃�夌殑鏉′欢鑾峰彇闇�瑕佸鍑虹殑ui涓婁笅鏂囨爲 + * @param expDatas + * @return + */ @Override - public void expUiContextData(String[] oids, HttpServletResponse response) throws PLException, IOException { + public Tree getExpContextTree(List<String> expDatas) { + VciBaseUtil.alertNotNull(expDatas,"瀵煎嚭鏌ヨ鍒楄〃"); + Tree tree = new Tree(); + String newObjectID36 = ObjectUtility.getNewObjectID36(); + tree.setOid(newObjectID36); + tree.setText("鍖哄煙"); + tree.setLevel(0); + List<Tree> treeList = new ArrayList<>(); + expDatas.stream().forEach(oid->{ + try { + PLUILayout pluiLayout = platformClientUtil.getUIService().getPLUILayoutById(oid); + if(Func.isNotEmpty(pluiLayout) && Func.isNotBlank(pluiLayout.plOId)){ + Tree tree1 = new Tree(); + tree1.setText(pluiLayout.plName); + tree1.setOid(pluiLayout.plOId); + tree1.setLevel(1); + tree1.setParentId(newObjectID36); + //鏌ヨ + PLTabPage[] plTabPages = platformClientUtil.getUIService().getPLTabPagesByPageDefinationOId(pluiLayout.plOId); + List<Tree> treeChildrens = new ArrayList<>(); + Arrays.stream(plTabPages).forEach(item->{ + Tree tree2 = new Tree(); + tree2.setLeaf(true); + tree2.setOid(item.plOId); + tree2.setText(item.plName); + tree2.setLevel(2); + tree2.setParentId(item.plContextOId); + treeChildrens.add(tree2); + }); + tree1.setChildren(treeChildrens); + treeList.add(tree1); + } + } catch (PLException e) { + e.printStackTrace(); + } + }); + tree.setChildren(treeList); + return tree; + } + + /** + * 瀵煎嚭ui涓婁笅鏂�(鍕鹃�夌殑瑕佸鍑虹殑鎺у埗鍖虹殑鏁版嵁) + * oids + * @return + */ + @Override + public String expUIContextData(Map<String,String> expConditionMap) throws PLException { + if(Func.isEmpty(expConditionMap)){ + throw new PLException("500",new String[]{"璇峰嬀閫夎瀵煎嚭鐨刄I涓婁笅鏂囨暟鎹�!"}); + } + //鐣岄潰娌′紶鍚嶇О锛屼娇鐢ㄩ粯璁ゅ鍑哄悕绉� + String exportFileName = "UI涓婁笅鏂囧鍑篲" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss"); + //璁剧疆鍒楀悕 + /*List<String> columns = Arrays.asList( + "鎵�灞炰笟鍔$被鍨�","鍚嶇О", "UI涓婁笅鏂�", "瀵艰埅鍖�", "鎺у埗鍖�","鎿嶄綔鍖�", + "椤电搴忓彿","鍖哄煙缂栫爜","鍖哄煙鍚嶇О","鏄惁鍚敤","鏄剧ず琛ㄨ揪寮�", "UI瑙f瀽绫�", + "鎵╁睍灞炴��", "鎻忚堪","椤甸潰璁捐淇℃伅","椤甸潰涓嬮厤缃殑鎸夐挳" + );*/ + + //鍐檈xcel + String excelPath = LocalFileUtil.getDefaultTempFolder() + File.separator + exportFileName + ".xls"; + try { + new File(excelPath).createNewFile(); + } catch (Throwable e) { + throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelPath}, e); + } + //璁剧疆鍒� + List<WriteExcelData> pldDataList = new ArrayList<>(); + List<WriteExcelData> tpDataList = new ArrayList<>(); + List<WriteExcelData> pdDataList = new ArrayList<>(); + List<WriteExcelData> tbDataList = new ArrayList<>(); + List<WriteExcelData> cpDataList = new ArrayList<>(); + //璁剧疆鍒楀ご + /*for (int index = 0; index < columns.size(); index++) { + excelDataList.add(new WriteExcelData(0,index, columns.get(index))); + }*/ + AtomicInteger pldRow = new AtomicInteger(0); + AtomicInteger tpRow = new AtomicInteger(0); + AtomicInteger pdRow = new AtomicInteger(0); + AtomicInteger tbRow = new AtomicInteger(0); + AtomicInteger cpRow = new AtomicInteger(0); + + expConditionMap.entrySet().stream().forEach(item->{ + //key瀛樻斁鐨剈i涓婁笅鏂囩殑id + try { + PLUILayout pluiLayout = platformClientUtil.getUIService().getPLUILayoutById(item.getKey()); + pldDataList.add(new WriteExcelData(pldRow.get(),0, pluiLayout.plOId)); + pldDataList.add(new WriteExcelData(pldRow.get(),1, pluiLayout.plCode)); + pldDataList.add(new WriteExcelData(pldRow.get(),2, pluiLayout.plName)); + pldDataList.add(new WriteExcelData(pldRow.get(),3, pluiLayout.plRelatedType)); + pldDataList.add(new WriteExcelData(pldRow.get(),4, pluiLayout.plIsShowForm)); + pldDataList.add(new WriteExcelData(pldRow.get(),5, pluiLayout.plIsShowNavigator)); + pldDataList.add(new WriteExcelData(pldRow.get(),6, pluiLayout.plIsShowTab)); + pldRow.getAndIncrement(); + + //value涓瓨鏀剧殑澶氫釜浠ラ�楀彿闂撮殧鐨勯〉绛緄d,閫氳繃杩欎釜id鏌ヨ鍑哄叾涓嬬殑椤甸潰璁捐鍜屾寜閽厤缃� + List<String> plTabPageOIds = Arrays.asList(item.getValue().split(",")); + if(Func.isNotEmpty(pluiLayout) && Func.isNotBlank(pluiLayout.plOId) && Func.isNotEmpty(plTabPageOIds)){ + PLTabPage[] plTabPages = platformClientUtil.getUIService().getPLTabPagesByPageDefinationOId(pluiLayout.plOId); + List<PLTabPage> filterTabPages = Arrays.stream(plTabPages).filter(plTabPage -> plTabPageOIds.contains(plTabPage.plOId)).collect(Collectors.toList()); + filterTabPages.stream().forEach(tabPage->{ + //鍖哄煙瀹氫箟 + tpDataList.add(new WriteExcelData(tpRow.get(),0, tabPage.plOId)); + tpDataList.add(new WriteExcelData(tpRow.get(),1, tabPage.plSeq)); + tpDataList.add(new WriteExcelData(tpRow.get(),2, tabPage.plCode)); + tpDataList.add(new WriteExcelData(tpRow.get(),3, tabPage.plLabel)); + tpDataList.add(new WriteExcelData(tpRow.get(),4, tabPage.plName)); + tpDataList.add(new WriteExcelData(tpRow.get(),5, tabPage.plContextOId)); + tpDataList.add(new WriteExcelData(tpRow.get(),6, tabPage.plAreaType)); + tpDataList.add(new WriteExcelData(tpRow.get(),7, tabPage.plIsOpen)); + tpDataList.add(new WriteExcelData(tpRow.get(),8, tabPage.plOpenExpression)); + tpDataList.add(new WriteExcelData(tpRow.get(),9, tabPage.plUIParser)); + tpDataList.add(new WriteExcelData(tpRow.get(),10, tabPage.plExtAttr)); + tpDataList.add(new WriteExcelData(tpRow.get(),11, tabPage.plDesc)); + tpDataList.add(new WriteExcelData(tpRow.get(),12, tabPage.plLicensOrs)); + tpRow.getAndIncrement(); + try { + PLPageDefination[] plPageDefinations = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(tabPage.plOId); + if(Func.isNotEmpty(plPageDefinations)){ + //List<PLTabButtonVO> tabButtonsTotal = new ArrayList<>(); + Arrays.stream(plPageDefinations).forEach(plPageDefination->{ + pdDataList.add(new WriteExcelData(pdRow.get(),0, plPageDefination.plOId)); + pdDataList.add(new WriteExcelData(pdRow.get(),1, plPageDefination.plTabPageOId)); + pdDataList.add(new WriteExcelData(pdRow.get(),2, plPageDefination.plType)); + pdDataList.add(new WriteExcelData(pdRow.get(),3, plPageDefination.name)); + pdDataList.add(new WriteExcelData(pdRow.get(),4, plPageDefination.desc)); + pdDataList.add(new WriteExcelData(pdRow.get(),5, plPageDefination.seq)); + pdDataList.add(new WriteExcelData(pdRow.get(),6, plPageDefination.plDefination)); + pdRow.getAndIncrement(); + //鏌ヨ鎸夐挳 + try { + PLTabButton[] tabButtons = platformClientUtil.getUIService().getPLTabButtonsByTableOId(plPageDefination.plOId); + for (PLTabButton tabButton:tabButtons){ + tbDataList.add(new WriteExcelData(tbRow.get(),0, tabButton.plOId)); + tbDataList.add(new WriteExcelData(tbRow.get(),1, tabButton.plTableOId)); + tbDataList.add(new WriteExcelData(tbRow.get(),2, tabButton.plPageOId)); + tbDataList.add(new WriteExcelData(tbRow.get(),3, tabButton.plActionOId)); + tbDataList.add(new WriteExcelData(tbRow.get(),4, tabButton.plLabel)); + tbDataList.add(new WriteExcelData(tbRow.get(),5, tabButton.plAreaType)); + tbDataList.add(new WriteExcelData(tbRow.get(),6, tabButton.plDesc)); + tbDataList.add(new WriteExcelData(tbRow.get(),7, tabButton.plSeq)); + tbDataList.add(new WriteExcelData(tbRow.get(),8, tabButton.plParentOid)); + tbDataList.add(new WriteExcelData(tbRow.get(),9, tabButton.displayMode)); + tbDataList.add(new WriteExcelData(tbRow.get(),10, tabButton.iconPath)); + tbDataList.add(new WriteExcelData(tbRow.get(),11, tabButton.authorization)); + tbDataList.add(new WriteExcelData(tbRow.get(),12, tabButton.show)); + tbRow.getAndIncrement(); + PLCommandParameter[] parameters = platformClientUtil.getUIService().getPLCommandParametersByCommandOId(tabButton.plOId); + if(Func.isNotEmpty(parameters)){ + Arrays.stream(parameters).forEach(param->{ + cpDataList.add(new WriteExcelData(cpRow.get(),0, param.plOId)); + cpDataList.add(new WriteExcelData(cpRow.get(),1, param.plCommandOId)); + cpDataList.add(new WriteExcelData(cpRow.get(),2, param.plKey)); + cpDataList.add(new WriteExcelData(cpRow.get(),3, param.plValue)); + cpRow.getAndIncrement(); + }); + } + } + } catch (PLException e) { + e.printStackTrace(); + } + }); + } + } catch (PLException e) { + e.printStackTrace(); + } + }); + } + } catch (PLException e) { + e.printStackTrace(); + } + }); + WriteExcelOption excelOption = new WriteExcelOption(); + excelOption.addSheetDataList("PlpageLayoutDefnation",pldDataList); + excelOption.addSheetDataList("Pltabpage",tpDataList); + excelOption.addSheetDataList("Plpagedefination",pdDataList); + excelOption.addSheetDataList("Pltabbutton",tbDataList); + excelOption.addSheetDataList("PlcommondParam",cpDataList); + ExcelUtil.writeDataToFile(excelPath, excelOption); + return excelPath; + } + + /** + * 瀵煎叆UI涓婁笅鏂� + * @param file + * @param isCovered 鏄惁瑕嗙洊 + * @param selectBtm 閫夋嫨鐨勪笟鍔$被鍨� + * @return + */ + @Override + public BaseResult impUIContextData(File file,boolean isCovered,String selectBtm) { + if(!isCovered){ + VciBaseUtil.alertNotNull(file,"excel鏂囦欢"); + if(!file.exists()){ + throw new VciBaseException("瀵煎叆鐨別xcel鏂囦欢涓嶅瓨鍦�,{0}",new String[]{file.getPath()}); + } + } + + try { + List<SheetDataSet> sheetDataSets = null; + SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); + //鏄鐩栨搷浣滐紝鎵�浠ョ洿鎺ヨ鍙� + if(isCovered){ + sheetDataSets = redisService.getCacheList(IMPORTUIKEY + sessionInfo.getUserId()); + if(Func.isEmpty(sheetDataSets)){ + throw new VciBaseException("浠庣紦瀛樹腑鏈幏鍙栧埌瀵煎叆鐨勬暟鎹紝璇峰埛鏂板悗閲嶈瘯锛侊紒"); + } + }else{ + //璇诲彇excel琛� + ReadExcelOption readExcelOption = new ReadExcelOption(); + readExcelOption.setReadAllSheet(true); //璇诲彇鍏ㄩ儴鐨剆heet + sheetDataSets = ExcelUtil.readDataObjectFromExcel(file,SheetDataSet.class,readExcelOption); + } + + PLUILayout[] plpagelayoutdefinations = null; + + SheetDataSet plpagelayoutdefnationsheet = sheetDataSets.get(0); + SheetDataSet pltabpagesheet = sheetDataSets.get(1); + SheetDataSet plpagedefinationsheet = sheetDataSets.get(2); + SheetDataSet pltabbuttonsheet = sheetDataSets.get(3); + SheetDataSet plcommondparamsheet = sheetDataSets.get(4); + + Map<PLUILayout,List<PLTabPage>> pdMap = new HashMap<>(); + Map<PLTabPage,List<PLPageDefination>> tdMap = new HashMap<>(); + Map<PLPageDefination,List<PLTabButton>> dbMap = new HashMap<>(); + Map<PLTabButton,List<PLCommandParameter>> bcMap = new HashMap<>(); + + List<PLUILayout> plpagelayoutdefinationList = new ArrayList<>(); + List<PLTabPage> pltabpagelist = new ArrayList<>(); + List<PLPageDefination> plpagedefinationlist = new ArrayList<>(); + List<PLTabButton> pltabbuttonlist = new ArrayList<>(); + List<PLCommandParameter> plcommandparameterlist = new ArrayList<>(); + + /*StringBuffer checkplpagelayoutdefination = new StringBuffer(); + StringBuffer checkplpagelayoutdefinationPlcode = new StringBuffer();*/ + StringBuffer plActionIDNulls = new StringBuffer(); + + //add by caill start 鍒濆鍖栨爣璁� + int count=0; + int preCount=0; + String preOID=""; + String doublePreOID=""; + String plpageLayoutDefinationId=""; + String plPageContextOId=""; + String plCommandOId=""; + String plTableOId=""; + + //add by caill end + PLAction[] allPLAction = platformClientUtil.getUIService().getAllPLAction(); + Map<String,String> relation = null; + List<SheetRowData> rowData = plpagelayoutdefnationsheet.getRowData(); + for(int i=0; i<rowData.size(); i++){ + pltabpagelist = new ArrayList<PLTabPage>(); + PLUILayout p = new PLUILayout(); + //HSSFRow readrow = plpagelayoutdefnationsheet.getRowData(); + Map<Integer, String> dataMap = rowData.get(i).getData(); + if(Func.isEmpty(dataMap)){ + break; + } + //鏍规嵁涓氬姟绫诲瀷鏌ヨui涓婁笅鏂� + plpagelayoutdefinations = platformClientUtil.getUIService().getPLUILayoutsByRelatedType(selectBtm); + + p.plOId = ObjectUtility.getNewObjectID36(); + p.plCode = dataMap.get(1); + p.plName = dataMap.get(2); + //add by caill start + //閬嶅巻UI鍚嶇О + for(PLUILayout pd : plpagelayoutdefinations){ + if(pd.plName.equals(p.plName) && !isCovered){ + //濡傛灉鐢ㄦ埛閫夋嫨瑕嗙洊锛岀浜屾璋冪敤灏变笉浼氫紶瀵煎叆鏂囦欢锛屾墍浠ヨ繖閲屽瓨鍏ョ紦瀛� + redisService.setCacheList(IMPORTUIKEY+sessionInfo.getUserId(),sheetDataSets); + //璁剧疆杩囨湡鏃堕棿涓�5鍒嗛挓锛屽洜涓轰竴鑸儏鍐典笅涓嶄細璇存槸绛夊お涔� + redisService.expire(IMPORTUIKEY+sessionInfo.getUserId(),5, TimeUnit.MINUTES); + throw new VciBaseException(pd.plName+"鍚嶇О宸茬粡瀛樺湪,鏄惁瑕嗙洊?"); + } + //鏍规嵁UI涓婁笅鏂囧仛鍒ゆ柇 + if(pd.plCode.equals(p.plCode)){ + count=1; + preOID=pd.plOId; //濡傛灉UI涓婁笅鏂囩浉鍚岋紝灏辨妸绯荤粺涓殑id璧嬪�肩粰鏂板鍏ョ殑id + p.plOId=pd.plOId; + } + } + //add by caill end + plpageLayoutDefinationId = dataMap.get(0); + String name = dataMap.get(3); + p.plRelatedType = dataMap.get(3); + p.plIsShowNavigator = Short.parseShort(dataMap.get(4)); + p.plIsShowTab = Short.parseShort(dataMap.get(5)); + p.plIsShowForm = Short.parseShort(dataMap.get(6)); + //閫夋嫨鐨勫拰瀵煎叆鐨勪笟鍔$被鍨嬭妭鐐逛笉涓�鑷� + if(!selectBtm.equals(name)){ + throw new VciBaseException("璇烽�夋嫨瑕佸鍏ョ殑绫诲瀷鑺傜偣鍚嶇О锛�"); + } + + plpagelayoutdefinationList.add(p); + + //鍖哄煙瀹氫箟sheet澶勭悊 + List<SheetRowData> tabPageRowData = pltabpagesheet.getRowData(); + if(Func.isNotEmpty(tabPageRowData)){ + for(int j=0; j<tabPageRowData.size(); j++){ + plpagedefinationlist = new ArrayList<PLPageDefination>(); + PLTabPage pt = new PLTabPage(); + Map<Integer, String> tabPageDataMap = tabPageRowData.get(j).getData(); + if(Func.isEmpty(tabPageDataMap)){ + break; + } + pt.plOId = ObjectUtility.getNewObjectID36(); + pt.plCode = tabPageDataMap.get(2); + pt.plName = tabPageDataMap.get(4); + //add by caill start + if(count==1) { + PLTabPage[] PLTabPages = platformClientUtil.getUIService().getPLTabPagesByPageDefinationOId(preOID); + //閬嶅巻鎺у埗鍖鸿〃鏍� + for(PLTabPage pl : PLTabPages){ + if(pl.plCode.equals(pt.plCode)){ + pt.plOId=pl.plOId; //濡傛灉鎺у埗鍖鸿〃鏍肩殑缂栫爜鍜屽鍏ョ殑缂栫爜涓�鏍凤紝灏辨妸鎺у埗鍖篿d璧嬪�肩粰鏂板鍏ョ殑id + preCount=1; + doublePreOID=pl.plOId; + } + } + } + //add by caill end + pt.plSeq = Short.parseShort(tabPageDataMap.get(1)); + pt.plLabel = tabPageDataMap.get(3); + pt.plContextOId = tabPageDataMap.get(5); + pt.plAreaType = Short.parseShort(tabPageDataMap.get(6)); + pt.plIsOpen = Short.parseShort(tabPageDataMap.get(7)); + pt.plOpenExpression = tabPageDataMap.get(8); + pt.plUIParser = tabPageDataMap.get(9); + pt.plExtAttr = tabPageDataMap.get(10); + pt.plDesc = tabPageDataMap.get(11); + pt.plLicensOrs = tabPageDataMap.get(12); + plPageContextOId = tabPageDataMap.get(5); + if(pt.plContextOId.equals(plpageLayoutDefinationId)){ + pt.plContextOId = p.plOId; + pltabpagelist.add(pt); + //椤甸潰璁捐澶勭悊 + List<SheetRowData> pagedefinationRowData = plpagedefinationsheet.getRowData(); + if(Func.isNotEmpty(pagedefinationRowData)){ + for(int k=0;k<pagedefinationRowData.size();k++){ + pltabbuttonlist = new ArrayList<>(); + PLPageDefination plpagedefination = new PLPageDefination(); + Map<Integer, String> pagedefinationDataMap = pagedefinationRowData.get(k).getData(); + + if(Func.isEmpty(pagedefinationDataMap)){ + break; + } + plpagedefination.plOId = ObjectUtility.getNewObjectID36(); + plpagedefination.name = pagedefinationDataMap.get(3); + //add by caill start + //鏈�鍚庝竴绾х殑鍒ゆ柇 + if(preCount==1) { + PLPageDefination[] PLPageDefinations = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(doublePreOID); + for(PLPageDefination plp : PLPageDefinations) { + if(plp.name.equals(plpagedefination.name)) { + plpagedefination.plOId=plp.plOId; + + } + + } + } + //add by caill end + plpagedefination.plDefination = pagedefinationDataMap.get(6); + plpagedefination.seq = Short.parseShort(pagedefinationDataMap.get(5)); + plpagedefination.plTabPageOId = pagedefinationDataMap.get(1); + plpagedefination.desc = pagedefinationDataMap.get(4); + plpagedefination.plType = Short.parseShort(pagedefinationDataMap.get(2)); + plTableOId = pagedefinationDataMap.get(1); + if(plpagedefination.plTabPageOId.equals(plPageContextOId)){ + plpagedefination.plTabPageOId = pt.plOId; + plpagedefinationlist.add(plpagedefination); + //淇濆瓨鏂版棫oid鐨勫叧绯伙紝鍦ㄧ‘瀹氬眰绾у叧绯绘椂浣跨敤 + relation = new HashMap<String,String>(); + List<SheetRowData> tabbuttonRowData = pltabbuttonsheet.getRowData(); + if(Func.isNotEmpty(tabbuttonRowData)){ + for(int a=0;a<tabbuttonRowData.size();a++){ + Map<Integer, String> tabbuttonDataMap = tabbuttonRowData.get(a).getData(); + if(Func.isNotEmpty(tabbuttonDataMap)){ + plCommandOId = tabbuttonDataMap.get(1); + String newOId = ObjectUtility.getNewObjectID36(); + relation.put(plCommandOId, newOId); + } + } + for(int a=0;a<tabbuttonRowData.size();a++){ + plcommandparameterlist = new ArrayList<PLCommandParameter>(); + PLTabButton plTabButton = new PLTabButton(); + Map<Integer, String> tabbuttonDataMap = tabbuttonRowData.get(a).getData(); + if(Func.isEmpty(tabbuttonDataMap)){ + break; + } + plTabButton.plOId = ObjectUtility.getNewObjectID36(); + plTabButton.plLabel = tabbuttonDataMap.get(4); + plTabButton.plAreaType = tabbuttonDataMap.get(5); + plTabButton.plTableOId = tabbuttonDataMap.get(1); + plTabButton.plSeq = Short.parseShort(tabbuttonDataMap.get(7)); + String plActionId = ""; + //PLAction[] allPLAction = Tool.getService().getAllPLAction(); + for(PLAction action : allPLAction){ + if((tabbuttonDataMap.get(3)!=null&&!"".equals(tabbuttonDataMap.get(3)) + )&&(tabbuttonDataMap.get(3).trim().equals(action.plCode.trim())) + ){ + plActionId = action.plOId; + break; + } + } + if(plActionId==null||"".equals(plActionId)){ + if(!plActionIDNulls.toString().contains(tabbuttonDataMap.get(3))){ + plActionIDNulls.append("\n\tAction缂栧彿:"+tabbuttonDataMap.get(3)); + } + } + plTabButton.plActionOId = plActionId; + plTabButton.plAreaType = tabbuttonDataMap.get(5); + plTabButton.plDesc = tabbuttonDataMap.get(6); + String parentOid = tabbuttonDataMap.get(8);//鐖秓id + plCommandOId = tabbuttonDataMap.get(1); + plTabButton.displayMode = tabbuttonDataMap.get(9); + plTabButton.iconPath = tabbuttonDataMap.get(10); + plTabButton.authorization = tabbuttonDataMap.get(11); + plTabButton.show = tabbuttonDataMap.get(12); + + //璧嬩簣淇濆瓨濂界殑鍊硷紝鏉ヤ繚璇佸眰绾у叧绯讳笉浼氫涪澶� + plTabButton.plOId = relation.get(plCommandOId); + if(parentOid != null && parentOid.length() > 0) { + plTabButton.plParentOid = + relation.get(parentOid) == null ? "" : relation.get(parentOid); + } + if(plTabButton.plTableOId.equals(plTableOId)){ + plTabButton.plTableOId = plpagedefination.plOId; + pltabbuttonlist.add(plTabButton); + List<SheetRowData> commondparamsRowData = plcommondparamsheet.getRowData(); + if(Func.isNotEmpty(commondparamsRowData)){ + for(int b=0;b<commondparamsRowData.size();b++){ + PLCommandParameter plCommandParameter = new PLCommandParameter(); + Map<Integer, String> commandParameterDataMap = commondparamsRowData.get(b).getData(); + if(Func.isEmpty(commandParameterDataMap)){ + break; + } + plCommandParameter.plOId = ObjectUtility.getNewObjectID36(); + plCommandParameter.plCommandOId = commandParameterDataMap.get(1); + plCommandParameter.plKey = commandParameterDataMap.get(2); + plCommandParameter.plValue = commandParameterDataMap.get(3); + if(plCommandParameter.plCommandOId.equals(plCommandOId)){ + plCommandParameter.plCommandOId = plTabButton.plOId; + plcommandparameterlist.add(plCommandParameter); + } + } + bcMap.put(plTabButton, plcommandparameterlist); + } + } + } + dbMap.put(plpagedefination, pltabbuttonlist); + } + } + } + tdMap.put(pt, plpagedefinationlist); + } + } + } + pdMap.put(p, pltabpagelist); + } + } + + if(plActionIDNulls.length()>0){ + throw new VciBaseException(plActionIDNulls.toString()+"涓嶅瓨鍦紒"); + } + + //鍒犻櫎鍘熸湁button鏁版嵁 + if(tdMap.size() > 0) { + for(List<PLPageDefination> list : tdMap.values()) { + for(PLPageDefination ppd : list) { + if(ppd.plOId != null && ppd.plOId.length() > 0) { + PLTabButton[] buttons = platformClientUtil.getUIService().getPLTabButtonsByTableOId(ppd.plOId); + if(buttons != null && buttons.length > 0) { + for(PLTabButton ptb : buttons) { + platformClientUtil.getUIService().deletePLTabButtonByID(ptb.plOId); + } + } + } + } + } + } + + for(PLUILayout plPageLayoutDefination : plpagelayoutdefinationList){ + List<PLTabPage> pltabpagelists = pdMap.get(plPageLayoutDefination); + for(PLTabPage pltabpage:pltabpagelists){ + List<PLPageDefination> plpagedefinationlists = tdMap.get(pltabpage); + for(PLPageDefination plpagedefination : plpagedefinationlists){ + List<PLTabButton> pltabbuttons = dbMap.get(plpagedefination); + for(PLTabButton pltabbutton : pltabbuttons){ + List<PLCommandParameter> plcommandParams = bcMap.get(pltabbutton); + for(PLCommandParameter plcommandparameter : plcommandParams){ + plcommandparameter.plCreateUser = sessionInfo.getUserId(); + plcommandparameter.plModifyUser = sessionInfo.getUserId(); + platformClientUtil.getUIService().savePLCommandParameter(plcommandparameter); + } + pltabbutton.plCreateUser = sessionInfo.getUserId(); + pltabbutton.plModifyUser = sessionInfo.getUserId(); + platformClientUtil.getUIService().savePLTabButton(pltabbutton); + } + platformClientUtil.getUIService().savePLPageDefination(plpagedefination); + } + pltabpage.plCreateUser = sessionInfo.getUserId(); + pltabpage.plModifyUser = sessionInfo.getUserId(); + platformClientUtil.getUIService().savePLTabPage(pltabpage); + } + plPageLayoutDefination.plCreateUser = sessionInfo.getUserId(); + plPageLayoutDefination.plModifyUser = sessionInfo.getUserId(); + platformClientUtil.getUIService().savePLUILayout(plPageLayoutDefination); + } + return BaseResult.success("UI涓婁笅鏂囧鍏ユ垚鍔燂紒"); + } catch (PLException e) { + e.printStackTrace(); + return BaseResult.success("UI涓婁笅鏂囧鍏ュけ璐�,鍘熷洜锛�"+VciBaseUtil.getExceptionMessage(e)); + } + } + + /** + * 鏍规嵁涓婁笅鏂嘔D鍜屽尯鍩燂紙椤电锛夌被鍨嬶紝鎸夐『搴忚幏鍙栧綋鍓嶅尯鍩熺殑tab椤� + */ + @Override + public DataGrid getTabByContextIdAndType(String contextId, int areaType) throws PLException { + VciBaseUtil.alertNotNull(contextId,"涓婁笅鏂囦富閿�",areaType,"鍖哄煙绫诲瀷"); + PLTabPage[] plTabPages = platformClientUtil.getUIService().getTabPagesByContextIdAndType(contextId, (short) areaType); + List<PLTabPage> tabPageList = Arrays.stream(plTabPages).sorted(((o1, o2) -> Math.toIntExact(o1.plSeq - o2.plSeq))) + .collect(Collectors.toList()); + DataGrid dataGrid = new DataGrid(); + dataGrid.setTotal(plTabPages.length); + dataGrid.setData(tabPageList); + return dataGrid; + } + + /** + * 娣诲姞鍖哄煙鏁版嵁 + * @param plTabPage + * @return + */ + @Override + public boolean addTabData(PLTabPage plTabPage) throws PLException { + VciBaseUtil.alertNotNull(plTabPage,"娣诲姞鍖哄煙鏁版嵁"); + SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); + plTabPage.plCreateUser = sessionInfo.getUserId(); + plTabPage.plModifyUser = sessionInfo.getUserId(); + plTabPage.plOId = ObjectUtility.getNewObjectID36(); + //鏂板鍜屼慨鏀瑰墠妫�鏌ワ紝鍑洪敊鐩存帴鎶涘嚭寮傚父 + checkEdit(plTabPage); + + return platformClientUtil.getUIService().savePLTabPage(plTabPage); + } + + /** + * 淇敼鍖哄煙锛堥〉绛撅級鏁版嵁 + * @param plTabPage + * @return + */ + @Override + public boolean updateTabData(PLTabPage plTabPage) throws PLException { + VciBaseUtil.alertNotNull(plTabPage,"娣诲姞鍖哄煙鏁版嵁"); + SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); + plTabPage.plModifyUser = sessionInfo.getUserId(); + + //鏂板鍜屼慨鏀瑰墠妫�鏌ワ紝鍑洪敊鐩存帴鎶涘嚭寮傚父 + checkEdit(plTabPage); + + return platformClientUtil.getUIService().updatePLTabPage(plTabPage); + } + + /** + * 鍒犻櫎鍖哄煙锛堥〉绛撅級鏁版嵁 + * @param oids + * @return + */ + @Override + public boolean deleteTabData(String[] oids) throws PLException { + VciBaseUtil.alertNotNull(oids,"寰呭垹闄ょ殑涓婚敭鍒楄〃"); + return platformClientUtil.getUIService().deletePLTabPageByOidsForCascade(oids); + } + + /** + * 鎵╁睍灞炴�у悎瑙勬娴� + * @param extAttr + * @return + */ + public BaseResult checkTabPageExtAttrIsOk(String extAttr){ + // 鏁版嵁鏍煎紡锛歟xt1:xx;ext2;ext3:xx;ext4:xxx;extn:xxx; + boolean res = checkExtValIsOk(extAttr); + return res ? BaseResult.success(true,"鎵╁睍灞炴�ф暟鎹牸寮忔纭紒"):BaseResult.fail("鎵╁睍灞炴�ф暟鎹牸寮忎笉姝g‘锛侊紒"); + } + + /** + * 鏌ヨ椤甸潰璁捐瀹氫箟 + * @param pageContextOId + * @return + */ + @Override + public DataGrid getPLPageDefinations(String pageContextOId) throws PLException { + DataGrid dataGrid = new DataGrid(); + if(Func.isBlank(pageContextOId)) return dataGrid; + PLPageDefination[] plPageDefinations = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(pageContextOId); + if(Func.isEmpty(plPageDefinations)){ + return dataGrid; + } + //DO2VO + List<PLDefinationVO> plDefinationVOS = this.pageDefinations2PLDefinationVO(Arrays.asList(plPageDefinations)); + dataGrid.setTotal(plDefinationVOS.size()); + Collections.sort(plDefinationVOS, Comparator.comparing(PLDefinationVO::getSeq)); + //Arrays.sort(plDefinationVOS, pageDefinationComparator); + dataGrid.setData(plDefinationVOS); + return dataGrid; + } + + /** + * 椤甸潰瀹氫箟鐨凞O2VO瀵硅薄 + * @param plPageDefinations + * @return + */ + private List<PLDefinationVO> pageDefinations2PLDefinationVO(List<PLPageDefination> plPageDefinations){ + List<PLDefinationVO> plDefinationVOList = new ArrayList<>(); + plPageDefinations.stream().forEach(item->{ + try { + PLDefinationVO plDefinationVO = new PLDefinationVO(); + PLDefination plDefination = UITools.getPLDefination(item.plDefination); + BeanUtil.copy(plDefination,plDefinationVO); + plDefinationVO.setDescription(item.desc); + plDefinationVO.setSeq(String.valueOf(item.seq)); + plDefinationVO.setTabPageOId(item.plTabPageOId); + plDefinationVO.setId(item.plOId); + plDefinationVO.setName(item.name); + plDefinationVO.setType(item.plType); + plDefinationVO.setTemplateType(String.valueOf(plDefination.getTemplateType())); + plDefinationVOList.add(plDefinationVO); + } catch (Throwable e) { + e.printStackTrace(); + logger.error(e.getMessage()); + throw new VciBaseException("椤甸潰瀹氫箟DO瀵硅薄杞琕O瀵硅薄鏃跺嚭鐜伴敊璇�,鍘熷洜锛�"+e.getMessage()); + } + }); + return plDefinationVOList; + } + + /** + * 娣诲姞椤甸潰瀹氫箟 + * @param pdVO + * @return + */ + @Override + public boolean addPageDefination(PLDefinationVO pdVO) throws Throwable { + VciBaseUtil.alertNotNull(pdVO,"椤甸潰瀹氫箟瀵硅薄",pdVO.getSeq(),"缂栧彿",pdVO.getName(),"鍚嶇О"); + + PLDefination d = new PLDefination(); + PLPageDefination pd = new PLPageDefination(); + pd.plTabPageOId = pdVO.getTabPageOId(); + pd.plOId = ObjectUtility.getNewObjectID36(); + //涓嶈兘涓虹┖灞炴�ф鏌� + /*if(!this.baseInfoIsOk(pd,false)){ + return false; + }*/ + + pd.name = pdVO.getName().trim(); + pd.seq = Short.valueOf(pdVO.getSeq().trim()); + pd.desc = pdVO.getDescription(); + pd.plType = (short) pdVO.getType(); + + d.setName(pdVO.getName().trim()); + d.setUiParser(pdVO.getUiParser().trim()); + d.setExtAttr(pdVO.getExtAttr().trim()); + d.setTemplateType(pdVO.getTemplateType()); + + //鍚嶇О鍜岀紪鍙锋煡閲� + newPLDefinationIsOk(pdVO, false); + + // 妫�鏌ュ悇涓被鍨嬩笅鐨勬暟鎹槸鍚﹁緭鍏ユ垨鏈夋晥,涓�鍏�6绉嶇被鍨嬫寜绫诲瀷妫�楠� + String templateType = pdVO.getTemplateType(); + switch (templateType){ + //Table(琛ㄦ牸) + case "1": + //From(琛ㄥ崟) + case "4": + TableComptCheckInput tci = new TableComptCheckInput( + pdVO.getSearchTarger() + ,pdVO.getShowType() + ,pdVO.getLinkType() + ,pdVO.getTemplateId() + ,pdVO.getQueryTemplateName() + ); + if(!tci.checkInputIsOk()){ + return false; + } + d = tci.getNewPLDefination(d); + break; + //Custom(鑷畾涔夋ā鏉�) + case "2": + //鍙鏌ユ帶鍒惰矾寰勪笉鑳戒负绌�,鏈夐棶棰樹細鐩存帴鎶ラ敊 + CustomComptCheckInput ccci = new CustomComptCheckInput(pdVO.getControlPath()); + if(!ccci.checkInputIsOk()){ + return false; + } + d = ccci.getNewPLDefination(d); + break; + //TreeTable(鏍戣〃) + case "3": + TreeTableComptCheckInput ttcci = new TreeTableComptCheckInput( + pdVO.getSearchTarger() + ,pdVO.getShowType() + ,pdVO.getLinkType() + ,pdVO.getTemplateId() + ,pdVO.getQueryTemplateName() + ,pdVO.getExpandCols() + ,pdVO.getExpandMode() + ); + if(!ttcci.checkInputIsOk()){ + return false; + } + d = ttcci.getNewPLDefination(d); + break; + //Tree(鏍�) + case "5": + TreeComptCheckInput tcci = new TreeComptCheckInput( + pdVO.getShowType(), + pdVO.getLinkType(), + pdVO.getQueryTemplateName(), + pdVO.getRootContent(), + pdVO.getShowAbs(), + pdVO.getShowLinkAbs(), + pdVO.getSeparator(), + pdVO.getExpandMode() + ); + if(!tcci.checkInputIsOk()){ + return false; + } + d = tcci.getNewPLDefination(d); + break; + //UILayout(UI瀹氫箟) + case "6": + UILayoutComptCheckInput ulci = new UILayoutComptCheckInput( + pdVO.getSearchTarger(), + pdVO.getSubUIObjType(), + pdVO.getSubUILayout(), + pdVO.getQueryTemplateName(), + pdVO.getQryType() + ); + if(!ulci.checkInputIsOk()){ + return false; + } + d = ulci.getNewPLDefination(d); + break; + } + + d.setNavigatorType(pdVO.getNavigatorType()); + d = setEventDataToPLDefination(d,pdVO); + //杞瑇ml璧嬪�煎埌plDefination涓� + pd.plDefination = UITools.getPLDefinationText(d); + + //鎵ц淇濆瓨 + return platformClientUtil.getUIService().savePLPageDefination(pd); + } + + /** + * 淇敼椤甸潰瀹氫箟 + * @param pdVO + * @return + */ + @Override + public boolean updatePageDefination(PLDefinationVO pdVO) throws Throwable { + + VciBaseUtil.alertNotNull(pdVO,"椤甸潰瀹氫箟瀵硅薄",pdVO.getSeq(),"缂栧彿",pdVO.getName(),"鍚嶇О"); + PLPageDefination pd = new PLPageDefination(); + PLDefination d = new PLDefination(); + BeanUtil.copy(pdVO,d); + + //涓嶈兘涓虹┖灞炴�ф鏌� + /*if(!this.baseInfoIsOk(pd,true)){ + return false; + }*/ + pd.plOId = pdVO.getId(); + pd.plTabPageOId = pdVO.getTabPageOId(); + pd.name = pdVO.getName().trim(); + pd.seq = Short.valueOf(pdVO.getSeq().trim()); + pd.desc = pdVO.getDescription(); + pd.plType = (short) pdVO.getType(); + + d.setId(pdVO.getId()); + d.setName(pdVO.getName().trim()); + d.setUiParser(pdVO.getUiParser().trim()); + d.setExtAttr(pdVO.getExtAttr().trim()); + d.setTemplateType(pdVO.getTemplateType()); + + this.newPLDefinationIsOk(pdVO, true); + + // 妫�鏌ュ悇涓粍浠跺唴閮ㄧ殑鏁版嵁鏄惁鏈夋晥 + String templateType = pdVO.getTemplateType(); + switch (templateType){ + //Table(琛ㄦ牸) + case "1": + //From(琛ㄥ崟) + case "4": + TableComptCheckInput tci = new TableComptCheckInput( + pdVO.getSearchTarger() + ,pdVO.getShowType() + ,pdVO.getLinkType() + ,pdVO.getTemplateId() + ,pdVO.getQueryTemplateName() + ); + if(!tci.checkInputIsOk()){ + return false; + } + d = tci.getNewPLDefination(d); + break; + //Custom(鑷畾涔夋ā鏉�) + case "2": + //鍙鏌ユ帶鍒惰矾寰勪笉鑳戒负绌�,鏈夐棶棰樹細鐩存帴鎶ラ敊 + CustomComptCheckInput ccci = new CustomComptCheckInput(pdVO.getControlPath()); + if(!ccci.checkInputIsOk()){ + return false; + } + d = ccci.getNewPLDefination(d); + break; + //TreeTable(鏍戣〃) + case "3": + TreeTableComptCheckInput ttcci = new TreeTableComptCheckInput( + pdVO.getSearchTarger() + ,pdVO.getShowType() + ,pdVO.getLinkType() + ,pdVO.getTemplateId() + ,pdVO.getQueryTemplateName() + ,pdVO.getExpandCols() + ,pdVO.getExpandMode() + ); + if(!ttcci.checkInputIsOk()){ + return false; + } + d = ttcci.getNewPLDefination(d); + break; + //Tree(鏍�) + case "5": + TreeComptCheckInput tcci = new TreeComptCheckInput( + pdVO.getShowType(), + pdVO.getLinkType(), + pdVO.getQueryTemplateName(), + pdVO.getRootContent(), + pdVO.getShowAbs(), + pdVO.getShowLinkAbs(), + pdVO.getSeparator(), + pdVO.getExpandMode() + ); + if(!tcci.checkInputIsOk()){ + return false; + } + d = tcci.getNewPLDefination(d); + break; + //UILayout(UI瀹氫箟) + case "6": + UILayoutComptCheckInput ulci = new UILayoutComptCheckInput( + pdVO.getSearchTarger(), + pdVO.getSubUIObjType(), + pdVO.getSubUILayout(), + pdVO.getQueryTemplateName(), + pdVO.getQryType() + ); + if(!ulci.checkInputIsOk()){ + return false; + } + d = ulci.getNewPLDefination(d); + break; + } + d.setNavigatorType(pdVO.getNavigatorType()); + d = setEventDataToPLDefination(d,pdVO); + pd.plDefination = UITools.getPLDefinationText(d); + + return platformClientUtil.getUIService().updatePLPageDefination(pd); + } + + /** + * 鍒犻櫎椤甸潰瀹氫箟 + * @param oids + * @return + */ + @Override + public boolean delPageDefination(String[] oids) throws PLException { + VciBaseUtil.alertNotNull(oids,"鍒犻櫎鐨勯〉闈㈠畾涔変富閿�"); + boolean res = platformClientUtil.getUIService().deletePLPageDefinationByOidsForCascade(oids); + return res; + } + + /** + * 鑾峰彇椤电鍖哄煙鎸夐挳閰嶇疆淇℃伅 + * @param pageDefinationOid + * @return + */ + @Override + public List<PLTabButtonVO> getTabButtons(String pageDefinationOid) { + VciBaseUtil.alertNotNull(pageDefinationOid,"椤甸潰瀹氫箟涓婚敭"); + List<PLTabButton> buttonList = new ArrayList<>(); + try { + PLTabButton[] plTabButtons = platformClientUtil.getUIService().getPLTabButtonsByTableOId(pageDefinationOid); + buttonList = Arrays.asList(plTabButtons); + List<PLTabButtonVO> plTabButtonVOList = this.tabButton2TabButtonVOS(buttonList); + List<PLTabButtonVO> returnButtonVOList = new ArrayList<>(); + PLTabButtonVO plTabButtonVO = new PLTabButtonVO(); + for(int i = 0; i < plTabButtonVOList.size(); i++){ + plTabButtonVO = plTabButtonVOList.get(i); + + if(plTabButtonVO.getParentOid().equals("")){ + plTabButtonVO.setChildren(plTabButtonVO2Children(plTabButtonVOList,plTabButtonVO.getOId())); + returnButtonVOList.add(plTabButtonVO); + } + } + return returnButtonVOList; + } catch (Exception e) { + e.printStackTrace(); + throw new VciBaseException("鍔犺浇椤电鍖哄煙鎸夐挳閰嶇疆淇℃伅寮傚父锛�" + e.getMessage()); + } + } + + /** + * 澶氫釜鎸夐挳閰嶇疆DO瀵硅薄杞涓猇O瀵硅薄 + * @param listDO + * @return + */ + private List<PLTabButtonVO> tabButton2TabButtonVOS(List<PLTabButton> listDO){ + List<PLTabButtonVO> plTabButtonVOList = new ArrayList<PLTabButtonVO>(); + if(Func.isEmpty(listDO)){ + return plTabButtonVOList; + } + listDO.stream().forEach(item->{ + try { + PLTabButtonVO plTabButtonVO = this.tabButton2TabButtonVO(item); + plTabButtonVOList.add(plTabButtonVO); + } catch (PLException e) { + e.printStackTrace(); + String errorLog = "鎸夐挳閰嶇疆DO TO VO鏃跺嚭鐜伴敊璇紝鍘熷洜锛�"+VciBaseUtil.getExceptionMessage(e); + logger.error(errorLog); + throw new VciBaseException(errorLog); + } + }); + return plTabButtonVOList; + } + + /** + * 鎸夐挳閰嶇疆DO瀵硅薄杞琕O瀵硅薄 + * @param tabButtonDO + * @return + */ + private PLTabButtonVO tabButton2TabButtonVO(PLTabButton tabButtonDO) throws PLException { + PLTabButtonVO plTabButtonVO = new PLTabButtonVO(); + if(Func.isEmpty(tabButtonDO) && Func.isBlank(tabButtonDO.plOId)){ + return plTabButtonVO; + } + plTabButtonVO.setOId(tabButtonDO.plOId); + plTabButtonVO.setTableOId(tabButtonDO.plTableOId); + //plTabButtonVO.setPageOId(tabButtonDO.plPageOId); + plTabButtonVO.setActionOId(tabButtonDO.plActionOId); + plTabButtonVO.setLabel(tabButtonDO.plLabel); + plTabButtonVO.setAreaType(tabButtonDO.plAreaType); + plTabButtonVO.setDesc(tabButtonDO.plDesc); + plTabButtonVO.setSeq(tabButtonDO.plSeq); + plTabButtonVO.setCreateUser(tabButtonDO.plCreateUser); + plTabButtonVO.setCreateTime(tabButtonDO.plCreateTime); + plTabButtonVO.setModifyUser(tabButtonDO.plModifyUser); + plTabButtonVO.setModifyTime(tabButtonDO.plModifyTime); + plTabButtonVO.setLicensOrs(tabButtonDO.plLicensOrs); + plTabButtonVO.setParentOid(tabButtonDO.plParentOid); + plTabButtonVO.setDisplayMode(tabButtonDO.displayMode); + plTabButtonVO.setIconPath(tabButtonDO.iconPath); + plTabButtonVO.setAuthorization(tabButtonDO.authorization); + plTabButtonVO.setShow(tabButtonDO.show); + //鍙傛暟淇℃伅鍥炲~ + PLCommandParameter[] parameters = platformClientUtil.getUIService().getPLCommandParametersByCommandOId(tabButtonDO.plOId); + if(Func.isNotEmpty(parameters)){ + LinkedHashMap<String, String> parameterMap = Arrays.stream(parameters) + .collect(Collectors.toMap( + parm -> parm.plKey, + parm -> parm.plValue, + (existing, replacement) -> existing, // 澶勭悊閲嶅閿殑鎯呭喌 + LinkedHashMap::new // 鎸囧畾浣跨敤 LinkedHashMap + )); + plTabButtonVO.setButtonParams(parameterMap); + } + if(Func.isNotBlank(tabButtonDO.plActionOId)){ + PLAction actionInfo = platformClientUtil.getUIService().getPLActionById(tabButtonDO.plActionOId); + plTabButtonVO.setActionName(Func.isNotEmpty(actionInfo) ? actionInfo.plName:""); + } + return plTabButtonVO; + } + + /** + * 鎸夐挳閰嶇疆瀛愯妭鐐规煡鎵� + * @param plOid + * @param plTabButtonVOList + * @return + */ + private List<PLTabButtonVO> plTabButtonVO2Children(List<PLTabButtonVO> plTabButtonVOList, String plOid){ + ArrayList<PLTabButtonVO> plTabButtonVOS = new ArrayList<>(); + for (PLTabButtonVO plTabButtonVO : plTabButtonVOList) { + if(StringUtils.isBlank(plTabButtonVO.getParentOid())){ + continue; + } + if(plTabButtonVO.getParentOid().equals(plOid)){ + plTabButtonVO.setChildren(plTabButtonVO2Children(plTabButtonVOList,plTabButtonVO.getOId())); + plTabButtonVOS.add(plTabButtonVO); + } + } + return plTabButtonVOS; + } + + /** + * 鎸夐挳閰嶇疆VO瀵硅薄杞珼O瀵硅薄 + * @param tabButtonVO + * @return + * @throws PLException + */ + private PLTabButton tabButtonVO2TabButton(PLTabButton plTabButton,PLTabButtonVO tabButtonVO) { + plTabButton.plOId = tabButtonVO.getOId(); + plTabButton.plTableOId = tabButtonVO.getTableOId(); + //plTabButton.plPageOId = tabButtonVO.getPageOId(); + plTabButton.plActionOId = tabButtonVO.getActionOId(); + plTabButton.plLabel = tabButtonVO.getLabel(); + plTabButton.plAreaType = tabButtonVO.getAreaType(); + plTabButton.plDesc = tabButtonVO.getDesc(); + plTabButton.plSeq = tabButtonVO.getSeq(); + plTabButton.plCreateUser = tabButtonVO.getCreateUser(); + plTabButton.plCreateTime = tabButtonVO.getCreateTime(); + plTabButton.plModifyUser = tabButtonVO.getModifyUser(); + plTabButton.plModifyTime = tabButtonVO.getModifyTime(); + plTabButton.plLicensOrs = tabButtonVO.getLicensOrs(); + plTabButton.plParentOid = tabButtonVO.getParentOid(); + plTabButton.displayMode = tabButtonVO.getDisplayMode(); + plTabButton.iconPath = tabButtonVO.getIconPath(); + plTabButton.authorization = tabButtonVO.getAuthorization(); + plTabButton.show = tabButtonVO.getShow(); + return plTabButton; + } + + /** + * 娣诲姞鎸夐挳閰嶇疆淇℃伅 + * @param tabButtonVO + * @return + */ + @Override + public BaseResult addTabButton(PLTabButtonVO tabButtonVO) { + boolean res = this.saveOrUpdateTabButton(tabButtonVO, true); + return res ? BaseResult.success("鎸夐挳閰嶇疆娣诲姞鎴愬姛锛�"):BaseResult.success("鎸夐挳閰嶇疆娣诲姞澶辫触锛�"); + } + + /** + * 淇敼鎸夐挳閰嶇疆淇℃伅 + * @param tabButtonVO + * @return + */ + @Override + public BaseResult updateTabButton(PLTabButtonVO tabButtonVO) { + boolean res = this.saveOrUpdateTabButton(tabButtonVO, false); + return res ? BaseResult.success("鎸夐挳閰嶇疆淇敼鎴愬姛锛�"):BaseResult.success("鎸夐挳閰嶇疆淇敼澶辫触锛�"); + } + + /** + * 淇濆瓨鎴栦慨鏀规寜閽厤缃俊鎭� + * @param tabButtonVO + * @return + */ + @Override + public boolean saveOrUpdateTabButton(PLTabButtonVO tabButtonVO,boolean isAdd){ + VciBaseUtil.alertNotNull(tabButtonVO,"鎸夐挳閰嶇疆瀵硅薄",tabButtonVO.getLabel(),"鍙傛暟鍚嶇О",tabButtonVO.getTableOId(),"椤甸潰瀹氫箟涓婚敭"); + //妫�鏌ュ綋鍓嶆坊鍔犵殑鍒楄〃鏄惁閲嶅锛屼絾鏄繖鍎垮彧鏀寔鍗曟潯鏁版嵁淇濆瓨锛屾墍鏈夊綋鍓嶅垪琛ㄥ垽閲嶅彲浠ュ墠绔潵鍋� + //String btnParamValidate = this.geCheckRes(); + if (tabButtonVO.getSeq() < 1 || tabButtonVO.getSeq() > 63) { + throw new VciBaseException("鎸夊簭鍙疯秴鍑鸿寖鍥达紝璇蜂慨鏀癸紝鎸夐挳銆愮紪鍙枫�戝彧鑳藉湪銆�1-63銆戣寖鍥村唴銆�"); + } + //褰撳墠鐧诲綍鐢ㄦ埛鐨勪俊鎭� + SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); + //VO2DO + PLTabButton plTabButton = this.tabButtonVO2TabButton(new PLTabButton(), tabButtonVO); + if(isAdd) { + //濡傛灉鏄鍔犳搷浣滐紝鐩存帴鍒涘缓PLTabButton瀵硅薄 + plTabButton.plOId = ObjectUtility.getNewObjectID36(); + plTabButton.plCreateUser = sessionInfo.getUserId(); + plTabButton.plModifyUser = sessionInfo.getUserId(); + } else { + //淇敼鎿嶄綔 + plTabButton.plModifyUser = sessionInfo.getUserId(); + } + + try { + if(isAdd){ + boolean success = platformClientUtil.getUIService().savePLTabButton(plTabButton); + if(success == false) { + throw new VciBaseException("缂栧彿閲嶅锛岀紪鍙峰凡缁忓湪褰撳墠椤电涓嬪瓨鍦紒"); + } + } else if(!isAdd){ + platformClientUtil.getUIService().updatePLTabButton(plTabButton); + } + } catch (Exception e) { + e.printStackTrace(); + String errorLog = "淇濆瓨鎸夐挳淇℃伅鏃跺彂鐢熷紓甯革細" + e.getMessage(); + logger.error(errorLog); + throw new VciBaseException(errorLog); + } + //澶嶇敤浠ュ墠鐨勪唬鐮侊紝瀵逛簬鍙傛暟涓�鏉′竴鏉″垹闄わ紝涓�鏉′竴鏉″垱寤� + //鏁版嵁閲忓強骞跺彂杈冨皯锛屾殏鏃惰繖涔堝鐞嗘病鏈変粈涔堥棶棰� + if(!isAdd) { + try { + platformClientUtil.getUIService().deletePLCommandParameterByTabButtonId(plTabButton.plOId); + } catch (PLException e) { + e.printStackTrace(); + } + } + this.saveButtonParams(tabButtonVO.getButtonParams(),plTabButton.plOId); + return true; + } + + /** + * 鎸夐挳鍙傛暟淇濆瓨 + * @param buttonParams + * @param tabButtonOid + * @return + */ + private void saveButtonParams(LinkedHashMap<String, String> buttonParams,String tabButtonOid) throws VciBaseException{ + if(Func.isNotEmpty(buttonParams)) { + SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); + Iterator<Map.Entry<String, String>> iterator = buttonParams.entrySet().iterator(); + while(iterator.hasNext()){ + Map.Entry<String, String> next = iterator.next(); + if(StringUtils.isEmpty(next.getKey()) || StringUtils.isEmpty(next.getValue())){ + iterator.remove(); + } + } + Iterator<Map.Entry<String, String>> kvItor = buttonParams.entrySet().iterator(); + while(kvItor.hasNext()){ + Map.Entry<String, String> next = kvItor.next(); + PLCommandParameter plCommandParameter = new PLCommandParameter(); + plCommandParameter.plOId = ObjectUtility.getNewObjectID36(); + plCommandParameter.plCommandOId = tabButtonOid; + plCommandParameter.plKey = next.getKey(); + plCommandParameter.plValue = next.getValue(); + plCommandParameter.plCreateUser = sessionInfo.getUserId(); + plCommandParameter.plModifyUser = sessionInfo.getUserId(); + try { + platformClientUtil.getUIService().savePLCommandParameter(plCommandParameter); + } catch (PLException e) { + e.printStackTrace(); + throw new VciBaseException("淇濆瓨鎸夐挳鍙傛暟鏃跺彂鐢熷紓甯革細"+ e.getMessage()); + } + } + } + } + + /** + * 鍒犻櫎鍗曚釜鎸夐挳閰嶇疆 + * @param tabButtonVO + * @return + */ + @Override + public boolean deleteTabButton(PLTabButtonVO tabButtonVO) throws PLException { + VciBaseUtil.alertNotNull(tabButtonVO,"鍒犻櫎鐨勬寜閽厤缃璞�"); + boolean success = platformClientUtil.getUIService().deletePLTabButton(this.tabButtonVO2TabButton(new PLTabButton(),tabButtonVO)); + if(success == false){ + throw new VciBaseException("璇ユ湁瀛愮骇鎸夐挳锛屼笉鑳藉垹闄わ紒"); + } + return true; + } + + /** + * 璋冩暣涓轰笅绾ф寜閽� + * @param tabButtonVO + * @return + */ + @Override + public BaseResult joinBtn(PLTabButtonVO tabButtonVO) throws PLException { + VciBaseUtil.alertNotNull(tabButtonVO,"闇�璋冩暣涓轰笅绾ф寜閽殑瀵硅薄",tabButtonVO.getTableOId(),"褰撳墠鎸夐挳閰嶇疆鎵�鍦ㄧ殑椤甸潰涓婚敭"); + //鍚屼竴椤甸潰涓嬬殑鎸夐挳 + List<PLTabButtonVO> plTabButtons = this.getTabButtons(tabButtonVO.getTableOId()); + if(Func.isEmpty(plTabButtons)){ + return BaseResult.fail("鏈幏鍙栧埌鎸夐挳閰嶇疆淇℃伅锛�"); + } + //鑾峰彇褰撳墠瑕佺Щ鍔ㄧ殑鎸夐挳鐨勪笅鏍� + int index = 0; + for (int i = 0; i < plTabButtons.size(); i++) { + if (plTabButtons.get(i).getOId().equals(tabButtonVO.getOId())) { + index = i; // 鎵惧埌鍚庤褰曚笅鏍� + break; // 鎵惧埌鍚庨��鍑哄惊鐜� + } + } + //褰撻�夋嫨鐨勬寜閽负鏍戠殑绗竴涓妭鐐圭殑鏃跺�欙紝浠栫殑鍏勮妭鐐规槸浠栬嚜宸憋紝瀵艰嚧璋冩暣涓轰笅绾ф寜閽椂鍑洪敊锛屾晠浣滄鍒ゆ柇銆� + if(index == 0){ + return BaseResult.fail("褰撳墠鑺傜偣涓嶅瓨鍦ㄥ厔鑺傜偣锛屾棤娉曡皟鏁翠负涓嬬骇鎸夐挳锛�"); + } + //璁剧疆鐖秈d涓轰笂涓�涓妭鐐圭殑 + tabButtonVO.setParentOid(plTabButtons.get(index-1).getOId()); + PLTabButton plTabButton = this.tabButtonVO2TabButton(new PLTabButton(), tabButtonVO); + boolean success = platformClientUtil.getUIService().updatePLTabButton(plTabButton); + if(success == false) { + return BaseResult.fail("淇敼澶辫触锛�"); + } + return BaseResult.success("淇敼鎴愬姛锛�"); + } + + /** + * 璋冩暣涓轰笂绾ф寜閽� + * @param tabButtonVO + * @return + */ + @Override + public BaseResult exitBtn(PLTabButtonVO tabButtonVO) throws PLException { + tabButtonVO.setParentOid(""); + PLTabButton plTabButton = this.tabButtonVO2TabButton(new PLTabButton(), tabButtonVO); + boolean success = platformClientUtil.getUIService().updatePLTabButton(plTabButton); + if(success == false) { + BaseResult.fail("鎾ら攢澶辫触锛�"); + } + return BaseResult.success("鎾ら攢鎴愬姛锛�"); + } + + /** + * 澶勭悊閰嶇疆鐨別vent浜嬩欢 + * @param d + * @param pdVO + * @return + */ + private PLDefination setEventDataToPLDefination(PLDefination d,PLDefinationVO pdVO){ + Map<String, String> eventMap = pdVO.getEventMap(); + if(Func.isNotEmpty(eventMap)){ + String eventKey = eventMap.keySet().stream().collect(Collectors.joining(",")); + d.setEventKey(eventKey); + String eventValue = eventMap.values().stream().collect(Collectors.joining(",")); + d.setEventValue(eventValue); + }else{ + d.setEventKey(""); + d.setEventValue(""); + } + return d; + } + + private boolean baseInfoIsOk(PLPageDefination pd, boolean isEdit) throws PLException{ + boolean res = false; + if(!checkRequiredIsOk("鍚嶇О", pd.name)){ + return false; + } + //short绫诲瀷鐨勫氨涓嶇敤妫�鏌ヤ簡 + /*else if(!checkRequiredIsOk("缂栧彿", pd.seq)){ + return false; + }*/ + res = true; + return res; + } + + private boolean checkRequiredIsOk(String tip, String txt) throws PLException { + boolean res = false; + if(Func.isBlank(txt)){ + throw new PLException("500", new String[]{tip + " 涓嶈兘涓虹┖锛�"}); + } else { + res = true; + } + return res; + } + + /** + * 椤甸潰瀹氫箟鍚嶇О鍜岀紪鍙锋煡閲� + * @param pd + * @param isEdit + * @throws PLException + */ + private void newPLDefinationIsOk(PLDefinationVO pd, boolean isEdit) throws PLException{ + boolean nameExist = false; + boolean seqExist = false; + PLPageDefination[] pds = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(pd.getTabPageOId()); + for (PLPageDefination pdGet : pds) { + if(!isEdit){ + if(pd.getName().equals(pdGet.name)){ + nameExist = true; + } else if(Short.parseShort(pd.getSeq()) == pdGet.seq){ + seqExist = true; + } + } else { + if(!pd.getId().equals(pdGet.plOId)){ + if(pd.getName().equals(pdGet.name)){ + nameExist = true; + } else if(Short.parseShort(pd.getSeq()) == pdGet.seq){ + seqExist = true; + } + } + } + if(nameExist || seqExist){ + break; + } + } + if(nameExist){ + throw new VciBaseException("鍚嶇О宸茬粡瀛樺湪锛�"); + } + + if(seqExist){ + throw new VciBaseException("缂栧彿宸茬粡瀛樺湪锛�"); + } + } + + /** + * 缁欏尯鍩熶腑娣诲姞鏁版嵁鍓嶆牎楠� + * @param plTabPage + * @return + */ + private void checkEdit(PLTabPage plTabPage) throws PLException { + /*if(plTabPage.plSeq >= 0){ + throw new VciBaseException("搴忓彿涓嶈兘涓虹┖!"); + }else if(!isNumber(plseq.getText().trim())){ + throw new VciBaseException("搴忓彿鍙兘鏄暟瀛楋紝璇烽噸鏂板~鍐�!"); + }*/ + if(!checkTabPageUIParserIsOk(plTabPage)){ + throw new VciBaseException("UI瑙f瀽绫绘牸寮忎笉姝g‘锛岃閲嶆柊濉啓!"); + } + //鐙珛鍑烘潵鍗曠嫭鍋氫竴涓帴鍙h鍓嶇杩涜璋冪敤 + /*else if(!checkTabPageExtAttrIsOk(plTabPage)){ + //缁欏嚭鎻愮ず锛屽浜巑pm閰嶇疆鍙互鍏佽鍏朵繚瀛橈紝鍏蜂綋瑙f瀽mpm鑷繁鎺у埗 by liucq + int confirm = VCIOptionPane.showConfirmDialog(PLTApplication.frame, "鎵╁睍灞炴�ф暟鎹牸寮忎笉姝g‘\n鏄惁缁х画淇濆瓨锛�", "绯荤粺鎻愮ず", JOptionPane.YES_NO_OPTION); + }*/ + + PLTabPage[] tps = platformClientUtil.getUIService().getTabPagesByContextIdAndType(plTabPage.plContextOId, plTabPage.plAreaType); + for (PLTabPage tp : tps) { + if(tp.plSeq == plTabPage.plSeq && !tp.plOId.equals(plTabPage.plOId)){ + throw new VciBaseException("搴忓彿閲嶅锛�"); + } + if(tp.plName.equalsIgnoreCase(plTabPage.plName) && !tp.plOId.equals(plTabPage.plOId)){ + throw new VciBaseException("鍚嶇О閲嶅锛�"); + } + if(tp.plCode.equalsIgnoreCase(plTabPage.plCode) && !tp.plOId.equals(plTabPage.plOId)){ + throw new VciBaseException("椤甸潰缂栫爜閲嶅锛�"); + } + } + } + + /** + * 妫�鏌I瑙f瀽绫绘槸鍚﹀悎瑙� + * @param tabPage + * @return + */ + private boolean checkTabPageUIParserIsOk(PLTabPage tabPage){ + // 鏁版嵁鏍煎紡锛� java_cs:xxx;java_bs:xxx;net_cs:xxx;net_bs:xxx;mobile_cs:xx;mobile_bs:xxx; + String uiParser = tabPage.plUIParser; + return checkExtValIsOk(uiParser); + } + + /** + * UI瑙f瀽绫绘鍒欐鏌� + * @param value + * @return + */ + private boolean checkExtValIsOk(String value){ + boolean res = true; + if(value == null || "".equals(value)){ + return res; + } + Pattern ptn = Pattern.compile("([\\w\\.\\_\\-\\+]+:[\\w\\.\\_\\-\\+]+(;)?)+"); + res = ptn.matcher(value).matches(); + return res; } /** @@ -312,45 +1696,69 @@ String type = StringUtils.isBlank(conditionMap.get("type")) ? "" : conditionMap.get("type"); String context = StringUtils.isBlank(conditionMap.get("context")) ? "" : conditionMap.get("context"); boolean showCheckBox = Boolean.parseBoolean(conditionMap.get("showCheckBox")); - Map<String,RoleRightVO> roleRightVOMap=new HashMap<>(); + Map<String, List<RoleRightVO>> roleRightVOMap = new HashMap<>(); if(StringUtils.isNotBlank(roleId)){ - String userName= WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); - RoleRightInfo[] rightInfos= platformClientUtil.getFrameworkService().getRoleRightList(roleId,userName); - List<RoleRightVO> roleRightVOList=roleRightDOO2VOS(Arrays.asList(rightInfos)); - roleRightVOMap=roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVO)); + roleRightVOMap = this.getRoleRightMap(roleId); } - BizType[] bizTypes=osBtmServiceI.getBizTypes(type); + BizType[] bizTypes = osBtmServiceI.getBizTypes(type); List<Tree> treeList=new ArrayList<>(); - Tree rootNode =new Tree("root","鍔熻兘妯″潡","root"); + Tree rootNode =new Tree("root","鍔熻兘妯″潡","root"); rootNode.setLevel(0); rootNode.setShowCheckbox(true); rootNode.setExpanded(true); List<Tree> childList=new ArrayList<>(); + + uiDataFetcher = new UIDataFetcher(); for (int i = 0; i < bizTypes.length; i++) { Tree bizTypeTree = new Tree(bizTypes[i].oid,bizTypes[i].name,bizTypes[i]);//(btmItems[i].label+" ["+ btmItems[i].name+"]", btmItems[i]); bizTypeTree.setLevel(1); bizTypeTree.setShowCheckbox(true); bizTypeTree.setParentId(rootNode.getOid()); bizTypeTree.setParentName(rootNode.getText()); - bizTypeTree.setShowCheckbox(true); bizTypeTree.setParentBtmName(bizTypes[i].name); + List<PLUILayout> contextList = uiDataFetcher.getContext(bizTypes[i].name/*+context*/); + List<Tree> btmChildList = new ArrayList<>(); + btmChildList.add(bizTypeTree); + setChildNode(btmChildList,contextList,roleRightVOMap,showCheckBox); childList.add(bizTypeTree); - if(roleRightVOMap.containsKey(bizTypes[i].oid)){ - List<PLUILayout>contextList=getUIContextDataByBtName(bizTypes[i].name,context); - List<Tree> btmChildList=new ArrayList<>(); - btmChildList.add(bizTypeTree); - setChildNode(btmChildList,contextList,roleRightVOMap,showCheckBox); - } } rootNode.setChildren(childList); treeList.add(rootNode); return treeList; } + /** + * 鏍规嵁瑙掕壊涓婚敭鑾峰彇宸叉巿鏉冪殑淇℃伅 + * @param roleId 濡傛灉roleId涓嶄紶锛屽氨浼氳幏鍙栧綋鍓嶇櫥褰曠殑鐢ㄦ埛鐨勫悕绉版煡璇㈡潈闄� + * @return + * @throws PLException + */ + @Override + public Map<String, List<RoleRightVO>> getRoleRightMap(String roleId) throws PLException { + RoleRightInfo[] rightInfos = null; + String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); + if(Func.isBlank(roleId)){ + rightInfos = platformClientUtil.getFrameworkService().getRoleRightByUserName(userName); + }else{ + rightInfos = platformClientUtil.getFrameworkService().getRoleRightList(roleId,userName); + } + List<RoleRightVO> roleRightVOList = roleRightDOO2VOS(Arrays.asList(rightInfos)); + //鍒嗙粍鎿嶄綔 + Map<String, List<RoleRightVO>> roleRightVOMap = roleRightVOList.stream().collect(Collectors.groupingBy(RoleRightVO::getFuncId, + Collectors.mapping(e ->e, Collectors.toList()))); + return roleRightVOMap; + } + + /** + * UI鎺堟潈 + * @param uiAuthorDTO + * @return + * @throws Exception + */ @Override public boolean authorizedUI(UIAuthorDTO uiAuthorDTO) throws Exception { boolean res=false; - if(uiAuthorDTO==null||CollectionUtil.isEmpty(uiAuthorDTO.getSelectTreeList())){ + if(uiAuthorDTO==null|| CollectionUtil.isEmpty(uiAuthorDTO.getSelectTreeList())){ throw new VciBaseException("璇烽�夋嫨鑺傜偣杩涜鎺堟潈!"); } BaseQueryObject treeQueryObject=new BaseQueryObject(); @@ -360,50 +1768,260 @@ conditionMap.put("context",uiAuthorDTO.getContext()); conditionMap.put("showCheckBox","true"); treeQueryObject.setConditionMap(conditionMap); - List<Tree> treeList=this.getUIAuthor(treeQueryObject); - HashMap<String,Tree> allTreeMap=new HashMap<>(); + List<Tree> treeList = this.getUIAuthor(treeQueryObject); + HashMap<String,Tree> allTreeMap = new HashMap<>(); + //Map<String,RoleRightDTO> roleRightVOMap = new HashMap<>(); if(!CollectionUtil.isEmpty(treeList)){ + /*if(StringUtils.isNotBlank(uiAuthorDTO.getRoleId())){ + String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); + RoleRightInfo[] rightInfos = platformClientUtil.getFrameworkService().getRoleRightList(uiAuthorDTO.getRoleId(),userName); + List<RoleRightVO> roleRightVOList = roleRightDOO2VOS(Arrays.asList(rightInfos)); + roleRightVOMap = roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVOO2DTO(roleRightVO),(oldValue,newValue)->oldValue)); + }*/ + convertTreeDOO2Map(treeList,allTreeMap); - List<RoleRightDTO> roleRightDTOList=new ArrayList<>(); - List<Tree> selectTreeList= uiAuthorDTO.getSelectTreeList(); - getRoleRightDTOS(uiAuthorDTO.getRoleId(),selectTreeList,allTreeMap,roleRightDTOList); + List<RoleRightDTO> roleRightDTOList = new ArrayList<>(); + List<Tree> selectTreeList = uiAuthorDTO.getSelectTreeList(); + List<Tree> filterSelectTreeList = this.authTreeListConvert(selectTreeList); + //杩囨护鍑洪�夋嫨鐨勬寜閽� + List<String> checkButtonList = selectTreeList.stream() + .filter(item -> item.getData() instanceof PLTabButton || item.isLeaf()) + .map(item -> item.getOid()).collect(Collectors.toList()); + + getSelectedRoleRightObjs(uiAuthorDTO.getRoleId(),filterSelectTreeList,checkButtonList,allTreeMap,roleRightDTOList); + SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); + String currentUserName = sessionInfo.getUserId(); + //boolean isDeveloper = rightControlUtil.isDeveloper(currentUserName); + List<RoleRightInfo> roleRightInfoList = roleRightDTOO2InfoS(roleRightDTOList); + UserEntityInfo info = new UserEntityInfo(); + info.modules="UI鎺堟潈"; + info.userName = currentUserName; + try { + res = platformClientUtil.getFrameworkService().saveRoleRight(roleRightInfoList.toArray(new RoleRightInfo[]{}),uiAuthorDTO.getRoleId(),currentUserName,info); + }catch (PLException e){ + throw new Exception("淇濆瓨澶辫触锛�" + e.getMessage()); + } } return res; } - private void getRoleRightDTOS(String roleOid,List<Tree> selectTreeList,HashMap<String,Tree> allTreeMap, List<RoleRightDTO> roleRightDTOList){ - selectTreeList.stream().forEach(tree -> { - RoleRightDTO roleRightDTO=new RoleRightDTO(); - String id=ObjectUtility.getNewObjectID36(); - Object data= tree.getData(); + /** + * 鑾峰彇绛涢�夊悗鐨勬暟鎹� + * @param selectTreeList + */ + private List<Tree> authTreeListConvert(List<Tree> selectTreeList){ + // 鍒涘缓涓�涓寘鍚彟涓�涓泦鍚堜腑婊¤冻鏉′欢鐨� oid 鐨勯泦鍚� + List<String> validOids = selectTreeList.stream() + .filter(Tree::isChecked) // checked 涓� true + .map(Tree::getOid) // 鎻愬彇 oid + .collect(Collectors.toList()); - if (data instanceof BizType) {//涓氬姟绫诲瀷 - BizType bizType=(BizType)data; - roleRightDTO.setId(id);//涓婚敭 - roleRightDTO.setCreateUser(null);//鍒涘缓鑰� - roleRightDTO.setCreateTime(null);//鍒涘缓鏃堕棿 - roleRightDTO.setModifyUser(null);//淇敼鑰� - roleRightDTO.setModifyTime(null);//淇敼鏃堕棿 - roleRightDTO.setRoleId(roleOid);//瑙掕壊ID - roleRightDTO.setRightValue(1);// 鏉冮檺鍊� - roleRightDTO.setRightType((short) -1);//鏉冮檺绫诲瀷 鏉冮檺绫诲瀷锛岃秴绾х鐞嗗憳缁欑鐞嗗憳鎺堟潈涓�1锛岀鐞嗗憳缁欐櫘閫氱敤鎴锋巿鏉冧负2 - roleRightDTO.setFuncId(null); - roleRightDTO.setLicensor(null); - }else if (data instanceof PLUILayout){//UI + return selectTreeList.stream() + .filter(tree -> tree.isChecked() && !validOids.contains(tree.getParentId())) // 杩囨护鏉′欢 + .collect(Collectors.toList()); + } - }else if (data instanceof PLTabPage) {//UI涓婁笅鏂� + /** + *鏍规嵁鏉冮檺璁$畻涓婁笅鏉冮檺 + * @param roleOid + * @param selectTreeList + * @param allTreeMap + * @param roleRightDTOList + */ + private void getSelectedRoleRightObjs(String roleOid, List<Tree> selectTreeList, List<String> checkButtonList, HashMap<String,Tree> allTreeMap, List<RoleRightDTO> roleRightDTOList){ + Map<String,RoleRightDTO> roleRightDTOMap = new HashMap<>(); + if(!CollectionUtil.isEmpty(selectTreeList)){ + selectTreeList.stream().forEach(tree -> { + String oid = tree.getOid(); + if(allTreeMap.containsKey(oid)){ + tree = allTreeMap.get(oid); + Object data = tree.getData(); + if (data instanceof String) { + getRightValue(roleOid, tree, allTreeMap, checkButtonList,false, roleRightDTOMap);//鍚戜笅鑾峰彇鎵�鏈夋ā鍧楃殑鏉冮檺鍊� + } else if (!(data instanceof PLTabButton)) {//涓氬姟绫诲瀷 + getRightValue(roleOid, tree, allTreeMap, checkButtonList, true, roleRightDTOMap);//鍚戜笂澶勭悊 + getRightValue(roleOid, tree, allTreeMap, checkButtonList, false, roleRightDTOMap);//鍚戜笅澶勭悊锛堝寘鍚綋鍓嶈妭鐐癸級 + } else if (data instanceof PLTabButton) {//鎸夐挳 + String parrentId=tree.getParentId(); + if(allTreeMap.containsKey(parrentId)){ + SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); + String currentUserName = sessionInfo.getUserId(); + boolean isDeveloper = rightControlUtil.isDeveloper(currentUserName); + Tree parentNode= allTreeMap.get(parrentId); + String funcId = parentNode.getOid(); + getRightValue(roleOid, parentNode, allTreeMap, checkButtonList, true, roleRightDTOMap);//鍚戜笂澶勭悊璇ユ搷浣滅埗绾х殑涓婄骇妯″潡鏉冮檺(涓嶅寘鍚埗鑺傜偣) + if(!roleRightDTOMap.containsKey(funcId)){ + RoleRightDTO roleRightDTO = new RoleRightDTO(); + roleRightDTO.setId(ObjectUtility.getNewObjectID36());//涓婚敭 + roleRightDTO.setFuncId(funcId); + if(isDeveloper) { + //鏉冮檺绫诲瀷 鏉冮檺绫诲瀷锛岃秴绾х鐞嗗憳缁欑鐞嗗憳鎺堟潈涓�1锛岀鐞嗗憳缁欐櫘閫氱敤鎴锋巿鏉冧负2 + roleRightDTO.setRightType((short) 1); + }else{ + roleRightDTO.setRightType((short) 2); + } + roleRightDTO.setRightValue(countRightValue(parentNode,checkButtonList,false));// 鏉冮檺鍊硷紝娌℃湁鎿嶄綔鐨勬ā鍧楁潈闄愬�煎瓨鍌ㄤ负0 + roleRightDTO.setRoleId(roleOid);//瑙掕壊ID + roleRightDTO.setCreateUser(currentUserName);//鍒涘缓鑰� + roleRightDTO.setCreateTime(VciDateUtil.date2Str(new Date(),""));//鍒涘缓鏃堕棿 + roleRightDTO.setModifyUser(currentUserName);//淇敼鑰� + roleRightDTO.setModifyTime(VciDateUtil.date2Str(new Date(),""));//淇敼鏃堕棿 + roleRightDTO.setLicensor(""); + if(!roleRightDTOMap.containsKey(funcId)){ + roleRightDTOMap.put(funcId, roleRightDTO); + } + roleRightDTOMap.put(funcId, roleRightDTO); + } + } - }else if (data instanceof PLPageDefination) {// + } + } + }); + /* allRoleRightDTOMap.putAll(roleRightDTOMap.entrySet().stream() + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry:: getValue)));*/ + List<RoleRightDTO> newRoleRightDTOList = Optional.ofNullable(roleRightDTOMap).orElseGet(()->new HashMap<String,RoleRightDTO>()).values().stream().collect(Collectors.toList()); + roleRightDTOList.addAll(newRoleRightDTOList); + } + } - }else if (data instanceof PLTabButton) {//鎸夐挳 - + /** + * 鑾峰彇鏉冮檺 + * @param isUp 鏄惁鏄悜涓婅幏鍙栵紝濡傛灉鏄悜涓婅幏鍙栵紝浼犺繘鏉ョ殑蹇呯劧鏄ā鍧楄妭鐐癸紝涓斾笂绾фā鍧楀繀鐒舵槸娌℃湁閫変腑 + */ + private void getRightValue(String roleId,Tree node,Map<String,Tree> allTreeMap,List<String> checkButton,boolean isUp,Map<String,RoleRightDTO> rightMap){ + SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); + String currentUserName = sessionInfo.getUserId(); + boolean isDeveloper= rightControlUtil.isDeveloper(currentUserName); + String id=ObjectUtility.getNewObjectID36(); + Object data=node.getData(); + if(isUp) {//鍚戜笂鑾峰彇锛屽瓨鍌ㄦ瘡涓笂绾фā鍧楃殑鏉冮檺鍊� + String parentId = node.getParentId(); + Tree parentNode = allTreeMap.get(parentId); + while (!"root".equals(parentNode.getData())){ + data=parentNode.getData(); + String oid=parentNode.getOid(); + if(allTreeMap.containsKey(oid)){ + String funcId = ""; + if (data instanceof BizType) { + BizType bizType = (BizType) data; + funcId = bizType.name; + } else if (data instanceof PLUILayout) { + PLUILayout context = (PLUILayout)data; + funcId = context.plOId; + } else if (data instanceof PLTabPage) { + PLTabPage tab = (PLTabPage) data; + funcId = tab.plOId; + } else if (data instanceof PLPageDefination){ + PLPageDefination pageDef = (PLPageDefination) data; + funcId = pageDef.plOId; + } else if (data instanceof PLTabButton) { + PLTabButton but = (PLTabButton)data; + funcId = but.plOId; + } + RoleRightDTO roleRightDTO = new RoleRightDTO(); + roleRightDTO.setId(id);//涓婚敭 + roleRightDTO.setFuncId(funcId); + if(isDeveloper) { + roleRightDTO.setRightType((short) 1);//鏉冮檺绫诲瀷 鏉冮檺绫诲瀷锛岃秴绾х鐞嗗憳缁欑鐞嗗憳鎺堟潈涓�1锛岀鐞嗗憳缁欐櫘閫氱敤鎴锋巿鏉冧负2 + }else{ + roleRightDTO.setRightType((short) 2); + } + roleRightDTO.setRightValue(1);// 鏉冮檺鍊硷紝娌℃湁鎿嶄綔鐨勬ā鍧楁潈闄愬�煎瓨鍌ㄤ负0 + roleRightDTO.setRoleId(roleId);//瑙掕壊ID + roleRightDTO.setCreateUser(currentUserName);//鍒涘缓鑰� + roleRightDTO.setCreateTime(VciDateUtil.date2Str(new Date(),""));//鍒涘缓鏃堕棿 + roleRightDTO.setModifyUser(currentUserName);//淇敼鑰� + roleRightDTO.setModifyTime(VciDateUtil.date2Str(new Date(),""));//淇敼鏃堕棿 + roleRightDTO.setLicensor(""); + if(!rightMap.containsKey(funcId)){ + rightMap.put(funcId, roleRightDTO); + } + oid = parentNode.getParentId(); + if(allTreeMap.containsKey(oid)) { + parentNode = allTreeMap.get(oid); + } + } } - }); + }else { + String funcId = ""; + if (data instanceof String) { + funcId = (String) data; + } else if (data instanceof BizType) { + BizType bizType = (BizType) data; + funcId = bizType.name; + } else if (data instanceof PLUILayout) { + PLUILayout context = (PLUILayout) data; + funcId = context.plOId; + } else if (data instanceof PLTabPage) { + PLTabPage tab = (PLTabPage) data; + funcId = tab.plOId; + } else if (data instanceof PLPageDefination) { + PLPageDefination pageDef = (PLPageDefination) data; + funcId = pageDef.plOId; + } else if (data instanceof PLTabButton) { + PLTabButton but = (PLTabButton) data; + funcId = but.plOId; + } + if (!(data instanceof PLPageDefination)) {//瀛愯妭鐐逛笉鏄搷浣� + if (!rightMap.containsKey(funcId) && !funcId.equals("root")) { + RoleRightDTO roleRightDTO = new RoleRightDTO(); + roleRightDTO.setFuncId(funcId); + if (isDeveloper) { + roleRightDTO.setRightType((short) 1);//鏉冮檺绫诲瀷 鏉冮檺绫诲瀷锛岃秴绾х鐞嗗憳缁欑鐞嗗憳鎺堟潈涓�1锛岀鐞嗗憳缁欐櫘閫氱敤鎴锋巿鏉冧负2 + } else { + roleRightDTO.setRightType((short) 2); + } + roleRightDTO.setRightValue(0);//娌℃湁鎿嶄綔鐨勬ā鍧楁潈闄愬�煎瓨鍌ㄤ负0 + roleRightDTO.setRoleId(roleId); + roleRightDTO.setCreateUser(currentUserName); + roleRightDTO.setCreateTime(VciDateUtil.date2Str(new Date(),"")); + roleRightDTO.setModifyUser(currentUserName); + roleRightDTO.setModifyTime(VciDateUtil.date2Str(new Date(),"")); + roleRightDTO.setLicensor(""); + rightMap.put(funcId, roleRightDTO); + } + for (int i = 0; i < node.getChildren().size(); i++) { + //瀵规瘡涓瓙鍚戜笅閫掑綊閬嶅巻 + getRightValue(roleId, node.getChildren().get(i), allTreeMap, checkButton,false, rightMap); + } + } else { + if (!rightMap.containsKey(funcId)) { + RoleRightDTO roleRightDTO = new RoleRightDTO(); + roleRightDTO.setFuncId(funcId); + roleRightDTO.setRightType((short) 2); // 璁剧疆UI鏉冮檺 + roleRightDTO.setRightValue(countRightValue(node, checkButton,true));//娌℃湁鎿嶄綔鐨勬ā鍧楁潈闄愬�煎瓨鍌ㄤ负0 + roleRightDTO.setRoleId(roleId); + roleRightDTO.setCreateUser(currentUserName); + roleRightDTO.setCreateTime(VciDateUtil.date2Str(new Date(),"")); + roleRightDTO.setModifyUser(currentUserName); + roleRightDTO.setModifyTime(VciDateUtil.date2Str(new Date(),"")); + roleRightDTO.setLicensor(""); + rightMap.put(funcId, roleRightDTO); + } + } + } + } - + /** + * 浼犲叆鐩存帴鎸傛帴鎿嶄綔鐨勬ā鍧楃殑鑺傜偣,璁$畻璇ヨ妭鐐圭殑鏉冮檺鍊� + * @param node 妯″潡鑺傜偣 + * @param isAll 鏄惁瀛愮骇鍏ㄩ儴閫変腑 + * @return + */ + private long countRightValue(Tree node,List<String> checkButton,boolean isAll){ + long value = 0; + for(int i = 0; i < node.getChildren().size(); i++){ + Tree childNode = (Tree)node.getChildren().get(i); + //node.getData() instanceof PLTabButton杩欏効搴旇鎹㈡垚鏄惁鏄�変腑鐨勬寜閽妭鐐� + if(isAll || checkButton.contains(node.getOid())){ + PLTabButton obj = (PLTabButton)childNode.getData(); + value += (long)Math.pow(2, obj.plSeq);//绱鍔犱笂鍚勪釜鎿嶄綔鐨勬潈闄愬�� + } + } + return value; } /** @@ -420,15 +2038,22 @@ } }); } - private void setChildNode(List<Tree> parentTree, List<PLUILayout>contextList,Map<String,RoleRightVO> roleRightVOMap,boolean isShowCheckBox){ - Optional.ofNullable(parentTree).orElseGet(()->new ArrayList<Tree>()).stream().forEach(pTree -> { - Object funcObj= pTree.getData(); - List<Tree> chiledTreeList=new ArrayList<>(); + + /** + * 閬嶅巻瀛愯妭鐐� + * @param parentTree + * @param contextList + * @param roleRightVOMap + * @param isShowCheckBox + */ + private void setChildNode_old(List<Tree> parentTree, List<PLUILayout>contextList,Map<String,RoleRightVO> roleRightVOMap,boolean isShowCheckBox){ + Optional.ofNullable(parentTree).orElseGet(()->new ArrayList<>()).stream().forEach(pTree -> { + Object funcObj = pTree.getData(); + List<Tree> chiledTreeList = new ArrayList<>(); if (funcObj instanceof BizType) {//涓氬姟绫诲瀷 - BizType bizType = (BizType) funcObj; if(!CollectionUtil.isEmpty(contextList)) { contextList.stream().forEach(context->{ - Tree childTree=new Tree(context.plOId,context.plName+"("+context.plCode+")",context); + Tree childTree = new Tree(context.plOId,context.plName+"("+context.plCode+")",context); childTree.setParentName(pTree.getText()); childTree.setParentBtmName(pTree.getParentBtmName()); childTree.setParentId(pTree.getOid()); @@ -439,19 +2064,13 @@ pTree.setChildren(chiledTreeList); } if(!CollectionUtil.isEmpty(chiledTreeList)) { - setChildNode(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox); + setChildNode_old(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox); } }else if (funcObj instanceof PLUILayout){//UI PLUILayout context = (PLUILayout) funcObj; - PLTabPage[] pages = new PLTabPage[0]; - try { - pages = platformClientUtil.getUIService().getPLTabPagesByPageDefinationOId(context.plOId); - } catch (PLException e) { - e.printStackTrace(); - } - if(pages!=null&&pages.length>0){ - List<PLTabPage> plTabPageList= Arrays.stream(pages).collect(Collectors.toList()); - plTabPageList.stream().forEach(plTabPage -> { + List<PLTabPage> pageList = uiDataFetcher.getTabs(context.plOId); + if(Func.isNotEmpty(pageList)){ + pageList.stream().forEach(plTabPage -> { Tree childTree=new Tree(plTabPage.plOId,plTabPage.plName,plTabPage); childTree.setParentName(pTree.getText()); childTree.setParentId(pTree.getOid()); @@ -460,66 +2079,51 @@ childTree.setShowCheckbox(isShowCheckBox); chiledTreeList.add(childTree); }); + } + if(!CollectionUtil.isEmpty(chiledTreeList)) { + setChildNode_old(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox); + } + pTree.setChildren(chiledTreeList); + }else if (funcObj instanceof PLTabPage) {//涓婁笅鏂� + PLTabPage plTabPage = (PLTabPage) funcObj; + List<PLPageDefination> pageDefinationList = uiDataFetcher.getComopnent(plTabPage.plOId); + if(Func.isNotEmpty(pageDefinationList)){ + pageDefinationList.stream().forEach(plPageDefination -> { + Tree childTree=new Tree(plPageDefination.plOId,plPageDefination.name,plPageDefination); + childTree.setParentName(pTree.getText()); + childTree.setParentId(pTree.getOid()); + childTree.setParentBtmName(pTree.getParentBtmName()); + childTree.setLevel(pTree.getLevel()+1); + childTree.setShowCheckbox(isShowCheckBox); + chiledTreeList.add(childTree); + }); pTree.setChildren(chiledTreeList); } if(!CollectionUtil.isEmpty(chiledTreeList)) { - setChildNode(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox); + setChildNode_old(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox); } - - }else if (funcObj instanceof PLTabPage) {//涓婁笅鏂� - PLTabPage plTabPage = (PLTabPage) funcObj; - List<PLPageDefination>plPageDefinationList=new ArrayList<>(); - try { - PLPageDefination[] pLPageDefinations = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(plTabPage.plOId); - if(pLPageDefinations!=null&&pLPageDefinations.length>0){ - plPageDefinationList= Arrays.stream(pLPageDefinations).collect(Collectors.toList()); - plPageDefinationList.stream().forEach(plPageDefination -> { - Tree childTree=new Tree(plPageDefination.plOId,plPageDefination.name,plPageDefination); - childTree.setParentName(pTree.getText()); - childTree.setParentId(pTree.getOid()); - childTree.setParentBtmName(pTree.getParentBtmName()); - childTree.setLevel(pTree.getLevel()+1); - childTree.setShowCheckbox(isShowCheckBox); - chiledTreeList.add(childTree); - }); - pTree.setChildren(chiledTreeList); - } - if(!CollectionUtil.isEmpty(chiledTreeList)) { - setChildNode(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox); - } - } catch (PLException e) { - e.printStackTrace(); - } - - }else if (funcObj instanceof PLPageDefination) {// + }else if (funcObj instanceof PLPageDefination) { PLPageDefination plPageDefination = (PLPageDefination) funcObj; - try { - List<PLTabButton>plTabButtonList=new ArrayList<>(); - PLTabButton[] pLTabButtons = platformClientUtil.getUIService().getPLTabButtonsByTableOId(plPageDefination.plOId); - if(pLTabButtons!=null&&pLTabButtons.length>0){ - plTabButtonList= Arrays.stream(pLTabButtons).collect(Collectors.toList()); - plTabButtonList.stream().forEach(plTabButton -> { - Tree childTree=new Tree(plTabButton.plOId,plTabButton.plLabel,plTabButton); - childTree.setParentName(pTree.getText()); - childTree.setParentId(pTree.getOid()); - childTree.setParentBtmName(pTree.getParentBtmName()); - childTree.setLevel(pTree.getLevel()+1); - childTree.setShowCheckbox(isShowCheckBox); - childTree.setLeaf(true); - chiledTreeList.add(childTree); - }); - pTree.setChildren(chiledTreeList); - } - if(!CollectionUtil.isEmpty(chiledTreeList)) { - setChildNode(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox); - } - } catch (PLException e) { - e.printStackTrace(); + List<PLTabButton> pLTabButtonList = uiDataFetcher.getButtons(plPageDefination.plOId); + if(Func.isNotEmpty(pLTabButtonList)){ + pLTabButtonList.stream().forEach(plTabButton -> { + Tree childTree=new Tree(plTabButton.plOId,plTabButton.plLabel,plTabButton); + childTree.setParentName(pTree.getText()); + childTree.setParentId(pTree.getOid()); + childTree.setParentBtmName(pTree.getParentBtmName()); + childTree.setLevel(pTree.getLevel()+1); + childTree.setShowCheckbox(isShowCheckBox); + childTree.setLeaf(true); + chiledTreeList.add(childTree); + }); + pTree.setChildren(chiledTreeList); } - + if(!CollectionUtil.isEmpty(chiledTreeList)) { + setChildNode_old(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox); + } }else if (funcObj instanceof PLTabButton) {//鎸夐挳 - PLTabButton plTabButton= (PLTabButton) funcObj; - String id =plTabButton.plTableOId; + PLTabButton plTabButton = (PLTabButton) funcObj; + String id = plTabButton.plTableOId; if(roleRightVOMap.containsKey(id)){ RoleRightVO roleRightVO = roleRightVOMap.get(id); Long rightValue = roleRightVO.getRightValue(); @@ -536,6 +2140,123 @@ } }); } + + /** + * 閬嶅巻瀛愯妭鐐� + * @param parentTree + * @param contextList + * @param isShowCheckBox + */ + private void setChildNode(List<Tree> parentTree, List<PLUILayout>contextList,Map<String, List<RoleRightVO>> roleRightVOMap, boolean isShowCheckBox){ + Optional.ofNullable(parentTree).orElseGet(()->new ArrayList<>()).stream().forEach(pTree -> { + Object funcObj = pTree.getData(); + List<Tree> chiledTreeList = new ArrayList<>(); + if (funcObj instanceof BizType) {//涓氬姟绫诲瀷 + if(!CollectionUtil.isEmpty(contextList)) { + contextList.stream().forEach(context->{ + Tree childTree = new Tree(context.plOId,context.plName+"("+context.plCode+")",context); + childTree.setParentName(pTree.getText()); + childTree.setParentBtmName(pTree.getParentBtmName()); + childTree.setParentId(pTree.getOid()); + childTree.setLevel(pTree.getLevel()+1); + childTree.setShowCheckbox(isShowCheckBox); + chiledTreeList.add(childTree); + }); + pTree.setChildren(chiledTreeList); + } + if(!CollectionUtil.isEmpty(chiledTreeList)) { + setChildNode(chiledTreeList, contextList,roleRightVOMap, isShowCheckBox); + } + }else if (funcObj instanceof PLUILayout){//UI + PLUILayout context = (PLUILayout) funcObj; + List<PLTabPage> pageList = uiDataFetcher.getTabs(context.plOId); + if(Func.isNotEmpty(pageList)){ + pageList.stream().forEach(plTabPage -> { + Tree childTree=new Tree(plTabPage.plOId,plTabPage.plName,plTabPage); + childTree.setParentName(pTree.getText()); + childTree.setParentId(pTree.getOid()); + childTree.setParentBtmName(pTree.getParentBtmName()); + childTree.setLevel(pTree.getLevel()+1); + childTree.setShowCheckbox(isShowCheckBox); + chiledTreeList.add(childTree); + }); + } + if(!CollectionUtil.isEmpty(chiledTreeList)) { + setChildNode(chiledTreeList, contextList,roleRightVOMap, isShowCheckBox); + } + pTree.setChildren(chiledTreeList); + }else if (funcObj instanceof PLTabPage) {//涓婁笅鏂� + PLTabPage plTabPage = (PLTabPage) funcObj; + List<PLPageDefination> pageDefinationList = uiDataFetcher.getComopnent(plTabPage.plOId); + if(Func.isNotEmpty(pageDefinationList)){ + pageDefinationList.stream().forEach(plPageDefination -> { + Tree childTree=new Tree(plPageDefination.plOId,plPageDefination.name,plPageDefination); + childTree.setParentName(pTree.getText()); + childTree.setParentId(pTree.getOid()); + childTree.setParentBtmName(pTree.getParentBtmName()); + childTree.setLevel(pTree.getLevel()+1); + childTree.setShowCheckbox(isShowCheckBox); + chiledTreeList.add(childTree); + }); + pTree.setChildren(chiledTreeList); + } + if(!CollectionUtil.isEmpty(chiledTreeList)) { + setChildNode(chiledTreeList, contextList,roleRightVOMap, isShowCheckBox); + } + }else if (funcObj instanceof PLPageDefination) { + PLPageDefination plPageDefination = (PLPageDefination) funcObj; + List<PLTabButton> pLTabButtonList = uiDataFetcher.getButtons(plPageDefination.plOId); + if(Func.isNotEmpty(pLTabButtonList)){ + pLTabButtonList.stream().forEach(plTabButton -> { + Tree childTree=new Tree(plTabButton.plOId,plTabButton.plLabel,plTabButton); + childTree.setParentName(pTree.getText()); + childTree.setParentId(pTree.getOid()); + childTree.setParentBtmName(pTree.getParentBtmName()); + childTree.setLevel(pTree.getLevel()+1); + childTree.setShowCheckbox(isShowCheckBox); + childTree.setLeaf(true); + chiledTreeList.add(childTree); + }); + pTree.setChildren(chiledTreeList); + } + if(!CollectionUtil.isEmpty(chiledTreeList)) { + setChildNode(chiledTreeList, contextList,roleRightVOMap, isShowCheckBox); + } + }else if (funcObj instanceof PLTabButton) {//鎸夐挳 + PLTabButton plTabButton = (PLTabButton) funcObj; + String id = plTabButton.plTableOId; + if(roleRightVOMap.containsKey(id)){ + RoleRightVO roleRightVO = roleRightVOMap.get(id).get(0); + Long rightValue = roleRightVO.getRightValue(); + int nodeValue = plTabButton.plSeq; + if (nodeValue >= 0 && nodeValue <= 63) { + long preValue = (rightValue >> nodeValue) & 1; + if (preValue == 1) { + pTree.setChecked(true); + } + } + }else{ + pTree.setChecked(false); + } + } + }); + } + + /** + * UI瑙掕壊瀵硅薄杞崲 + * @param vos + * @return + */ + private List<RoleRightDTO> roleRightVOO2DTOS(List<RoleRightVO> vos){ + List<RoleRightDTO> roleRightVOS=new ArrayList<>(); + Optional.ofNullable(vos).orElseGet(()->new ArrayList<>()).stream().forEach(vo -> { + RoleRightDTO dto=roleRightVOO2DTO(vo); + roleRightVOS.add(dto); + }); + + return roleRightVOS; + } + /** * UI瑙掕壊瀵硅薄杞崲 * @param infos @@ -549,6 +2270,26 @@ }); return roleRightVOS; + } + + /** + * UI瑙掕壊瀵硅薄杞崲 + * @param dtos + * @return + */ + private List<RoleRightInfo> roleRightDTOO2InfoS(List<RoleRightDTO> dtos){ + List<RoleRightInfo> roleRightInfoList=new ArrayList<>(); + Optional.ofNullable(dtos).orElseGet(()->new ArrayList<>()).stream().forEach(dto -> { + RoleRightInfo info= null; + try { + info = roleRightDTOO2Info(dto); + } catch (Exception e) { + e.printStackTrace(); + } + roleRightInfoList.add(info); + }); + + return roleRightInfoList; } /** @@ -569,6 +2310,46 @@ vo.setModifyTime(VciDateUtil.date2Str(VciDateUtil.long2Date(info.modifyTime),"")); vo.setModifyUser(info.modifyUser); return vo; + } + + /** + * UI瑙掕壊瀵硅薄杞崲 + * @param vo + * @return + */ + private RoleRightDTO roleRightVOO2DTO(RoleRightVO vo){ + RoleRightDTO dto=new RoleRightDTO(); + dto.setId(vo.getId()); + dto.setCreateTime(vo.getCreateTime()); + dto.setCreateUser(vo.getCreateUser()); + dto.setRoleId(vo.getRoleId()); + dto.setRightType(vo.getRightType()); + dto.setLicensor(vo.getLicensor()); + dto.setRightValue(vo.getRightValue()); + dto.setFuncId(vo.getFuncId()); + dto.setModifyTime(vo.getModifyTime()); + dto.setModifyUser(vo.getModifyUser()); + return dto; + } + + /** + * UI瑙掕壊瀵硅薄杞崲 + * @param dto + * @return + */ + private RoleRightInfo roleRightDTOO2Info(RoleRightDTO dto) throws Exception { + RoleRightInfo info=new RoleRightInfo(); + info.id=StringUtils.isBlank(dto.getId())?"":dto.getId(); + info.createTime=StringUtils.isBlank(dto.getCreateTime())?new Date().getTime():VciDateUtil.getTime(VciDateUtil.str2Date(dto.getCreateTime(),"")); + info.createUser=StringUtils.isBlank(dto.getCreateUser())?"":dto.getCreateUser(); + info.roleId=StringUtils.isBlank(dto.getRoleId())?"":dto.getRoleId(); + info.rightType=dto.getRightType(); + info.licensor =StringUtils.isBlank(dto.getLicensor())?"":dto.getLicensor(); + info.rightValue=dto.getRightValue(); + info.funcId=StringUtils.isBlank(dto.getFuncId())?"":dto.getFuncId(); + info.modifyTime=StringUtils.isBlank(dto.getModifyTime())? new Date().getTime() :VciDateUtil.getTime(VciDateUtil.str2Date(dto.getModifyTime(),"")); + info.modifyUser=StringUtils.isBlank(dto.getModifyUser())?"":dto.getModifyUser(); + return info; } /** @@ -624,7 +2405,7 @@ * @param obj * @throws PLException */ - public void checkCodeName(PLUILayout obj) throws PLException { + private void checkCodeName(PLUILayout obj) throws PLException { PLUILayout[] plUILayouts = platformClientUtil.getUIService().getPLUILayoutsByRelatedType(obj.plRelatedType); int length = plUILayouts.length; String code = obj.plCode; @@ -669,7 +2450,7 @@ //鏌ヨ鍚屼竴涓氬姟绫诲瀷涓嬬殑ui涓婁笅鏂囷紝鐒跺悗鏌ラ噸 PLUILayout[] plpagelayoutdefinations = platformClientUtil.getUIService().getPLUILayoutsByRelatedType(pluiLayout.plRelatedType); int length = plpagelayoutdefinations.length; - for (int i =0;i<length;i++){ + for (int i =0; i<length; i++){ String code = plpagelayoutdefinations[i].plCode; String name = plpagelayoutdefinations[i].plName; String ids = plpagelayoutdefinations[i].plOId; @@ -680,9 +2461,8 @@ break; } } - } - else { - if (code.equalsIgnoreCase(code) || name.equals(name)){ + }else { + if (code.equalsIgnoreCase(pluiLayout.plCode) || name.equals(pluiLayout.plName)){ res = true; break; } @@ -691,4 +2471,1355 @@ return res; } + /** + * 涓氬姟绫诲瀷銆佹簮瀵硅薄绫诲瀷銆侀《灞傝妭鐐规樉绀虹被鍨嬬瓑閮借皟鐢ㄨ繖涓帴鍙f煡璇� + * @param baseQueryObject + * @return + * @throws PLException + */ + public DataGrid<BizType> getBtmDatasByPage(BaseQueryObject baseQueryObject) throws PLException{ + BizType[] btmNames = null; + int start = baseQueryObject.getPage(); + int end = baseQueryObject.getLimit(); + //鍏ㄦ煡鐨勬儏鍐� + /*if(limit != -1){ + start = baseQueryObject.getPage() <= 1 ? 1 : (page - 1) * limit + 1; + end = baseQueryObject.getPage() <= 1 ? limit : (page * limit); + }*/ + + String where = " 1=1 "; + String text = ""; + Map<String, String> conditionMap = baseQueryObject.getConditionMap(); + if(Func.isNotEmpty(conditionMap)){ + //杩囨护鏉′欢 + String filterInputValue = conditionMap.get("filterInputValue"); + if(Func.isNotBlank(filterInputValue)){ + where += String.format(" and (bt.name like '%%%s%%' or bt.label like '%%%s%%')", text, text); + } + } + + String fromWhere = String.format(" from plbtmtype bt where %s ", where); + String fromWhereOrderBy = String.format(" %s order by bt.name", fromWhere); + String sql = ""; + if(end != -1){ + sql = sql+String.format("select * from(" + + " select row_.*,rownum rownum_ from( " + + " select bt.name, bt.label %s" + + " ) row_ " + + ") where rownum_ >= %d and rownum_ <= %d ", fromWhereOrderBy, start, end); + }else{ + sql = sql+String.format( + "select bt.name, bt.label %s", fromWhereOrderBy); + } + List<BizType> list = new LinkedList<BizType>(); + String[][] kvss = platformClientUtil.getQueryService().queryBySqlWithoutKey(sql); + for(String[] kvs : kvss){ + BizType bi = new BizType(); + bi.name = kvs[0]; + bi.label = kvs[1]; + list.add(bi); + } + btmNames = list.toArray(new BizType[]{}); + + sql = String.format("select count(1) count_ %s", fromWhere); + kvss = platformClientUtil.getQueryService().queryBySqlWithoutKey(sql); + int total = Integer.valueOf(kvss[0][0]); + + DataGrid<BizType> res = new DataGrid<>(); + res.setData(Arrays.asList(btmNames)); + res.setTotal(total); + return res; + } + + /** + * 鏌ヨ閾炬帴绫诲瀷涓嬫媺 + * @param baseQueryObject + * @return + * @throws PLException + */ + public DataGrid<LinkType> getLinkDatasByPage(BaseQueryObject baseQueryObject) throws PLException{ + List<LinkType> list = new ArrayList<>(); + Map<String, LinkType> map = new HashMap<>(); + LinkType[] lts = platformClientUtil.getLinkTypeService().getLinkTypes(); + for (LinkType lt : lts) { + Map<String, String> conditionMap = baseQueryObject.getConditionMap(); + if(Func.isNotEmpty(conditionMap)){ + //閫夋嫨鐨勫璞$被鍨� + String selectBtmType = conditionMap.get("selectBtmType"); + if(selectBtmType != null){ + boolean existFrom = existInArray(selectBtmType, lt.btmItemsFrom); + boolean existTo = existInArray(selectBtmType, lt.btmItemsTo); + if(existFrom || existTo){ + if(!map.containsKey(lt.name)){ + map.put(lt.name, lt); + list.add(lt); + } + } + } + } + } + DataGrid<LinkType> res = new DataGrid<>(); + res.setData(list); + res.setTotal(list.size()); + return res; + } + + private boolean existInArray(String value, String[] values){ + boolean res = false; + for (String string : values) { + if(string.equals(value)){ + res = true; + break; + } + } + return res; + } + + /** + * UI瀹氫箟涓嬫媺鏌ヨ锛坱emplateType涓篣I瀹氫箟鏃剁殑UI瀹氫箟涓嬫媺鏌ヨ锛� + * @param baseQueryObject selectBtmType 閫夋嫨鐨勬簮瀵硅薄,甯﹀垎椤典俊鎭� + * @return + * @throws PLException + */ + public DataGrid<PLUILayout> getUILayoutDatasByPage(BaseQueryObject baseQueryObject) throws PLException{ + PLUILayout[] datas = null; + int start = baseQueryObject.getPage(); + int end = baseQueryObject.getLimit(); + /*int start = baseQueryObject.getPage() <= 1 ? 1 : (baseQueryObject.getPage() - 1) * baseQueryObject.getLimit() + 1; + int end = baseQueryObject.getPage() <= 1 ? baseQueryObject.getLimit() : (baseQueryObject.getPage() * baseQueryObject.getLimit());*/ + + String where = " 1=1 "; + Map<String, String> conditionMap = baseQueryObject.getConditionMap(); + if(Func.isNotEmpty(conditionMap)){ + //閫夋嫨鐨勫璞$被鍨� + String selectBtmType = conditionMap.get("selectBtmType"); + if(selectBtmType != null){ + where += String.format(" and ui.PLRELATEDTYPE = '%s' ", selectBtmType); + } + //杩囨护鏉′欢 + String filterInputValue = conditionMap.get("filterInputValue"); + if(Func.isNotBlank(filterInputValue)){ + where += String.format(" and (ui.plname like '%%%s%%') ", filterInputValue, filterInputValue); + } + } + String fromWhere = String.format(" from PLUILAYOUT ui where %s ", where); + String fromWhereOrderBy = String.format(" %s order by ui.plname", fromWhere); + String sql = ""; + if(end != -1){ + sql = String.format("select * from(" + + " select row_.*,rownum rownum_ from( " + + " select ui.plname, ui.plcode %s" + + " ) row_ " + + ") where rownum_ >= %d and rownum_ <= %d ", fromWhereOrderBy, start, end); + }else{ + sql = String.format("select ui.plname, ui.plcode %s", fromWhereOrderBy); + } + List<PLUILayout> list = new LinkedList<PLUILayout>(); + String[][] kvss = platformClientUtil.getQueryService().queryBySqlWithoutKey(sql); + for(String[] kvs : kvss){ + PLUILayout bi = new PLUILayout(); + bi.plName = kvs[0]; + bi.plCode = kvs[1]; + list.add(bi); + } + datas = list.toArray(new PLUILayout[0]); + + sql = String.format("select count(1) count_ %s", fromWhere); + kvss = platformClientUtil.getQueryService().queryBySqlWithoutKey(sql); + int total = Integer.valueOf(kvss[0][0]); + + DataGrid<PLUILayout> res = new DataGrid<PLUILayout>(); + res.setData(Arrays.asList(datas)); + res.setTotal(total); + return res; + } + + /** + * 閫夋嫨妯℃澘涓嬫媺鏌ヨ锛坱emplateType涓鸿〃鏍笺�佽〃鍗曘�佹爲琛ㄦ椂鐨勯�夋嫨瀵硅薄涓嬫媺鏌ヨ锛� + * @param baseQueryObject + * @return + * @throws PLException + */ + public DataGrid<PortalVI> getPortalVIDatasByPage(BaseQueryObject baseQueryObject) throws PLException{ + PortalVI[] datas = null; + + int start = baseQueryObject.getPage(); + int end = baseQueryObject.getLimit(); + /*int start = baseQueryObject.getPage() <= 1 ? 1 : (baseQueryObject.getPage() - 1) * baseQueryObject.getLimit() + 1; + int end = baseQueryObject.getPage() <= 1 ? baseQueryObject.getLimit() : (baseQueryObject.getPage() * baseQueryObject.getLimit());*/ + + String where = " 1=1 "; + + Map<String, String> conditionMap = baseQueryObject.getConditionMap(); + if(Func.isNotEmpty(conditionMap)){ + //閫夋嫨鐨勬簮瀵硅薄鎴栬�呮槸閫夋嫨鐨勭埗鑺傜偣鏄剧ず绫诲瀷 + String selectBtmType = conditionMap.get("selectBtmType"); + if(selectBtmType != null){ + where += String.format(" and vi.typename = '%s' ", selectBtmType); + } + /*if(getPopupDialog().getPortalVIType() != null){ + where += String.format(" and vi.vitype = %d ", getPopupDialog().getPortalVIType().getIntVal()); + }*/ + //杩囨护鏉′欢 + String filterInputValue = conditionMap.get("filterInputValue"); + if(Func.isNotBlank(filterInputValue)){ + where += String.format(" and (vi.viname like '%%%s%%') ", filterInputValue, filterInputValue); + } + } + + String fromWhere = String.format(" from plportalvi vi where %s ", where); + String fromWhereOrderBy = String.format(" %s order by vi.viname", fromWhere); + String sql = ""; + if(end != -1){ + sql = String.format("select * from(" + + " select row_.*,rownum rownum_ from( " + + " select vi.viname,vi.vitype %s" + + " ) row_ " + + ") where rownum_ >= %d and rownum_ <= %d ", fromWhereOrderBy, start, end); + }else{ + sql = String.format("select vi.viname,vi.vitype %s", fromWhereOrderBy); + } + List<PortalVI> list = new LinkedList<>(); + String[][] kvss = platformClientUtil.getQueryService().queryBySqlWithoutKey(sql); + for(String[] kvs : kvss){ + PortalVI bi = new PortalVI(); + bi.viName = kvs[0]; + bi.viType = Short.valueOf(kvs[1]); + list.add(bi); + } + datas = list.toArray(new PortalVI[]{}); + + sql = String.format("select count(1) count_ %s", fromWhere); + kvss = platformClientUtil.getQueryService().queryBySqlWithoutKey(sql); + int total = Integer.valueOf(kvss[0][0]); + + DataGrid<PortalVI> res = new DataGrid<>(); + res.setData(Arrays.asList(datas)); + res.setTotal(total); + return res; + } + + /** + * 鏌ヨ妯℃澘涓嬫媺鏌ヨ + * @param baseQueryObject + * @return + * @throws PLException + */ + public DataGrid<QTInfo> getQTInfoDatasByPage(BaseQueryObject baseQueryObject) throws PLException{ + QTInfo[] datas = null; + + int start = baseQueryObject.getPage(); + int end = baseQueryObject.getLimit(); + /*int start = baseQueryObject.getPage() <= 1 ? 1 : (baseQueryObject.getPage() - 1) * baseQueryObject.getLimit() + 1; + int end = baseQueryObject.getPage() <= 1 ? baseQueryObject.getLimit() : (baseQueryObject.getPage() * baseQueryObject.getLimit());*/ + + String where = " 1=1 "; + + Map<String, String> conditionMap = baseQueryObject.getConditionMap(); + if(Func.isNotEmpty(conditionMap)){ + //閫夋嫨鐨勬簮瀵硅薄鎴栬�呮槸閫夋嫨鐨勭埗鑺傜偣鏄剧ず绫诲瀷 + String selectBtmType = conditionMap.get("selectBtmType"); + if(selectBtmType != null){ + where += String.format(" and qt.btmname = '%s' ", selectBtmType); + } + //杩囨护鏉′欢 + String filterInputValue = conditionMap.get("filterInputValue"); + if(Func.isNotBlank(filterInputValue)){ + where += String.format(" and (qt.qtname like '%%%s%%') ", filterInputValue, filterInputValue); + } + } + + String fromWhere = String.format(" from PL_QTEMPLATE qt where %s ", where); + String fromWhereOrderBy = String.format(" %s order by qt.qtname ", fromWhere); + String sql = ""; + if(end != -1){ + sql = String.format("select * from(" + + " select row_.*,rownum rownum_ from( " + + " select qt.qtname,qt.btmname %s" + + " ) row_ " + + ") where rownum_ >= %d and rownum_ <= %d ", fromWhereOrderBy, start, end); + }else{ + sql = String.format("select qt.qtname,qt.btmname %s", fromWhereOrderBy); + } + List<QTInfo> list = new LinkedList<QTInfo>(); + String[][] kvss = platformClientUtil.getQueryService().queryBySqlWithoutKey(sql); + for(String[] kvs : kvss){ + QTInfo bi = new QTInfo(); + bi.qtName = kvs[0]; + bi.btmName = kvs[1]; + list.add(bi); + } + datas = list.toArray(new QTInfo[]{}); + + sql = String.format("select count(1) count_ %s", fromWhere); + kvss = platformClientUtil.getQueryService().queryBySqlWithoutKey(sql); + int total = Integer.valueOf(kvss[0][0]); + + DataGrid<QTInfo> res = new DataGrid<QTInfo>(); + res.setData(Arrays.asList(datas)); + res.setTotal(total); + return res; + } + + /** + * 閫氳繃涓氬姟绫诲瀷鑾峰彇UI涓婁笅鏂囧寘鍚叾涓嬪叧鑱旂殑鍖哄煙瀹氫箟>椤甸潰瀹氫箟绛夋墍鏈夊叧鑱旀暟鎹紝褰掔撼鎴恡ree缁撴瀯 + * @param btmName 涓氬姟绫诲瀷鍚嶇О + * @param level 鏌ヨ鍒伴偅涓眰绾т负姝紙ui銆乼ab銆乸ageDef锛� + * @return + */ + public Tree getAllLevelTreeByBtm(String btmName,String level) throws PLException { + VciBaseUtil.alertNotNull(btmName,"涓氬姟绫诲瀷缂栧彿",level,"鏌ヨ灞傜骇"); + Tree resTree = new Tree(); + resTree.setText("UI涓婁笅鏂囬�夐」"); + resTree.setId("UILayout"); + resTree.setLeaf(false); + resTree.setLevel(1); + String level1Oid = ObjectUtility.getNewObjectID36(); + resTree.setOid(level1Oid); + + PLUILayout[] pluiLayouts = platformClientUtil.getUIService().getPLUILayoutsByRelatedType(btmName); + if(Func.isEmpty(pluiLayouts)){ + return resTree; + } + //鏍规嵁鏌ヨ鐨勫眰绾т笉鍚屽喅瀹氭槸鍚﹁繑鍥� + List<Tree> uiChildrenTree = new ArrayList<>(); + + Arrays.stream(pluiLayouts).forEach(item->{ + Tree uiTree = new Tree(); + uiTree.setLeaf(level.equals("ui")); + uiTree.setLevel(2); + uiTree.setId(item.plCode); + uiTree.setOid(item.plOId); + uiTree.setText(item.plCode + "(" + item.plName + ")"); + uiTree.setParentId(level1Oid); + List<Tree> tabChildren = null; + if(!level.equalsIgnoreCase("ui")){ + try { + tabChildren = this.getTabChildren(item.plOId, level); + } catch (PLException e) { + e.printStackTrace(); + String exceptionMessage = "鏌ヨ椤电鏃跺嚭鐜伴敊璇細"+VciBaseUtil.getExceptionMessage(e); + logger.error(exceptionMessage); + throw new VciBaseException(exceptionMessage); + } + uiTree.setChildren(tabChildren); + } + uiChildrenTree.add(uiTree); + }); + + resTree.setChildren(uiChildrenTree); + return resTree; + } + + /** + * 鍏嬮殕椤电 + * @param uiCloneVO + * @return + * @throws Throwable + */ + @Override + public BaseResult clonetabPage(UICloneVO uiCloneVO) throws Throwable { + VciBaseUtil.alertNotNull(uiCloneVO,"鍏嬮殕瀵硅薄",uiCloneVO.getFromOId(),"婧愬叧鑱旂殑UI瀹氫箟瀵硅薄鐨勪富閿�"); + //婧愬叧鑱斿璞$殑涓婚敭(UI瀹氫箟鐨勪富閿�) + String fromOId = uiCloneVO.getFromOId(); + //鍏嬮殕鍒伴偅涓猆I瀹氫箟涓� + String toOId = uiCloneVO.getToOId(); + //琚厠闅嗙殑瀵硅薄涓婚敭 + Map<String, String> cloneParamMap = uiCloneVO.getCloneParam(); + String sourceOId = cloneParamMap.get("sourceOId"); + if(Func.isBlank(sourceOId)){ + return BaseResult.fail("鏈粠璇锋眰鍙傛暟涓幏鍙栧埌锛屾簮瀵硅薄涓婚敭锛侊紒"); + } + //鍒ゆ柇鏄惁鏈夌洰鏍囦富閿紝濡傛灉娌℃湁灏辫鏄庢槸鍏嬮殕鍒板綋鍓嶉〉绛句笅 + if(Func.isBlank(toOId)){ + toOId = fromOId; + } + //鏌ヨ琚厠闅嗙殑椤电瀹氫箟 + PLTabPage tabPage = this.platformClientUtil.getUIService().getPLTabPageById(sourceOId); + if(Func.isEmpty(tabPage) || Func.isBlank(tabPage.plOId)){ + return BaseResult.fail("鏍规嵁婧愬璞′富閿湭鏌ヨ鍒版簮瀵硅薄锛岃鍒锋柊鍚庨噸璇曪紒锛�"); + } + //鍦ㄥ厠闅嗙殑鐩爣UI瀹氫箟涓嬪悓涓�鍖哄煙杩涜椤电鍚嶇О銆佺紪鍙枫�佸簭鍙锋煡閲嶅鐞� + String copyObjName = tabPage.plName;//鍚嶇О + String copyObjCode = tabPage.plCode;//缂栧彿 + String copyObjSeq = String.valueOf(tabPage.plSeq);//搴忓彿 + PLTabPage[] tabPages = platformClientUtil.getUIService().getTabPagesByContextIdAndType(toOId, tabPage.plAreaType);//鍚屼竴鍖哄煙涓嬬殑 + if (Func.isNotEmpty(tabPages)) { + Map<String, Short> toTabPageDefMap = Arrays.stream(tabPages).collect(Collectors.toMap(item -> item.plName, item -> item.plSeq)); + //while寰幆鍑簍oPageDefMap涓嶅瓨鍦ㄧ殑澶嶅埗瀵硅薄鍚� + int i = 1; + int i1 = 1; + String name = tabPage.plName; + while(true){ + copyObjName = name + "_copy(" + i++ + ")"; + if (!toTabPageDefMap.containsValue(copyObjName)) { + break; + } + } + Set<String> tabPageCodes = Arrays.stream(tabPages).map(item -> item.plCode).collect(Collectors.toSet()); + String code = tabPage.plCode; + while(true){ + copyObjCode = code + "_copy(" + i1++ + ")"; + if (!tabPageCodes.contains(copyObjCode)) { + break; + } + } + //鑾峰彇鍒皏alues鐨勬渶澶у�� + Short currentSeq = toTabPageDefMap.values().stream().max(Comparator.naturalOrder()).get(); + copyObjSeq = String.valueOf(currentSeq+1); + } + //淇敼鍏宠仈鐨刄I瀹氫箟涓婚敭銆佸悕绉般�佺紪鍙枫�佸簭鍙� + tabPage.plContextOId = toOId; + //鏂扮殑鍏嬮殕瀵硅薄涓婚敭 + String newOId = ObjectUtility.getNewObjectID36(); + tabPage.plOId = newOId; + tabPage.plName = copyObjName; + tabPage.plCode = copyObjCode; + tabPage.plSeq = Short.parseShort(copyObjSeq); + SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); + tabPage.plCreateUser = sessionInfo.getUserId(); + tabPage.plModifyUser = sessionInfo.getUserId(); + long currentTimeMillis = System.currentTimeMillis(); + tabPage.plCreateTime = currentTimeMillis; + tabPage.plModifyTime = currentTimeMillis; + boolean resTabPage = this.platformClientUtil.getUIService().savePLTabPage(tabPage); + if(!resTabPage){ + return BaseResult.fail("椤甸潰瀹氫箟淇濆瓨澶辫触锛侊紒"); + } + //淇濆瓨鎴愬姛闇�瑕佽�冭檻鍒颁箣鍓嶄笉瀛樺湪鐨勫尯鍩燂紝鍏嬮殕涔嬪悗瀛樺湪浜嗗氨闇�瑕佹敼鍙樺搴斿尯鍩熺殑鏍囪瘑 + PLUILayout pluiLayout = this.platformClientUtil.getUIService().getPLUILayoutById(toOId); + if(Func.isNotEmpty(pluiLayout)){ + if(tabPage.plAreaType == 1){ + //瀵艰埅鍖� + pluiLayout.plIsShowNavigator = 1; + }else if(tabPage.plAreaType == 2){ + //鎺у埗鍖� + pluiLayout.plIsShowForm = 1; + }else { + //鎿嶄綔鍖� + pluiLayout.plIsShowTab = 1; + } + } + this.platformClientUtil.getUIService().updatePLUILayout(pluiLayout); + + //鏌ヨ椤甸潰瀹氫箟 + PLPageDefination[] pageDefinations = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(sourceOId); + if (Func.isEmpty(pageDefinations)) { + return BaseResult.success("椤电瀹氫箟鍏嬮殕鎴愬姛锛侊紒"); + } + String oldPageDefOId = ""; + boolean resPageDef = false; + for (int i = 0; i < pageDefinations.length; i++) { + PLPageDefination pageDef = pageDefinations[i]; + pageDef.plTabPageOId = newOId; + String newPageDefOId = ObjectUtility.getNewObjectID36(); + oldPageDefOId = pageDef.plOId;//璁板綍涓嬫棫鐨勪富閿� + pageDef.plOId = newPageDefOId; + resPageDef = platformClientUtil.getUIService().savePLPageDefination(pageDef); + if(!resPageDef){ + return BaseResult.success("鍏嬮殕椤甸潰瀹氫箟鍑洪敊锛侊紒"); + } + //鏌ヨ鎸夐挳杩涜淇濆瓨 + List<PLTabButtonVO> tabButtons = this.getTabButtons(oldPageDefOId); + if(Func.isNotEmpty(tabButtons)){ + tabButtons.stream().forEach(buttonVO->{ + try { + this.modifyButtonOIdsAndCopy(buttonVO,newPageDefOId,ObjectUtility.getNewObjectID36()); + } catch (PLException e) { + e.printStackTrace(); + String exceptionMessage = "鍏嬮殕鎸夐挳閰嶇疆鏃跺嚭鐜伴敊璇紝鍘熷洜锛�"+VciBaseUtil.getExceptionMessage(e); + logger.error(exceptionMessage); + throw new VciBaseException(exceptionMessage); + } + }); + } + } + return BaseResult.success("椤电瀹氫箟鍏嬮殕鎴愬姛锛侊紒"); + } + + /** + * 鍏嬮殕椤甸潰瀹氫箟 + * @param uiCloneVO + * @return + * @throws Throwable + */ + @Override + public BaseResult clonePageDef(UICloneVO uiCloneVO) throws Throwable { + VciBaseUtil.alertNotNull(uiCloneVO,"鍏嬮殕瀵硅薄",uiCloneVO.getFromOId(),"婧愬叧鑱斿璞$殑涓婚敭"); + //婧愬叧鑱斿璞$殑涓婚敭 + String fromOId = uiCloneVO.getFromOId(); + //鍏嬮殕鍒伴偅涓〉绛句笅锛歵abOid + String toOId = uiCloneVO.getToOId(); + //琚厠闅嗙殑瀵硅薄涓婚敭 + Map<String, String> cloneParamMap = uiCloneVO.getCloneParam(); + String sourceOId = cloneParamMap.get("sourceOId"); + if(Func.isBlank(sourceOId)){ + return BaseResult.fail("鏈粠璇锋眰鍙傛暟涓幏鍙栧埌锛屾簮瀵硅薄涓婚敭锛侊紒"); + } + //鍒ゆ柇鏄惁鏈夌洰鏍囦富閿紝濡傛灉娌℃湁灏辫鏄庢槸鍏嬮殕鍒板綋鍓嶉〉绛句笅 + if(Func.isBlank(toOId)){ + toOId = fromOId; + } + //鏌ヨ琚厠闅嗙殑椤甸潰瀹氫箟瀵硅薄 + PLPageDefination pageDefination = this.platformClientUtil.getUIService().getPLPageDefinationById(sourceOId); + if(Func.isEmpty(pageDefination) || Func.isBlank(pageDefination.plOId)){ + return BaseResult.fail("鏍规嵁婧愬璞′富閿湭鏌ヨ鍒版簮瀵硅薄锛岃鍒锋柊鍚庨噸璇曪紒锛�"); + } + + String copyObjName = "";//鍚嶇О + String copyObjSeq = "";//缂栧彿 + //鍏嬮殕涔嬪墠鏌ラ噸鐩爣鍏宠仈瀵硅薄涓嬬殑瀵硅薄鍚嶇О鍜岀紪鍙峰垽閲嶅鐞� + PLPageDefination[] pageDefinations = this.platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(toOId); + if (Func.isNotEmpty(pageDefinations)) { + Map<String, Short> toPageDefMap = Arrays.stream(pageDefinations).collect(Collectors.toMap(item -> item.name, item -> item.seq)); + //while寰幆鍑簍oPageDefMap涓嶅瓨鍦ㄧ殑澶嶅埗瀵硅薄鍚� + int i = 1; + String name = pageDefination.name; + while(true){ + copyObjName = name + "_copy(" + i++ + ")"; + if (!toPageDefMap.containsValue(copyObjName)) { + break; + } + } + + //鑾峰彇鍒皏alues鐨勬渶澶у�� + Short currentSeq = toPageDefMap.values().stream().max(Comparator.naturalOrder()).get(); + copyObjSeq = String.valueOf(currentSeq+1); + } + //淇敼鍏宠仈鐨勯〉绛句富閿拰鍚嶇О缂栧彿 + pageDefination.plTabPageOId = toOId; + String newOId = ObjectUtility.getNewObjectID36(); + pageDefination.plOId = newOId; + pageDefination.name = copyObjName; + pageDefination.seq = Short.parseShort(copyObjSeq); + //淇濆瓨椤甸潰瀹氫箟 + boolean resPageDef = platformClientUtil.getUIService().savePLPageDefination(pageDefination); + if(!resPageDef){ + return BaseResult.fail("椤电瀹氫箟淇濆瓨澶辫触锛侊紒"); + } + //鏌ヨ椤甸潰涓嬬殑鎸夐挳 + List<PLTabButtonVO> tabButtonVOS = this.getTabButtons(sourceOId); + if(Func.isEmpty(tabButtonVOS)){ + return BaseResult.success("椤甸潰瀹氫箟鍏嬮殕鎴愬姛锛侊紒"); + } + //鍒濆鍖杝essionInfo灞炴�� + SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); + //寰幆鍏嬮殕鎸夐挳锛堝悓鏃朵細瀵规寜閽殑鐖跺瓙绾у叧绯诲拰鎸夐挳涓嬬殑鍙傛暟杩涜淇濆瓨锛� + tabButtonVOS.stream().forEach(buttonVO->{ + try { + this.modifyButtonOIdsAndCopy(buttonVO,newOId,ObjectUtility.getNewObjectID36()); + } catch (PLException e) { + e.printStackTrace(); + String exceptionMessage = "鍏嬮殕鎸夐挳閰嶇疆鏃跺嚭鐜伴敊璇紝鍘熷洜锛�"+VciBaseUtil.getExceptionMessage(e); + logger.error(exceptionMessage); + throw new VciBaseException(exceptionMessage); + } + }); + return BaseResult.success("椤甸潰瀹氫箟鍏嬮殕鎴愬姛锛侊紒"); + } + + /** + * 鍏嬮殕鎸夐挳锛堝瓨鍦ㄧ埗瀛愮粨鏋勫叧绯汇�佸叧鑱旀暟鎹寜閽弬鏁帮級 + * @param uiCloneVO + * @return + * @throws Throwable + */ + @Override + public BaseResult cloneTabButton(UICloneVO uiCloneVO) throws Throwable { + VciBaseUtil.alertNotNull(uiCloneVO,"鍏嬮殕瀵硅薄",uiCloneVO.getFromOId(),"婧愬叧鑱斿璞′富閿�"); + String fromOId = uiCloneVO.getFromOId(); + String toOId = uiCloneVO.getToOId(); + //鍏堟煡璇㈡簮瀵硅薄 + //PLTabButton tabButton = platformClientUtil.getUIService().getPLTabButtonById(fromOId); + String sourceOId = uiCloneVO.getCloneParam().get("sourceOId"); + if(Func.isBlank(sourceOId)){ + return BaseResult.fail("鏈粠璇锋眰鍙傛暟涓幏鍙栧埌锛屾簮瀵硅薄涓婚敭锛侊紒"); + } + //鍒ゆ柇鏄惁鏈夌洰鏍囦富閿紝濡傛灉娌℃湁灏辫鏄庢槸鍏嬮殕鍒板綋鍓嶉〉闈笅 + if(Func.isBlank(toOId)){ + toOId = fromOId; + } + //鍒ゆ柇鍓嶇鏄惁浼犱簡鍏嬮殕鍚嶈繃鏉ワ紙鎸夐挳杩欒竟涓嶉渶瑕佸悕绉般�佺紪鍙峰垽閲嶏紝鎵�浠ヨ繖涓�鍧楀効閫昏緫蹇界暐锛� + //鎸夐挳鍏锋湁鐖跺瓙绾у叧绯伙紝鎵�浠ヨ繕闇�瑕佸仛oid鍜宲arentOId澶勭悊 + List<PLTabButtonVO> tabButtons = this.getTabButtons(fromOId);//TODO:杩欏効娑夊強鍒拌浆VO鎿嶄綔鍜屽瓙鎸夐挳鏌ヨ鐨勬搷浣滄墍浠ュ緢鎱� + PLTabButtonVO filterTabButton = tabButtons.stream() + .filter(item -> item.getOId().equals(sourceOId)).findFirst().orElse(null); + if(Func.isEmpty(filterTabButton)){ + return BaseResult.fail("鏍规嵁婧愬璞′富閿湭鏌ヨ鍒版簮瀵硅薄锛岃鍒锋柊鍚庨噸璇曪紒锛�"); + } + SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); + + //鏀瑰彉button瀵硅薄鐨刼id鍜宲arentOId + this.modifyButtonOIdsAndCopy(filterTabButton,toOId,ObjectUtility.getNewObjectID36()); + + return BaseResult.success("鎸夐挳澶嶅埗鎴愬姛锛�"); + } + + /** + * 淇敼oId鍜宲arentOid锛屼笉鏀瑰彉鐖跺瓙绾э紙oid鍙樻崲parentOId涔熼渶瑕佽窡鐫�鍙樻崲锛夌粨鏋勶紝骞朵繚瀛樻寜閽拰鍏跺弬鏁� + * @param button 闇�瑕佷慨鏀逛富閿繚瀛樼殑鎸夐挳瀵硅薄 + * @param toOId 鎸夐挳鍏宠仈鐨勯〉闈㈠畾涔塷id + * @param newOId 鏂扮殑鎸夐挳瀵硅薄涓婚敭 + * @throws PLException + */ + private void modifyButtonOIdsAndCopy(PLTabButtonVO button,String toOId, String newOId) throws PLException { + if (button == null) { + return; + } + + // 淇敼褰撳墠鑺傜偣鐨刼Id + button.setOId(newOId); + SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); + //寮�濮嬩繚瀛樻寜閽拰鍙傛暟 + button.setCreateUser(sessionInfo.getUserId()); + button.setModifyUser(sessionInfo.getUserId()); + button.setTableOId(toOId); + PLTabButton plTabButton = this.tabButtonVO2TabButton(new PLTabButton(), button); + boolean res = platformClientUtil.getUIService().savePLTabButton(plTabButton); + if(!res){ + throw new PLException("500",new String[]{"鎸夐挳閰嶇疆澶嶅埗澶辫触锛�"}); + } + this.saveButtonParams(button.getButtonParams(),button.getOId()); + + // 閫掑綊閬嶅巻瀛愯妭鐐� + if (button.getChildren() != null) { + for (PLTabButtonVO child : button.getChildren()) { + // 瀛愬璞$殑 parentOid 璁剧疆涓哄綋鍓嶈妭鐐圭殑鏂皁id + child.setParentOid(button.getOId()); // 纭繚瀛愬璞$殑parentOid鎸囧悜褰撳墠鐨刼id + modifyButtonOIdsAndCopy(child,toOId, ObjectUtility.getNewObjectID36()); + } + } + } + + /** + * 鑾峰彇椤电杩欎竴灞傜殑鍏宠仈鏁版嵁 + * @return + */ + private List<Tree> getTabChildren(String uiLayoutOid,String level) throws PLException { + List<Tree> tabChildren = new ArrayList<>(); + if(Func.isNotBlank(uiLayoutOid)){ + PLTabPage[] tabPages = platformClientUtil.getUIService().getPLTabPagesByPageDefinationOId(uiLayoutOid); + Arrays.stream(tabPages).forEach(tabPage->{ + Tree tabTree = new Tree(); + tabTree.setLeaf(level.equals("tab")); + tabTree.setLevel(2); + tabTree.setId(tabPage.plCode); + tabTree.setOid(tabPage.plOId); + tabTree.setText(tabPage.plCode + "(" + tabPage.plName + ")"); + tabTree.setParentId(uiLayoutOid); + if(!level.equalsIgnoreCase("tab")){ + try { + tabTree.setChildren(this.getPageDefChildren(tabPage.plOId)); + } catch (PLException e) { + e.printStackTrace(); + String exceptionMessage = "鏌ヨ椤甸潰瀹氫箟鏃跺嚭鐜伴敊璇細"+VciBaseUtil.getExceptionMessage(e); + logger.error(exceptionMessage); + throw new VciBaseException(exceptionMessage); + } + } + tabChildren.add(tabTree); + }); + } + return tabChildren; + } + + /** + * 鑾峰彇椤甸潰瀹氫箟杩欎竴灞傜殑鍏宠仈鏁版嵁 + * @return + */ + private List<Tree> getPageDefChildren(String tabPageOid) throws PLException { + List<Tree> pageDefChildren = new ArrayList<>(); + if(Func.isNotBlank(tabPageOid)){ + PLPageDefination[] pageDefs = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(tabPageOid); + Arrays.stream(pageDefs).forEach(pageDef->{ + Tree tabTree = new Tree(); + tabTree.setLeaf(true); + tabTree.setLevel(2); + tabTree.setId(pageDef.name); + tabTree.setOid(pageDef.plOId); + tabTree.setText(pageDef.name + "(" + pageDef.desc + ")"); + tabTree.setParentId(tabPageOid); + pageDefChildren.add(tabTree); + }); + } + return pageDefChildren; + } + + //鍩虹鍏叡妫�鏌ユ帴鍙� + private abstract class BaseComptInter { + + /** + * 鍏叡鏍¢獙鏂规硶 + * @return + * @throws PLException + */ + public abstract boolean checkInputIsOk() throws PLException; + + /** + * 鏍规嵁绫诲瀷涓嶅悓璁剧疆涓嶅悓鐨勫睘鎬� + * @param d + * @return + */ + public abstract PLDefination getNewPLDefination(PLDefination d); + + /** + * 闈炵┖妫�鏌� + * @param tip 鎻愮ず淇℃伅 + * @param txt 鏍¢獙鐨勫唴瀹� + * @param isRequired 鏄惁蹇呭~ + * @return + */ + protected boolean checkRequiredIsOk(String tip, String txt,boolean isRequired/*鏄惁蹇呭~*/){ + boolean res = false; + if(Func.isBlank(txt) && isRequired){ + throw new VciBaseException(tip + " 涓嶈兘涓虹┖锛�"); + } else { + res = true; + } + return res; + } + + /** + * 妫�鏌tmType杈撳叆鏄惁鏈夋晥 + * @param tipName 鎻愮ず鐨勪俊鎭� + * @param btmName 涓氬姟绫诲瀷鍚� + * @return + */ + protected boolean checkBtmTypeTxtIsOk(String tipName, String btmName,boolean isRequired) throws PLException { + boolean res = false; + if(tipName == null) return true; + if(btmName == null) return true; + if(!checkRequiredIsOk(tipName, btmName, isRequired)){ + res = false; + } else if(!checkBtmNameIsExist(tipName, btmName)){ + res = false; + } else { + res = true; + } + return res; + } + + /** + * 妫�鏌ヤ笟鍔$被鍨嬫槸鍚﹀瓨鍦� + * @param tip + * @param btmName + * @return + */ + protected boolean checkBtmNameIsExist(String tip, String btmName) throws PLException { + boolean res = false; + String sql = "select count(1) count_ from plbtmtype bt where bt.name='" + btmName.trim() + "'"; + res = checkCountNotEqualZero(sql); + if(!res){ + throw new PLException("500", + new String[]{String.format("%s %s 鏃犳晥锛�", tip, btmName)}); + } else { + res = true; + } + return res; + } + + /** + * 鎵цsql锛屾鏌ユ槸鍚︽湁杩斿洖鍊� + * @param sql + * @return + */ + protected boolean checkCountNotEqualZero(String sql){ + boolean res = false; + try{ + String[][] kvss = platformClientUtil.getQueryService().queryBySqlWithoutKey(sql); + res = Integer.valueOf(kvss[0][0]) > 0; + }catch(Exception ex){ + ex.printStackTrace(); + } + return res; + } + + /** + * 妫�鏌ヨ〃鍗曡緭鍏ユ槸鍚︽湁鏁� + * @param tip + * @param txtVIName + * @param btmLinkType + * @return + */ + protected boolean checkPortalVITxtIsOk(String tip, String txtVIName, String btmLinkType, boolean isRequired) throws PLException { + boolean res = false; + if(tip == null) return true; + if(txtVIName == null) return true; + if(!checkRequiredIsOk(tip, txtVIName,isRequired)){ + res = false; + } else if(!checkPortalVIIsExist(tip, txtVIName, btmLinkType)){ + res = false; + } else { + res = true; + } + return res; + } + + /** + * 妫�鏌ユā鏉� + * @param tip + * @param txtVIName + * @param btmLinkType + * @return + */ + protected boolean checkPortalVIIsExist(String tip, String txtVIName, String btmLinkType) throws PLException { + boolean res = false; + String sql = "select count(1) count_ from plportalvi vi " + + "where vi.typename='" + btmLinkType.trim() + "' " + + "and vi.viname='" + txtVIName.trim() + "'"; + res = checkCountNotEqualZero(sql); + if(!res){ + throw new PLException("500", + new String[]{String.format("%s %s 鏃犳晥锛�", tip, txtVIName)}); + } else { + res = true; + } + return res; + } + + /** + * 妫�鏌ユ煡璇㈡ā鏉胯緭鍏ユ槸鍚︽湁鏁� + * @param tip 杈撳叆妗嗙殑鍚嶇О锛岀敤鏉ユ彁绀� + * @param txtQTName 鏌ヨ妯℃澘 + * @param btmLinkType + * @return + */ + protected boolean checkQTNameTxtIsOk(String tip, String txtQTName, String btmLinkType, boolean isRequired) throws PLException { + boolean res = false; + if(tip == null) return true; + if(txtQTName == null) return true; + if(!checkRequiredIsOk(tip, txtQTName, isRequired)){ + res = false; + } else if(Func.isNotBlank(txtQTName) && !checkQTIsExist(tip, txtQTName, btmLinkType)){ + res = false; + } else { + res = true; + } + return res; + } + + /** + * 妫�鏌ヨ〃鍗曡緭鍏ユ槸鍚︽湁鏁� + * @param tip + * @param uiName + * @param btmLinkType + * @return + */ + protected boolean checkUILayoutTxtIsOk(String tip, String uiName, String btmLinkType, boolean isRequired) throws PLException { + boolean res = false; + if(tip == null) return true; + if(uiName == null) return true; + if(!checkRequiredIsOk(tip, uiName,isRequired)){ + res = false; + } else if(!checkUILayoutIsExist(tip, uiName, btmLinkType)){ + res = false; + } else { + res = true; + } + return res; + } + + private boolean checkUILayoutIsExist(String tip, String uiName, String txtType) throws PLException { + boolean res = false; + String sql = "select count(1) count_ from PLUILAYOUT ui " + + "where ui.PLRELATEDTYPE='" + txtType.trim() + "' " + + "and ui.plcode='" + uiName.trim() + "'"; + res = checkCountNotEqualZero(sql); + if(!res){ + throw new PLException("500", + new String[]{String.format("%s %s 鏃犳晥锛�", tip, uiName)}); + } else { + res = true; + } + return res; + } + + /** + * 妫�鏌ュ綋鍓嶈緭鍏ョ殑鏌ヨ妯℃澘鏄惁瀛樺湪 + * @param tip + * @param txtQTName + * @param txtType + * @return + */ + protected boolean checkQTIsExist(String tip, String txtQTName, String txtType) throws PLException { + boolean res = false; + String sql = "select count(1) count_ from PL_QTEMPLATE qt " + + "where qt.btmname ='" + txtType.trim() + "' " + + "and qt.qtname='" + txtQTName.trim() + "'"; + res = checkCountNotEqualZero(sql); + if(!res){ + throw new PLException("500", + new String[]{String.format("%s %s 鏃犳晥锛�", tip, txtQTName)}); + } else { + res = true; + } + return res; + } + + /** + * 妫�鏌inkType杈撳叆鏄惁鏈夋晥 + * @param tip + * @param linkTypeName + * @return + */ + protected boolean checkLinkTypeTxtIsOk(String tip, String linkTypeName, boolean isRequired) throws PLException { + boolean res = false; + if(tip == null) return true; + if(linkTypeName == null) return true; + if(!checkRequiredIsOk(tip, linkTypeName,isRequired)){ + res = false; + } else if(!checkLinkTypeIsExist(tip, linkTypeName)){ + res = false; + } else { + res = true; + } + return res; + } + + private boolean checkLinkTypeIsExist(String tip, String linkTypeName) throws PLException { + boolean res = false; + String sql = "select count(1) count_ from pllinktype lt " + + "where lt.name ='" + linkTypeName.trim() + "'"; + res = checkCountNotEqualZero(sql); + if(!res){ + throw new PLException("500", + new String[]{String.format("%s %s 鏃犳晥锛�", tip, linkTypeName)}); + } else { + res = true; + } + return res; + } + + } + + //妯℃澘绫诲瀷涓篊ustom绫诲瀷鏃舵牎楠岃緭鍏� + @AllArgsConstructor + @NoArgsConstructor + private class CustomComptCheckInput extends BaseComptInter{ + + /** + * 鎺у埗璺緞 + */ + private String ctrlPath; + + @Override + public boolean checkInputIsOk() throws PLException { + boolean res = true; + if(!checkRequiredIsOk(this.ctrlPath)){ + res = false; + } + return res; + } + + /** + * 鎺у埗璺緞蹇呰緭妫�鏌� + * @param ctrlPath + * @return + */ + protected boolean checkRequiredIsOk(String ctrlPath) throws PLException { + boolean res = false; + String text = ctrlPath.trim(); + + if(Func.isBlank(text)){ + throw new PLException("500", new String[]{"鎺у埗璺緞涓嶈兘涓虹┖锛�"}); + } else { + res = true; + } + return res; + } + + @Override + public PLDefination getNewPLDefination(PLDefination d) { + if(d == null){ + d = new PLDefination(); + } + d.setControlPath(ctrlPath); + return d; + } + + } + + @AllArgsConstructor + @NoArgsConstructor + private class TableComptCheckInput extends BaseComptInter{ + + /** + * 鎼滅储绫诲瀷锛氭湰瀵硅薄灞炴�э細1锛屽叧鑱斿璞″睘鎬э細2 + */ + private String searchTarger; + + /** + * 涓氬姟绫诲瀷 + */ + private String btmType; + + /** + * 閾炬帴绫诲瀷 + */ + private String linkType; + + /** + * 閫夋嫨妯℃澘 + */ + private String txtVIName; + + /** + * 鏌ヨ妯℃澘 + */ + private String txtQTName; + + @Override + public boolean checkInputIsOk() throws PLException { + boolean res = false; + if(searchTarger.equals("1")){ + res = checkBtmTypeInputIsOk(btmType,txtVIName,txtQTName); + } else if(searchTarger.equals("2")){ + res = checkLinkTypeInputIsOk(txtVIName,txtQTName,btmType); + } + return res; + } + + @Override + public PLDefination getNewPLDefination(PLDefination d) { + if(d == null){ + d = new PLDefination(); + } + if("1".equals(searchTarger)){ + d.setSearchTarger("1"); + d.setShowType(btmType.trim()); + d.setTemplateId(txtVIName); + d.setQueryTemplateName(txtQTName); + + } else if("2".equals(searchTarger)){ + d.setSearchTarger("2"); + + d.setShowType(btmType); + d.setLinkType(linkType); + d.setTemplateId(txtVIName); + d.setQueryTemplateName(txtQTName); + } + return d; + } + + /** + * 妫�鏌ヤ笟鍔$被鍨嬫槸鍚﹁緭鍏ワ紝鏄惁瀛樺湪 + * @param txtVIName + * @param btmType + * @param txtQTName + * @return + */ + private boolean checkBtmTypeInputIsOk(String btmType,String txtVIName/*閫夋嫨妯℃澘*/,String txtQTName/*鏌ヨ妯℃澘*/) throws PLException { + boolean res = false; + if(!super.checkBtmTypeTxtIsOk("涓氬姟绫诲瀷", btmType,true)){ + res = false; + } else if(!super.checkPortalVITxtIsOk("閫夋嫨妯℃澘", txtVIName, btmType,true)){ + res = false; + } else if(!super.checkQTNameTxtIsOk("鏌ヨ妯℃澘", txtQTName, btmType,false)){ + res = false; + } else { + res = true; + } + return res; + } + + /** + * 妫�鏌ラ摼鎺ョ被鍨嬫槸鍚﹁緭鍏ワ紝鏄惁瀛樺湪 + * @param txtVIName + * @param txtQTName + * @param btmType + * @return + */ + private boolean checkLinkTypeInputIsOk(String txtVIName/*閫夋嫨鐨勬ā鏉�*/,String txtQTName/*鏌ヨ妯℃澘*/,String btmType) throws PLException { + boolean res = false; + if(!(this.checkLinkTypeTxtIsOk("鐩爣瀵硅薄", linkType,true))){ + res = false; + } else if(!(this.checkPortalVITxtIsOk("閫夋嫨妯℃澘", txtVIName, linkType,true))){ + res = false; + } else if(!(this.checkQTNameTxtIsOk("鏌ヨ妯℃澘", txtQTName, linkType,false))){ + res = false; + } else { + res = true; + } + return res; + } + + } + + @AllArgsConstructor + @NoArgsConstructor + private class TreeTableComptCheckInput extends BaseComptInter{ + + /** + * 鎼滅储绫诲瀷锛氭湰瀵硅薄灞炴�э細1锛屽叧鑱斿璞″睘鎬э細2 + */ + private String searchTarger; + + /** + * 涓氬姟绫诲瀷 + */ + private String btmType; + + /** + * 閾炬帴绫诲瀷 + */ + private String linkType; + + /** + * 閫夋嫨妯℃澘 + */ + private String txtVIName; + + /** + * 鏌ヨ妯℃澘 + */ + private String txtQTName; + + /** + * 鏍戝舰缁撴瀯灞曞紑鍒� + */ + private String expandCols; + + /** + * 灞曞紑褰㈠紡锛氶�愮骇灞曞紑 1锛屽叏閮ㄥ睍寮� 0 + */ + private String expandMode; + + @Override + public boolean checkInputIsOk() throws PLException { + boolean res = false; + if(searchTarger.equals("1")){ + res = this.checkBtmTypeInputIsOk(); + } else if(searchTarger.equals("2")){ + res = checkLinkTypeInputIsOk(); + } + return res; + } + + @Override + public PLDefination getNewPLDefination(PLDefination d) { + if(d == null){ + d = new PLDefination(); + } + //灞炴�ц祴鍊奸噸鍙狅紝鎵�浠ヨ繖鍎挎敼鍙樹簡閫昏緫 + d.setSearchTarger(searchTarger); + d.setShowType(btmType); + d.setTemplateId(txtVIName); + d.setOrientation("positive"); + d.setQueryTemplateName(txtQTName); + d.setExpandCols(expandCols); + d.setExpandMode(expandMode); + if("2".equals(searchTarger)){ + d.setLinkType(linkType); + } + return d; + } + + private boolean checkBtmTypeInputIsOk() throws PLException { + boolean res = false; + if(!(super.checkBtmTypeTxtIsOk("椤剁骇鑺傜偣鏄剧ず绫诲瀷", btmType,true))){ + res = false; + } else if(!(super.checkPortalVITxtIsOk("閫夋嫨妯℃澘", txtVIName, btmType,true))){ + res = false; + } else if(!(super.checkQTNameTxtIsOk("鏌ヨ妯℃澘", txtQTName , btmType,false))){ + res = false; + } else { + res = true; + } + return res; + } + + private boolean checkLinkTypeInputIsOk() throws PLException { + boolean res = false; + if(!(super.checkBtmTypeTxtIsOk("椤剁骇鑺傜偣鏄剧ず绫诲瀷", linkType,true))){ + res = false; + } else if(!(super.checkPortalVITxtIsOk("閫夋嫨妯℃澘", txtVIName, linkType,true))){ + res = false; + } else if(!(super.checkQTNameTxtIsOk("鏌ヨ妯℃澘", txtQTName, linkType,false))){ + res = false; + } else { + res = true; + } + return res; + } + + } + + @AllArgsConstructor + @NoArgsConstructor + private class TreeComptCheckInput extends BaseComptInter{ + + /** + * 涓氬姟绫诲瀷 + */ + private String btmType; + + /** + * 閾炬帴绫诲瀷 + */ + private String linkType; + + /** + * 鏌ヨ妯℃澘 + */ + private String queryTemplateName; + + /** + * 鏍硅妭鐐规樉绀鸿〃杈惧紡 + */ + private String showExpressionRoot; + + /** + * 鏍戣妭鐐规樉绀鸿〃杈惧紡 + */ + private String showExpression; + + /** + * 鍙傜収鏍戣缃� + */ + private String refTreeSet; + + + /** + * 鍒嗛殧绗� + */ + private String splitChar; + + /** + * 灞曞紑鏂瑰紡锛氶�愮骇灞曞紑 1锛屽叏閮ㄥ睍寮� 0 + */ + private String expandMode; + + @Override + public boolean checkInputIsOk() throws PLException { + return checkBtmTypeInputIsOk(); + } + + @Override + public PLDefination getNewPLDefination(PLDefination d) { + if(d == null){ + d = new PLDefination(); + } + d.setShowType(btmType); + d.setLinkType(linkType); + d.setTemplateId(queryTemplateName); + d.setOrientation("positive"); + d.setRootContent(showExpressionRoot.trim()); + d.setShowAbs(showExpression.trim()); + d.setShowLinkAbs(refTreeSet.trim()); + d.setSeparator(splitChar.trim()); + d.setExpandMode(expandMode); + return d; + } + + private boolean checkBtmTypeInputIsOk() throws PLException { + boolean res = false; + if(!(super.checkBtmTypeTxtIsOk("涓氬姟绫诲瀷", btmType,true))){ + res = false; + return res; + } + // 閾炬帴绫诲瀷涓嶄负绌烘椂锛岄渶瑕佸悓鏃舵鏌ラ摼鎺ョ被鍨嬪強閾炬帴绫诲瀷涓嬬殑鏌ヨ妯℃澘鏄惁鏈夋晥 + if(Func.isNotBlank(linkType)){ + if(!(super.checkLinkTypeTxtIsOk("閾炬帴绫诲瀷", linkType,false))){ + res = false; + return res; + } else if(!(super.checkQTNameTxtIsOk("鏌ヨ妯℃澘", queryTemplateName, linkType,true))){ + res = false; + return res; + } + } else { + // 閾炬帴绫诲瀷涓虹┖鏃讹紝鍙渶瑕佹鏌ヤ笟鍔$被鍨嬩笅鐨勬煡璇㈡ā鏉挎槸鍚︽湁鏁� + if(!(super.checkQTNameTxtIsOk("鏌ヨ妯℃澘", queryTemplateName, btmType,true))){ + res = false; + return res; + } + } + + if(!super.checkRequiredIsOk("鏍硅妭鐐规樉绀鸿〃杈惧紡", showExpressionRoot,true)){ + res = false; + } + else if(!super.checkRequiredIsOk("鏍戣妭鐐规樉绀鸿〃杈惧紡", showExpression,true)){ + res = false; + } + else if(!super.checkRequiredIsOk("鍙傜収鏍戣缃�", refTreeSet,true)){ + res = false; + } + else { + res = true; + } + return res; + } + + } + + @AllArgsConstructor + @NoArgsConstructor + private class UILayoutComptCheckInput extends BaseComptInter{ + + /** + * 鎼滅储绫诲瀷锛氭湰瀵硅薄灞炴�э細1锛屽叧鑱斿璞″睘鎬э細2 + * 鏌ヨ绫诲瀷涔熸槸璧嬪�煎埌杩欎釜灞炴�т笂锛� 涓氬姟绫诲瀷锛�1锛岄摼鎺ョ被鍨嬶細2 + */ + private String searchTarger; + + /** + * 瀵硅薄绫诲瀷 + */ + private String uiBtmType; + + /** + * UI瀹氫箟 + */ + private String uiLayout; + + /** + * 鏌ヨ妯℃澘 + */ + private String queryTemplateName; + + /** + * 鏌ヨ瀵硅薄绫诲瀷 + */ + private String qryType; + + @Override + public boolean checkInputIsOk() throws PLException{ + return checkUILayoutInputIsOk(); + } + + @Override + public PLDefination getNewPLDefination(PLDefination d) { + if (d == null) { + d = new PLDefination(); + } + + d.setSearchTarger(searchTarger); + d.setSubUiObjType(uiBtmType.trim()); + d.setSubUILayout(uiLayout.trim()); + + if (searchTarger.equals("1")) { + d.setShowType(qryType.trim()); + } else { + d.setLinkType(qryType.trim()); + } + d.setQueryTemplateName(queryTemplateName.trim()); + + return d; + } + + private boolean checkUILayoutInputIsOk() throws PLException { + boolean res = false; + if (!(super.checkBtmTypeTxtIsOk("瀵硅薄绫诲瀷", uiBtmType,true))) { + res = false; + } else if (!(super.checkUILayoutTxtIsOk("UI瀹氫箟", uiLayout, uiBtmType,true))) { + res = false; + } else if (!(super.checkQTNameTxtIsOk("鏌ヨ妯℃澘", queryTemplateName, qryType,false))) { + res = false; + } else { + res = true; + } + return res; + } + + } + } -- Gitblit v1.9.3