From 435e3366a85f797ce02008698c28c9a8ca73b4a6 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期二, 08 十月 2024 10:10:24 +0800
Subject: [PATCH] UI定义复制粘贴树查询接口,按钮复制粘贴接口

---
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java |  303 ++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 280 insertions(+), 23 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 73634cf..1ffa2b2 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
@@ -5,6 +5,7 @@
 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.*;
@@ -87,6 +88,11 @@
     private final String IMPORTUIKEY = "importUIKey:";
 
     /**
+     * 褰撳墠鐧诲綍鐢ㄦ埛鐨勪俊鎭�
+     */
+    private SessionInfo sessionInfo = null;
+
+    /**
      * 鎺掑簭姣旇緝鍣�
      */
     private Comparator<PLUILayout> pageLayoutComparator = new Comparator<PLUILayout>() {
@@ -139,7 +145,7 @@
     }
 
     /**
-     * ton閫氳繃涓氬姟绫诲瀷鍜屽悕绉版煡璇�
+     * 閫氳繃涓氬姟绫诲瀷鍜屽悕绉版煡璇�
      * @param btemName
      * @param context
      * @return
@@ -1049,9 +1055,9 @@
                     pdVO.getShowType(),
                     pdVO.getLinkType(),
                     pdVO.getQueryTemplateName(),
-                    pdVO.getShowExpressionRoot(),
-                    pdVO.getShowExpression(),
-                    pdVO.getRefTreeSet(),
+                    pdVO.getRootContent(),
+                    pdVO.getShowAbs(),
+                    pdVO.getShowLinkAbs(),
                     pdVO.getSeparator(),
                     pdVO.getExpandMode()
                 );
@@ -1064,8 +1070,8 @@
             case "6":
                 UILayoutComptCheckInput ulci = new UILayoutComptCheckInput(
                     pdVO.getSearchTarger(),
-                    pdVO.getShowType(),
-                    pdVO.getUiLayout(),
+                    pdVO.getSubUIObjType(),
+                    pdVO.getSubUILayout(),
                     pdVO.getQueryTemplateName(),
                     pdVO.getQryType()
                 );
@@ -1166,9 +1172,9 @@
                         pdVO.getShowType(),
                         pdVO.getLinkType(),
                         pdVO.getQueryTemplateName(),
-                        pdVO.getShowExpressionRoot(),
-                        pdVO.getShowExpression(),
-                        pdVO.getRefTreeSet(),
+                        pdVO.getRootContent(),
+                        pdVO.getShowAbs(),
+                        pdVO.getShowLinkAbs(),
                         pdVO.getSeparator(),
                         pdVO.getExpandMode()
                 );
@@ -1181,8 +1187,8 @@
             case "6":
                 UILayoutComptCheckInput ulci = new UILayoutComptCheckInput(
                         pdVO.getSearchTarger(),
-                        pdVO.getShowType(),
-                        pdVO.getUiLayout(),
+                        pdVO.getSubUIObjType(),
+                        pdVO.getSubUILayout(),
                         pdVO.getQueryTemplateName(),
                         pdVO.getQryType()
                 );
@@ -1275,7 +1281,7 @@
         }
         plTabButtonVO.setOId(tabButtonDO.plOId);
         plTabButtonVO.setTableOId(tabButtonDO.plTableOId);
-        plTabButtonVO.setPageOId(tabButtonDO.plPageOId);
+        //plTabButtonVO.setPageOId(tabButtonDO.plPageOId);
         plTabButtonVO.setActionOId(tabButtonDO.plActionOId);
         plTabButtonVO.setLabel(tabButtonDO.plLabel);
         plTabButtonVO.setAreaType(tabButtonDO.plAreaType);
@@ -1339,7 +1345,7 @@
     private PLTabButton tabButtonVO2TabButton(PLTabButton plTabButton,PLTabButtonVO tabButtonVO) {
         plTabButton.plOId = tabButtonVO.getOId();
         plTabButton.plTableOId = tabButtonVO.getTableOId();
-        plTabButton.plPageOId = tabButtonVO.getPageOId();
+        //plTabButton.plPageOId = tabButtonVO.getPageOId();
         plTabButton.plActionOId = tabButtonVO.getActionOId();
         plTabButton.plLabel = tabButtonVO.getLabel();
         plTabButton.plAreaType = tabButtonVO.getAreaType();
@@ -1364,7 +1370,7 @@
      * @return
      */
     @Override
-    public BaseResult addTapButton(PLTabButtonVO tabButtonVO) {
+    public BaseResult addTabButton(PLTabButtonVO tabButtonVO) {
         boolean res = this.saveOrUpdateTapButton(tabButtonVO, true);
         return res ? BaseResult.success("鎸夐挳閰嶇疆娣诲姞鎴愬姛锛�"):BaseResult.success("鎸夐挳閰嶇疆娣诲姞澶辫触锛�");
     }
@@ -1375,7 +1381,7 @@
      * @return
      */
     @Override
-    public BaseResult updateTapButton(PLTabButtonVO tabButtonVO) {
+    public BaseResult updateTabButton(PLTabButtonVO tabButtonVO) {
         boolean res = this.saveOrUpdateTapButton(tabButtonVO, false);
         return res ? BaseResult.success("鎸夐挳閰嶇疆淇敼鎴愬姛锛�"):BaseResult.success("鎸夐挳閰嶇疆淇敼澶辫触锛�");
     }
@@ -1432,8 +1438,17 @@
                 e.printStackTrace();
             }
         }
+        this.saveButtonParams(tabButtonVO.getButtonParams(),plTabButton.plOId);
+        return true;
+    }
 
-        LinkedHashMap<String, String> buttonParams = tabButtonVO.getButtonParams();
+    /**
+     * 鎸夐挳鍙傛暟淇濆瓨
+     * @param buttonParams
+     * @param tabButtonOid
+     * @return
+     */
+    private void saveButtonParams(LinkedHashMap<String, String> buttonParams,String tabButtonOid) throws VciBaseException{
         if(Func.isNotEmpty(buttonParams)) {
             Iterator<Map.Entry<String, String>> iterator = buttonParams.entrySet().iterator();
             while(iterator.hasNext()){
@@ -1447,7 +1462,7 @@
                 Map.Entry<String, String> next = kvItor.next();
                 PLCommandParameter plCommandParameter = new PLCommandParameter();
                 plCommandParameter.plOId = ObjectUtility.getNewObjectID36();
-                plCommandParameter.plCommandOId = plTabButton.plOId;
+                plCommandParameter.plCommandOId = tabButtonOid;
                 plCommandParameter.plKey = next.getKey();
                 plCommandParameter.plValue = next.getValue();
                 plCommandParameter.plCreateUser = sessionInfo.getUserId();
@@ -1460,7 +1475,6 @@
                 }
             }
         }
-        return true;
     }
 
     /**
@@ -1469,7 +1483,7 @@
      * @return
      */
     @Override
-    public boolean deleteTapButton(PLTabButtonVO tabButtonVO) throws PLException {
+    public boolean deleteTabButton(PLTabButtonVO tabButtonVO) throws PLException {
         VciBaseUtil.alertNotNull(tabButtonVO,"鍒犻櫎鐨勬寜閽厤缃璞�");
         boolean success = platformClientUtil.getUIService().deletePLTabButton(this.tabButtonVO2TabButton(new PLTabButton(),tabButtonVO));
         if(success == false){
@@ -1485,7 +1499,7 @@
      */
     @Override
     public BaseResult joinBtn(PLTabButtonVO tabButtonVO) throws PLException {
-        VciBaseUtil.alertNotNull(tabButtonVO,"闇�璋冩暣涓轰笅绾ф寜閽�",tabButtonVO.getTableOId(),"褰撳墠鎸夐挳閰嶇疆鎵�鍦ㄧ殑椤甸潰涓婚敭");
+        VciBaseUtil.alertNotNull(tabButtonVO,"闇�璋冩暣涓轰笅绾ф寜閽殑瀵硅薄",tabButtonVO.getTableOId(),"褰撳墠鎸夐挳閰嶇疆鎵�鍦ㄧ殑椤甸潰涓婚敭");
         //鍚屼竴椤甸潰涓嬬殑鎸夐挳
         List<PLTabButtonVO> plTabButtons = this.getTabButtons(tabButtonVO.getTableOId());
         if(Func.isEmpty(plTabButtons)){
@@ -1697,7 +1711,7 @@
         }
         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);
@@ -2183,7 +2197,7 @@
      * @param vo
      * @return
      */
-    private RoleRightDTO  roleRightVOO2DTO(RoleRightVO vo){
+    private RoleRightDTO roleRightVOO2DTO(RoleRightVO vo){
         RoleRightDTO dto=new RoleRightDTO();
         dto.setId(vo.getId());
         dto.setCreateTime(vo.getCreateTime());
@@ -2203,7 +2217,7 @@
      * @param dto
      * @return
      */
-    private RoleRightInfo  roleRightDTOO2Info(RoleRightDTO dto) throws Exception {
+    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(),""));
@@ -2388,6 +2402,50 @@
     }
 
     /**
+     * 鏌ヨ閾炬帴绫诲瀷涓嬫媺
+     * @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
@@ -2551,6 +2609,205 @@
         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 cloneTabButton(UICloneVO uiCloneVO) throws Throwable {
+        VciBaseUtil.alertNotNull(uiCloneVO,"鍏嬮殕瀵硅薄",uiCloneVO.getSourceOId(),"婧愬璞′富閿�");
+        String fromOId = uiCloneVO.getSourceOId();
+        String toOId = uiCloneVO.getToOId();
+        //鍏堟煡璇㈡簮瀵硅薄
+        //PLTabButton tabButton = platformClientUtil.getUIService().getPLTabButtonById(fromOId);
+        String sourceTableOId = uiCloneVO.getCloneParam().get("sourceTableOId");
+        if(Func.isBlank(sourceTableOId)){
+            return BaseResult.fail("鏈粠璇锋眰鍙傛暟涓幏鍙栧埌锛屾簮瀵硅薄鍏宠仈鐨勯〉闈㈠畾涔変富閿紒锛�");
+        }
+        //鍒ゆ柇鏄惁鏈夌洰鏍囦富閿紝濡傛灉娌℃湁灏辫鏄庢槸鍏嬮殕鍒板綋鍓嶉〉闈笅
+        if(Func.isBlank(toOId)){
+            toOId = sourceTableOId;
+        }
+        //鍒ゆ柇鍓嶇鏄惁浼犱簡鍏嬮殕鍚嶈繃鏉ワ紙鎸夐挳杩欒竟涓嶉渶瑕佸悕绉般�佺紪鍙峰垽閲嶏紝鎵�浠ヨ繖涓�鍧楀効閫昏緫蹇界暐锛�
+        //鎸夐挳鍏锋湁鐖跺瓙绾у叧绯伙紝鎵�浠ヨ繕闇�瑕佸仛oid鍜宲arentOId澶勭悊
+        List<PLTabButtonVO> tabButtons = this.getTabButtons(sourceTableOId);
+        PLTabButtonVO filterTabButton = tabButtons.stream()
+                .filter(item -> item.getOId().equals(fromOId)).findFirst().orElse(null);
+        if(Func.isEmpty(filterTabButton)){
+            return BaseResult.fail("鏍规嵁婧愬璞′富閿湭鏌ヨ鍒版簮瀵硅薄锛岃鍒锋柊鍚庨噸璇曪紒锛�");
+        }
+        if(Func.isEmpty(sessionInfo)){
+            sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
+        }
+
+        //鏀瑰彉button瀵硅薄鐨刼id鍜宲arentOId
+        this.modifyButtonIdsAndCopy(filterTabButton,toOId,ObjectUtility.getNewObjectID36());
+
+        return BaseResult.success("鎸夐挳澶嶅埗鎴愬姛锛�");
+    }
+
+    /**
+     * 淇敼oId鍜宲arentOid锛屼笉鏀瑰彉鐖跺瓙绾э紙oid鍙樻崲parentOId涔熼渶瑕佽窡鐫�鍙樻崲锛夌粨鏋勶紝骞朵繚瀛樻寜閽拰鍏跺弬鏁�
+     * @param button
+     * @param newOId
+     */
+    private void modifyButtonIdsAndCopy(PLTabButtonVO button,String toOId, String newOId) throws PLException {
+        if (button == null) {
+            return;
+        }
+
+        // 淇敼褰撳墠鑺傜偣鐨刼Id
+        button.setOId(newOId);
+        //寮�濮嬩繚瀛樻寜閽拰鍙傛暟
+        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
+                modifyButtonIdsAndCopy(child,toOId, ObjectUtility.getNewObjectID36());
+                child.setParentOid(button.getOId());  // 纭繚瀛愬璞$殑parentOid鎸囧悜褰撳墠鐨刼id
+            }
+        }
+    }
+
+    /**
+     * 鍏嬮殕椤电
+     * @param uiCloneVO
+     * @return
+     * @throws Throwable
+     */
+    @Override
+    public BaseResult clonetabPage(UICloneVO uiCloneVO) throws Throwable {
+        return null;
+    }
+
+    /**
+     * 鍏嬮殕椤甸潰瀹氫箟
+     * @param uiCloneVO
+     * @return
+     * @throws Throwable
+     */
+    @Override
+    public BaseResult clonePageDef(UICloneVO uiCloneVO) throws Throwable {
+        return null;
+    }
+
+    /**
+     * 鑾峰彇椤电杩欎竴灞傜殑鍏宠仈鏁版嵁
+     * @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,level));
+                    } 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,String level) 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 {
 

--
Gitblit v1.9.3