From 2e61dd380b8a0f94f386684060af91b79e4d45f0 Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期三, 09 十月 2024 17:23:16 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/redis/RedisService.java   |   11 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/UIManagerController.java    |   61 +++++++
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/UICloneVO.java               |   11 -
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java |  367 +++++++++++++++++++++++++++++++++++++--------
 4 files changed, 362 insertions(+), 88 deletions(-)

diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/UICloneVO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/UICloneVO.java
index cd3d952..d541580 100644
--- a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/UICloneVO.java
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/UICloneVO.java
@@ -18,19 +18,14 @@
 public class UICloneVO {
 
     /**
-     * 婧愬璞′富閿�
+     * 婧愬叧鑱斿璞$殑涓婚敭
      */
-    private String sourceOId;
+    private String fromOId;
 
     /**
-     * 鐩爣涓婚敭
+     * 鐩爣鍒伴偅涓叧鑱斿璞$殑涓婚敭
      */
     private String toOId;
-
-    /**
-     * 鍏嬮殕瀵硅薄鍚嶇О
-     */
-    private String cloneObjName;
 
     /**
      * 鍏朵粬鍏嬮殕鍙傛暟
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/redis/RedisService.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/redis/RedisService.java
index b795342..01c544c 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/redis/RedisService.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/redis/RedisService.java
@@ -410,15 +410,14 @@
      */
     public void decreOnlineUser(String currentLoggedUserKey) {
         // 妫�鏌ュ綋鍓嶅湪绾跨敤鎴锋暟
-        String currentLoggedUser = (String)redisTemplate.opsForValue().get(currentLoggedUserKey);
+        Integer currentLoggedUser = (Integer)redisTemplate.opsForValue().get(currentLoggedUserKey);
 
         if (currentLoggedUser != null) {
-            Long currentCount = Long.parseLong((String)redisTemplate.opsForValue().get(currentLoggedUserKey));
+            Integer currentCount = Integer.parseInt(redisTemplate.opsForValue().get(currentLoggedUserKey)+"");
             if(currentCount > 0){
-
+                // 鑷噺鍦ㄧ嚎鐢ㄦ埛鏁�
+                redisTemplate.opsForValue().decrement(currentLoggedUserKey);
             }
-            // 鑷噺鍦ㄧ嚎鐢ㄦ埛鏁�
-            redisTemplate.opsForValue().decrement(currentLoggedUserKey);
         }
     }
 
@@ -428,7 +427,7 @@
      * @return
      */
     public long getCurrentOnlineUserCount(String currentLoggedUserKey) {
-        return Long.parseLong(redisTemplate.opsForValue().get(currentLoggedUserKey).toString());
+        return Long.parseLong(redisTemplate.opsForValue().get(currentLoggedUserKey)+"");
     }
 
     /**
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/UIManagerController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/UIManagerController.java
index f3707d7..ce4cb2d 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/UIManagerController.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/UIManagerController.java
@@ -9,6 +9,7 @@
 import com.vci.pagemodel.PLDefinationVO;
 import com.vci.pagemodel.PLTabButtonVO;
 import com.vci.pagemodel.PLUILayoutCloneVO;
+import com.vci.pagemodel.UICloneVO;
 import com.vci.starter.web.annotation.log.VciBusinessLog;
 import com.vci.starter.web.exception.VciBaseException;
 import com.vci.starter.web.pagemodel.BaseQueryObject;
@@ -517,7 +518,7 @@
      * @param tabButtonVO
      * @return 淇濆瓨缁撴灉
      */
-    @PostMapping("/addTapButton")
+    @PostMapping("/addTabButton")
     public BaseResult addTabButton(@RequestBody PLTabButtonVO tabButtonVO){
         try {
             return uiManagerService.addTabButton(tabButtonVO);
@@ -534,7 +535,7 @@
      * @param  tabButtonVO
      * @return 淇敼缁撴灉
      */
-    @PutMapping("/updateTapbutton")
+    @PutMapping("/updateTabbutton")
     public BaseResult updateTabButton(@RequestBody PLTabButtonVO tabButtonVO){
         try {
             return uiManagerService.updateTabButton(tabButtonVO);
@@ -551,7 +552,7 @@
      * @param tabButtonVO
      * @return
      */
-    @DeleteMapping("/deleteTapButton")
+    @DeleteMapping("/deleteTabButton")
     public BaseResult deleteTabButton(@RequestBody PLTabButtonVO tabButtonVO){
         try {
             return uiManagerService.deleteTabButton(tabButtonVO) ? BaseResult.success("鍒犻櫎鍗曚釜鎸夐挳閰嶇疆鎴愬姛锛�"):BaseResult.fail("鍒犻櫎鍗曚釜鎸夐挳閰嶇疆澶辫触锛�");
@@ -650,4 +651,58 @@
         }
     }
 
+    /**
+     * 鍏嬮殕椤电
+     * @param uiCloneVO
+     * @return
+     * @throws Throwable
+     */
+    @PostMapping("/clonetabPage")
+    public BaseResult clonetabPage(@RequestBody UICloneVO uiCloneVO){
+        try {
+            return uiManagerService.clonetabPage(uiCloneVO);
+        } catch (Throwable e) {
+            e.printStackTrace();
+            String exceptionMessage = "鍏嬮殕椤电鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 鍏嬮殕椤甸潰瀹氫箟
+     * @param uiCloneVO
+     * @return
+     * @throws Throwable
+     */
+    @PostMapping("/clonePageDef")
+    public BaseResult clonePageDef(@RequestBody UICloneVO uiCloneVO){
+        try {
+            return uiManagerService.clonePageDef(uiCloneVO);
+        } catch (Throwable e) {
+            e.printStackTrace();
+            String exceptionMessage = "鍏嬮殕椤甸潰瀹氫箟鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 鍏嬮殕鎸夐挳
+     * @param uiCloneVO
+     * @return
+     * @throws Throwable
+     */
+    @PostMapping("/cloneTabButton")
+    public BaseResult cloneTabButton(@RequestBody UICloneVO uiCloneVO){
+        try {
+            return uiManagerService.cloneTabButton(uiCloneVO);
+        } catch (Throwable e) {
+            e.printStackTrace();
+            String exceptionMessage = "鍏嬮殕鎸夐挳閰嶇疆鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
 }
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 1ffa2b2..dd92d2d 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
@@ -44,6 +44,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 import java.util.regex.Pattern;
+import java.util.stream.Stream;
 
 /**
  * UI瀹氫箟鏈嶅姟鐣岄潰鐩稿叧鎺ュ彛
@@ -1230,15 +1231,17 @@
             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 plTabButtonVOList;
+            return returnButtonVOList;
         } catch (Exception e) {
             e.printStackTrace();
             throw new VciBaseException("鍔犺浇椤电鍖哄煙鎸夐挳閰嶇疆淇℃伅寮傚父锛�" + e.getMessage());
@@ -1329,7 +1332,7 @@
                 continue;
             }
             if(plTabButtonVO.getParentOid().equals(plOid)){
-                plTabButtonVO.setChildren(plTabButtonVO2Children(plTabButtonVOList,plOid));
+                plTabButtonVO.setChildren(plTabButtonVO2Children(plTabButtonVOList,plTabButtonVO.getOId()));
                 plTabButtonVOS.add(plTabButtonVO);
             }
         }
@@ -1524,7 +1527,7 @@
         if(success == false) {
             return BaseResult.fail("淇敼澶辫触锛�");
         }
-        return BaseResult.fail("淇敼鎴愬姛锛�");
+        return BaseResult.success("淇敼鎴愬姛锛�");
     }
 
     /**
@@ -2359,9 +2362,13 @@
      */
     public DataGrid<BizType> getBtmDatasByPage(BaseQueryObject baseQueryObject) throws PLException{
         BizType[] btmNames = null;
-        int start = baseQueryObject.getPage() <= 1 ? 1 : (baseQueryObject.getPage() - 1) * baseQueryObject.getLimit() + 1;
-        int end = baseQueryObject.getPage() <= 1 ? baseQueryObject.getLimit() : (baseQueryObject.getPage() * baseQueryObject.getLimit());
-
+        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 = "";
@@ -2376,11 +2383,17 @@
 
         String fromWhere = String.format(" from plbtmtype bt where %s ", where);
         String fromWhereOrderBy = String.format(" %s order by bt.name", fromWhere);
-        String 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);
+        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){
@@ -2453,11 +2466,12 @@
      */
     public DataGrid<PLUILayout> getUILayoutDatasByPage(BaseQueryObject baseQueryObject) throws PLException{
         PLUILayout[] datas = null;
-        int start = baseQueryObject.getPage() <= 1 ? 1 : (baseQueryObject.getPage() - 1) * baseQueryObject.getLimit() + 1;
-        int end = baseQueryObject.getPage() <= 1 ? baseQueryObject.getLimit() : (baseQueryObject.getPage() * baseQueryObject.getLimit());
+        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)){
             //閫夋嫨鐨勫璞$被鍨�
@@ -2473,11 +2487,16 @@
         }
         String fromWhere = String.format(" from PLUILAYOUT ui where %s ", where);
         String fromWhereOrderBy = String.format(" %s order by ui.plname", fromWhere);
-        String 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);
+        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){
@@ -2506,8 +2525,11 @@
      */
     public DataGrid<PortalVI> getPortalVIDatasByPage(BaseQueryObject baseQueryObject) throws PLException{
         PortalVI[] datas = null;
-        int start = baseQueryObject.getPage() <= 1 ? 1 : (baseQueryObject.getPage() - 1) * baseQueryObject.getLimit() + 1;
-        int end = baseQueryObject.getPage() <= 1 ? baseQueryObject.getLimit() : (baseQueryObject.getPage() * baseQueryObject.getLimit());
+
+        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 ";
 
@@ -2530,11 +2552,16 @@
 
         String fromWhere = String.format(" from plportalvi vi where %s ", where);
         String fromWhereOrderBy = String.format(" %s order by vi.viname", fromWhere);
-        String 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);
+        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){
@@ -2563,8 +2590,11 @@
      */
     public DataGrid<QTInfo> getQTInfoDatasByPage(BaseQueryObject baseQueryObject) throws PLException{
         QTInfo[] datas = null;
-        int start = baseQueryObject.getPage() <= 1 ? 1 : (baseQueryObject.getPage() - 1) * baseQueryObject.getLimit() + 1;
-        int end = baseQueryObject.getPage() <= 1 ? baseQueryObject.getLimit() : (baseQueryObject.getPage() * baseQueryObject.getLimit());
+
+        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 ";
 
@@ -2584,11 +2614,16 @@
 
         String fromWhere = String.format(" from PL_QTEMPLATE qt where %s ", where);
         String fromWhereOrderBy = String.format(" %s order by qt.qtname ", fromWhere);
-        String 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);
+        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){
@@ -2660,6 +2695,217 @@
     }
 
     /**
+     * 鍏嬮殕椤电
+     * @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);
+        if(Func.isEmpty(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灞炴��
+        if(Func.isEmpty(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
@@ -2667,24 +2913,24 @@
      */
     @Override
     public BaseResult cloneTabButton(UICloneVO uiCloneVO) throws Throwable {
-        VciBaseUtil.alertNotNull(uiCloneVO,"鍏嬮殕瀵硅薄",uiCloneVO.getSourceOId(),"婧愬璞′富閿�");
-        String fromOId = uiCloneVO.getSourceOId();
+        VciBaseUtil.alertNotNull(uiCloneVO,"鍏嬮殕瀵硅薄",uiCloneVO.getFromOId(),"婧愬叧鑱斿璞′富閿�");
+        String fromOId = uiCloneVO.getFromOId();
         String toOId = uiCloneVO.getToOId();
         //鍏堟煡璇㈡簮瀵硅薄
         //PLTabButton tabButton = platformClientUtil.getUIService().getPLTabButtonById(fromOId);
-        String sourceTableOId = uiCloneVO.getCloneParam().get("sourceTableOId");
-        if(Func.isBlank(sourceTableOId)){
-            return BaseResult.fail("鏈粠璇锋眰鍙傛暟涓幏鍙栧埌锛屾簮瀵硅薄鍏宠仈鐨勯〉闈㈠畾涔変富閿紒锛�");
+        String sourceOId = uiCloneVO.getCloneParam().get("sourceOId");
+        if(Func.isBlank(sourceOId)){
+            return BaseResult.fail("鏈粠璇锋眰鍙傛暟涓幏鍙栧埌锛屾簮瀵硅薄涓婚敭锛侊紒");
         }
         //鍒ゆ柇鏄惁鏈夌洰鏍囦富閿紝濡傛灉娌℃湁灏辫鏄庢槸鍏嬮殕鍒板綋鍓嶉〉闈笅
         if(Func.isBlank(toOId)){
-            toOId = sourceTableOId;
+            toOId = fromOId;
         }
         //鍒ゆ柇鍓嶇鏄惁浼犱簡鍏嬮殕鍚嶈繃鏉ワ紙鎸夐挳杩欒竟涓嶉渶瑕佸悕绉般�佺紪鍙峰垽閲嶏紝鎵�浠ヨ繖涓�鍧楀効閫昏緫蹇界暐锛�
         //鎸夐挳鍏锋湁鐖跺瓙绾у叧绯伙紝鎵�浠ヨ繕闇�瑕佸仛oid鍜宲arentOId澶勭悊
-        List<PLTabButtonVO> tabButtons = this.getTabButtons(sourceTableOId);
+        List<PLTabButtonVO> tabButtons = this.getTabButtons(fromOId);//TODO:杩欏効娑夊強鍒拌浆VO鎿嶄綔鍜屽瓙鎸夐挳鏌ヨ鐨勬搷浣滄墍浠ュ緢鎱�
         PLTabButtonVO filterTabButton = tabButtons.stream()
-                .filter(item -> item.getOId().equals(fromOId)).findFirst().orElse(null);
+                .filter(item -> item.getOId().equals(sourceOId)).findFirst().orElse(null);
         if(Func.isEmpty(filterTabButton)){
             return BaseResult.fail("鏍规嵁婧愬璞′富閿湭鏌ヨ鍒版簮瀵硅薄锛岃鍒锋柊鍚庨噸璇曪紒锛�");
         }
@@ -2693,17 +2939,19 @@
         }
 
         //鏀瑰彉button瀵硅薄鐨刼id鍜宲arentOId
-        this.modifyButtonIdsAndCopy(filterTabButton,toOId,ObjectUtility.getNewObjectID36());
+        this.modifyButtonOIdsAndCopy(filterTabButton,toOId,ObjectUtility.getNewObjectID36());
 
         return BaseResult.success("鎸夐挳澶嶅埗鎴愬姛锛�");
     }
 
     /**
      * 淇敼oId鍜宲arentOid锛屼笉鏀瑰彉鐖跺瓙绾э紙oid鍙樻崲parentOId涔熼渶瑕佽窡鐫�鍙樻崲锛夌粨鏋勶紝骞朵繚瀛樻寜閽拰鍏跺弬鏁�
-     * @param button
-     * @param newOId
+     * @param button 闇�瑕佷慨鏀逛富閿繚瀛樼殑鎸夐挳瀵硅薄
+     * @param toOId 鎸夐挳鍏宠仈鐨勯〉闈㈠畾涔塷id
+     * @param newOId 鏂扮殑鎸夐挳瀵硅薄涓婚敭
+     * @throws PLException
      */
-    private void modifyButtonIdsAndCopy(PLTabButtonVO button,String toOId, String newOId) throws PLException {
+    private void modifyButtonOIdsAndCopy(PLTabButtonVO button,String toOId, String newOId) throws PLException {
         if (button == null) {
             return;
         }
@@ -2724,34 +2972,11 @@
         // 閫掑綊閬嶅巻瀛愯妭鐐�
         if (button.getChildren() != null) {
             for (PLTabButtonVO child : button.getChildren()) {
-
                 // 瀛愬璞$殑 parentOid 璁剧疆涓哄綋鍓嶈妭鐐圭殑鏂皁id
-                modifyButtonIdsAndCopy(child,toOId, ObjectUtility.getNewObjectID36());
                 child.setParentOid(button.getOId());  // 纭繚瀛愬璞$殑parentOid鎸囧悜褰撳墠鐨刼id
+                modifyButtonOIdsAndCopy(child,toOId, ObjectUtility.getNewObjectID36());
             }
         }
-    }
-
-    /**
-     * 鍏嬮殕椤电
-     * @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;
     }
 
     /**
@@ -2772,7 +2997,7 @@
                 tabTree.setParentId(uiLayoutOid);
                 if(!level.equalsIgnoreCase("tab")){
                     try {
-                        tabTree.setChildren(this.getPageDefChildren(tabPage.plOId,level));
+                        tabTree.setChildren(this.getPageDefChildren(tabPage.plOId));
                     } catch (PLException e) {
                         e.printStackTrace();
                         String exceptionMessage = "鏌ヨ椤甸潰瀹氫箟鏃跺嚭鐜伴敊璇細"+VciBaseUtil.getExceptionMessage(e);
@@ -2790,7 +3015,7 @@
      * 鑾峰彇椤甸潰瀹氫箟杩欎竴灞傜殑鍏宠仈鏁版嵁
      * @return
      */
-    private List<Tree> getPageDefChildren(String tabPageOid,String level) throws PLException {
+    private List<Tree> getPageDefChildren(String tabPageOid) throws PLException {
         List<Tree> pageDefChildren = new ArrayList<>();
         if(Func.isNotBlank(tabPageOid)){
             PLPageDefination[] pageDefs = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(tabPageOid);

--
Gitblit v1.9.3