From 8bb85606a294d2c6d2d4840d42a62744d7ef909b Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期五, 27 九月 2024 09:51:54 +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/RedisConfig.java                           |    2 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmSessionForLoginImpl.java       |    2 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIManagerServiceI.java                                |   35 +
 Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/index.vue                                                        |   68 +
 Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/index.vue                                    |    2 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/HMSysModConfigController.java                      |   16 
 Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/queryDefine/index.vue                                          |    2 
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSecurityInterceptor.java          |   16 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java                            |   10 
 Source/plt-web/plt-web-parent/plt-web/src/main/resources/properties/ice.properties                                            |    3 
 Source/plt-web/plt-web-ui/src/views/systemModel/systemMonitor/index.vue                                                       |   23 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LogBasicController.java                            |  127 +++
 Source/plt-web/plt-web-parent/plt-web-base/pom.xml                                                                            |   17 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogPeriodInfoDTO.java                                     |   26 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogQueryCriteriaDTO.java                                  |   36 +
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/redis/FastJson2JsonRedisSerializer.java          |    2 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PLTabButtonVO.java                                  |    4 
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/redis/RedisService.java                          |   57 +
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/Tree.java                              |   19 
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/constant/VConstant.java                          |    5 
 Source/plt-web/plt-web-parent/plt-web/pom.xml                                                                                 |   17 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsActionServiceImpl.java                         |    1 
 Source/plt-web/plt-web-ui/src/api/systemModel/systemConfig/api.js                                                             |    8 
 Source/plt-web/plt-web-ui/src/views/wel/index.vue                                                                             |    6 
 Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/index.vue                                        |    2 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java                            |  615 ++++++++++---------
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmHMSysModConfigServiceI.java         |    6 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/PlatformClientUtil.java                                  |    2 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/UIManagerController.java                           |   78 ++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmHMSysModConfigServiceImpl.java |   22 
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciLogAfterInterceptor.java          |    2 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/LogBasicServiceI.java                                 |   42 +
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java                        |  220 ++++++
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogInfoDTO.java                                           |   34 +
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LogBasicServiceImpl.java                         |  390 ++++++++++++
 35 files changed, 1,559 insertions(+), 358 deletions(-)

diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogInfoDTO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogInfoDTO.java
new file mode 100644
index 0000000..7b432ad
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogInfoDTO.java
@@ -0,0 +1,34 @@
+package com.vci.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 鏃ュ織浼犺緭瀵硅薄
+ * @author yuxc
+ * @date 2024-09-18
+ */
+@Data
+public class LogInfoDTO implements Serializable {
+
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 2492852474710986720L;
+    private String puid;
+    private String username;
+    private String truename;
+    private String userIp;
+    private String result;
+    private String content;
+    private String date;
+    private String type;
+    private String moduleName;
+    private String entityDesc;
+    private String property;
+    private String previousVal;
+    private String newVal;
+    private String logType;
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogPeriodInfoDTO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogPeriodInfoDTO.java
new file mode 100644
index 0000000..606e6a5
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogPeriodInfoDTO.java
@@ -0,0 +1,26 @@
+package com.vci.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 淇濆瓨鏈熼檺浼犺緭瀵硅薄
+ * @author yuxc
+ * @date 2024-09-11
+ */
+@Data
+public class LogPeriodInfoDTO implements Serializable {
+
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 2492852474710986720L;
+    //缂栫爜
+    public String code;
+    //鍊�
+    public String value;
+    //鏄惁閫変腑
+    public boolean choose;
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogQueryCriteriaDTO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogQueryCriteriaDTO.java
new file mode 100644
index 0000000..1e26832
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogQueryCriteriaDTO.java
@@ -0,0 +1,36 @@
+package com.vci.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 鏃ュ織鏌ヨ浼犺緭瀵硅薄
+ * @author yuxc
+ * @date 2024-09-18
+ */
+@Data
+public class LogQueryCriteriaDTO implements Serializable {
+
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 2492852474710986720L;
+    //寮�濮嬫椂闂�
+    private String startDate;
+    //缁撴潫鏃ユ湡
+    private String endDate;
+    //鏃ュ織绫诲瀷锛�1锛氱櫥褰曪紱2锛氱櫥鍑猴紱3锛氭巿鏉冿紱4锛氫竴鑸搷浣滐紱5锛氶泦鎴愬簲鐢�
+    int logType;
+    //鐢ㄦ埛IP
+    String ipText;
+    //鎿嶄綔鐢ㄦ埛
+    String userName;
+    //鎿嶄綔绫诲瀷
+    String typeText;
+    //椤电爜
+    int pageNo;
+    //椤甸潰鏉℃暟
+    int pageSize;
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PLTabButtonVO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PLTabButtonVO.java
index 8480dbe..9e69eaa 100644
--- a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PLTabButtonVO.java
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PLTabButtonVO.java
@@ -76,7 +76,7 @@
     private List<PLTabButtonVO> children;
 
     /**
-     * 鏄惁鏄剧ず
+     * 鏄剧ず鏂瑰紡
      */
     private String displayMode;
 
@@ -91,7 +91,7 @@
     private String authorization;
 
     /**
-     * 鏄剧ず鏂瑰紡
+     * 鏄惁鏄剧ず
      */
     private String show;
 
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/pom.xml b/Source/plt-web/plt-web-parent/plt-web-base/pom.xml
index f07c7fa..880a7ba 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/pom.xml
+++ b/Source/plt-web/plt-web-parent/plt-web-base/pom.xml
@@ -73,6 +73,23 @@
             <artifactId>icegridgui</artifactId>
             <version>1.0.RELEASE</version>
         </dependency>
+        <!--redis start-->
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-redis</artifactId>
+            <version>2.1.5.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>redis.clients</groupId>
+            <artifactId>jedis</artifactId>
+            <version>2.9.0</version>
+        </dependency>
+        <!--redis end-->
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-core</artifactId>
+            <version>2.13.3</version>
+        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/constant/VConstant.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/constant/VConstant.java
index e9c2ddd..5dff82d 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/constant/VConstant.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/constant/VConstant.java
@@ -82,6 +82,11 @@
     public static final String SYS_ENUM_KEY = "sys_enum:";
 
     /**
+     * 褰撳墠鐧诲綍鐨勭敤鎴锋�绘暟cache key
+     */
+    public static final String CURRENT_LOGGED_USERS_KEY = "current_logged_users";
+
+    /**
      * 璧勬簮鏄犲皠璺緞 鍓嶇紑
      */
     public static final String RESOURCE_PREFIX = "/profile";
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciLogAfterInterceptor.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciLogAfterInterceptor.java
index 334d0a2..cbde7da 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciLogAfterInterceptor.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciLogAfterInterceptor.java
@@ -1,8 +1,6 @@
 package com.vci.starter.web.interceptor;
 
 import com.vci.starter.web.constant.TokenKeyConstant;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.util.WebThreadLocalUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSecurityInterceptor.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSecurityInterceptor.java
index 9679f27..68ef18a 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSecurityInterceptor.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSecurityInterceptor.java
@@ -4,9 +4,11 @@
 import com.vci.starter.web.annotation.controller.VciUnCheckRight;
 import com.vci.starter.web.autoconfigure.SpringMVCConfig;
 import com.vci.starter.web.constant.TokenKeyConstant;
+import com.vci.starter.web.constant.VConstant;
 import com.vci.starter.web.enumpck.ResultCodeEnum;
 import com.vci.starter.web.pagemodel.BaseResult;
 import com.vci.starter.web.pagemodel.SessionInfo;
+import com.vci.starter.web.redis.RedisService;
 import com.vci.starter.web.util.ApplicationContextProvider;
 import com.vci.starter.web.util.LangBaseUtil;
 import com.vci.starter.web.util.VciBaseUtil;
@@ -15,15 +17,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.method.HandlerMethod;
 import org.springframework.web.servlet.HandlerInterceptor;
 
-import javax.annotation.Resource;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -56,6 +54,9 @@
     @Autowired
     private VciSessionForLoginI vciSessionForLoginI;
 
+    @Autowired
+    private RedisService redisService;
+
     /**
      * 鎵ц鎷︽埅
      * @param request 璇锋眰瀵硅薄
@@ -76,7 +77,7 @@
         if(StringUtils.isBlank(userToken)){
             userToken = request.getParameter(TokenKeyConstant.USER_TOKEN_KEY);
         }
-        if(!(handler instanceof  HandlerMethod)){
+        if(!(handler instanceof HandlerMethod)){
             return true;
         }
 
@@ -127,6 +128,11 @@
                 if(logger.isErrorEnabled()) {
                     logger.error("token鍊奸潪娉曪紝鎴栬繃鏈燂紝鎴栬�呯敤鎴峰凡缁忚韪笅绾�," + userToken);
                 }
+                //鍒犻櫎缂撳瓨涓粺璁$殑鐢ㄦ埛淇℃伅
+                if(redisService == null){
+                    redisService = ApplicationContextProvider.getBean(RedisService.class);
+                }
+                redisService.decreOnlineUser(VConstant.CURRENT_LOGGED_USERS_KEY);
                 sendErrorMsg(response,"token鍊奸潪娉曪紝鎴栬繃鏈燂紝鎴栬�呯敤鎴峰凡缁忚韪笅绾�," + userToken,1);
                 return false;
             }else{
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/Tree.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/Tree.java
index 809dc3b..19d6de9 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/Tree.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/Tree.java
@@ -58,6 +58,10 @@
 	 */
 	private String text;
 	/**
+	 * 缂栧彿
+	 */
+	private String id;
+	/**
 	 * 鏄惁鍙跺瓙
 	 */
 	private boolean leaf = false;
@@ -158,6 +162,21 @@
 	}
 
 	/**
+	 * 璁剧疆缂栧彿
+	 * @param id
+	 */
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	/**
+	 * 鑾峰彇缂栧彿
+	 */
+	public String getId() {
+		return id;
+	}
+
+	/**
 	 * 鏄惁鍙跺瓙鑺傜偣
 	 * @return true 琛ㄧず鍙跺瓙鑺傜偣
 	 */
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/FastJson2JsonRedisSerializer.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/redis/FastJson2JsonRedisSerializer.java
similarity index 97%
rename from Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/FastJson2JsonRedisSerializer.java
rename to Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/redis/FastJson2JsonRedisSerializer.java
index 2112c43..e48ac8a 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/FastJson2JsonRedisSerializer.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/redis/FastJson2JsonRedisSerializer.java
@@ -1,4 +1,4 @@
-package com.vci.web.redis;
+package com.vci.starter.web.redis;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.serializer.SerializerFeature;
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/RedisConfig.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/redis/RedisConfig.java
similarity index 98%
rename from Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/RedisConfig.java
rename to Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/redis/RedisConfig.java
index 7e64afc..d2375b7 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/RedisConfig.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/redis/RedisConfig.java
@@ -1,4 +1,4 @@
-package com.vci.web.redis;
+package com.vci.starter.web.redis;
 
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.cache.annotation.CachingConfigurerSupport;
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/RedisService.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/redis/RedisService.java
similarity index 88%
rename from Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/RedisService.java
rename to Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/redis/RedisService.java
index ed55283..b795342 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/RedisService.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/redis/RedisService.java
@@ -1,4 +1,4 @@
-package com.vci.web.redis;
+package com.vci.starter.web.redis;
 
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -11,6 +11,7 @@
 import org.springframework.data.redis.serializer.RedisSerializer;
 import org.springframework.data.redis.serializer.StringRedisSerializer;
 import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
 
 import java.io.IOException;
 import java.util.*;
@@ -21,10 +22,9 @@
  * @author dangsn
  **/
 @SuppressWarnings(value = { "unchecked", "rawtypes" })
-@Component
+@Service
 @Slf4j
-public class RedisService
-{
+public class RedisService {
     @Autowired(required = false)
     public RedisTemplate redisTemplate;
 
@@ -390,6 +390,55 @@
         return new ArrayList<>();
     }
 
+    /**
+     * 鐢ㄦ埛鐧诲綍
+     * @param currentLoggedUserKey
+     */
+    public void increOnlineUser(String currentLoggedUserKey) {
+        // 妫�鏌ラ敭鏄惁瀛樺湪
+        if (!redisTemplate.hasKey(currentLoggedUserKey)) {
+            // 濡傛灉閿笉瀛樺湪锛屽垵濮嬪寲涓�0
+            redisTemplate.opsForValue().set(currentLoggedUserKey, 0);
+        }
+        // 鑷鍦ㄧ嚎鐢ㄦ埛鏁�
+        redisTemplate.opsForValue().increment(currentLoggedUserKey);
+    }
+
+    /**
+     * 鐢ㄦ埛鐧诲嚭
+     * @param currentLoggedUserKey
+     */
+    public void decreOnlineUser(String currentLoggedUserKey) {
+        // 妫�鏌ュ綋鍓嶅湪绾跨敤鎴锋暟
+        String currentLoggedUser = (String)redisTemplate.opsForValue().get(currentLoggedUserKey);
+
+        if (currentLoggedUser != null) {
+            Long currentCount = Long.parseLong((String)redisTemplate.opsForValue().get(currentLoggedUserKey));
+            if(currentCount > 0){
+
+            }
+            // 鑷噺鍦ㄧ嚎鐢ㄦ埛鏁�
+            redisTemplate.opsForValue().decrement(currentLoggedUserKey);
+        }
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛鎬讳汉鏁�
+     * @param currentLoggedUserKey
+     * @return
+     */
+    public long getCurrentOnlineUserCount(String currentLoggedUserKey) {
+        return Long.parseLong(redisTemplate.opsForValue().get(currentLoggedUserKey).toString());
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛鐨勭敤鎴峰悕鍒楄〃
+     * @param currentLoggedUserKey
+     * @return
+     */
+    public Set<String> getCurrentLoggedUsers(String currentLoggedUserKey) {
+        return redisTemplate.opsForSet().members(currentLoggedUserKey);
+    }
 
     /**
      * 鍩轰簬Lua鑴氭湰瀹炵幇鍘熷瓙鏌ヨ骞跺垹闄�
diff --git a/Source/plt-web/plt-web-parent/plt-web/pom.xml b/Source/plt-web/plt-web-parent/plt-web/pom.xml
index 039b4d9..a35b80a 100644
--- a/Source/plt-web/plt-web-parent/plt-web/pom.xml
+++ b/Source/plt-web/plt-web-parent/plt-web/pom.xml
@@ -106,23 +106,6 @@
             <version>0.9.11</version>
         </dependency>
 
-        <!--redis start-->
-        <dependency>
-            <groupId>org.springframework.data</groupId>
-            <artifactId>spring-data-redis</artifactId>
-            <version>2.1.5.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>redis.clients</groupId>
-            <artifactId>jedis</artifactId>
-            <version>2.9.0</version>
-        </dependency>
-        <!--redis end-->
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-core</artifactId>
-            <version>2.13.3</version>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmHMSysModConfigServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmHMSysModConfigServiceI.java
index e4e47af..0ace3d0 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmHMSysModConfigServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmHMSysModConfigServiceI.java
@@ -158,4 +158,10 @@
      */
     String exportSysConf(ExpExcelConditionVO expExcelConditionVO, HttpServletResponse response) throws IOException;
 
+    /**
+     * 鑾峰彇褰撳墠鍦ㄧ嚎浜烘暟
+     * @return
+     */
+    long getOnlineUsersNum();
+
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmHMSysModConfigServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmHMSysModConfigServiceImpl.java
index bd566c1..897ed4a 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmHMSysModConfigServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmHMSysModConfigServiceImpl.java
@@ -12,12 +12,14 @@
 import com.vci.starter.poi.bo.WriteExcelData;
 import com.vci.starter.poi.bo.WriteExcelOption;
 import com.vci.starter.poi.util.ExcelUtil;
+import com.vci.starter.web.constant.VConstant;
 import com.vci.starter.web.exception.VciBaseException;
 import com.vci.starter.web.pagemodel.BaseResult;
 import com.vci.starter.web.pagemodel.SessionInfo;
 import com.vci.starter.web.util.LocalFileUtil;
 import com.vci.starter.web.util.VciBaseUtil;
 import com.vci.starter.web.util.WebThreadLocalUtil;
+import com.vci.starter.web.redis.RedisService;
 import com.vci.web.util.Func;
 import com.vci.web.util.PlatformClientUtil;
 import org.slf4j.Logger;
@@ -45,13 +47,22 @@
 
     private int count = 0;
 
+    /**
+     * 鍖呭惈淇濆瓨妯″潡鏂规硶绛夋搷浣滅被
+     */
     private static FunctionOperateDelegate foDelegate;
 
+    /**
+     * 鍒濆鍖杅oDelegate
+     */
     {
         if(Func.isEmpty(foDelegate)){
             foDelegate = new FunctionOperateDelegate();
         }
     }
+
+    @Autowired
+    private RedisService redisService;
 
     /**
      * 鏃ュ織
@@ -770,6 +781,16 @@
         WriteExcelOption excelOption = new WriteExcelOption(excelDataList);
         ExcelUtil.writeDataToFile(excelPath, excelOption);
         return excelPath;
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鍦ㄧ嚎浜烘暟
+     * @return
+     */
+    @Override
+    public long getOnlineUsersNum() {
+        long currentLoggedUserCount = redisService.getCurrentOnlineUserCount(VConstant.CURRENT_LOGGED_USERS_KEY);
+        return currentLoggedUserCount;
     }
 
     /**
@@ -1585,6 +1606,5 @@
         }
 
     }
-
 
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmSessionForLoginImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmSessionForLoginImpl.java
index 8896f69..34f1d9a 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmSessionForLoginImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmSessionForLoginImpl.java
@@ -13,7 +13,7 @@
 import com.vci.starter.web.util.*;
 import com.vci.constant.CacheNameConstant;
 import com.vci.web.properties.WebProperties;
-import com.vci.web.redis.RedisService;
+import com.vci.starter.web.redis.RedisService;
 import com.vci.web.service.WebBoServiceI;
 import com.vci.web.util.PlatformClientUtil;
 import com.vci.web.util.WebUtil;
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/HMSysModConfigController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/HMSysModConfigController.java
index 98b5e18..0651684 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/HMSysModConfigController.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/HMSysModConfigController.java
@@ -506,4 +506,20 @@
         }
     }
 
+    /**
+     * 鑾峰彇褰撳墠鐢ㄦ埛鍦ㄧ嚎浜烘暟
+     * @return
+     */
+    @GetMapping("/getOnlineUsersNum")
+    public BaseResult getOnlineUsersNum() {
+        try {
+            long onlineUsersNum = hmSysModConfigService.getOnlineUsersNum();
+            return BaseResult.success(onlineUsersNum);
+        } catch (Exception e) {
+            String errorMsg = "鑾峰彇褰撳墠鐢ㄦ埛鍦ㄧ嚎浜烘暟鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(errorMsg);
+            throw new VciBaseException(errorMsg);
+        }
+    }
+
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LogBasicController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LogBasicController.java
new file mode 100644
index 0000000..f16e2fc
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LogBasicController.java
@@ -0,0 +1,127 @@
+package com.vci.web.controller;
+import com.vci.corba.common.PLException;
+import com.vci.dto.LogQueryCriteriaDTO;
+import com.vci.starter.web.annotation.log.VciBusinessLog;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.service.LogBasicServiceI;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 骞冲彴鏃ュ織鎺у埗鍣�
+ * @author yuxc
+ * @date 2024-9-11
+ */
+@Controller
+@RequestMapping("/loginBasicController")
+@VciBusinessLog(modelName="鏃ュ織鏈嶅姟")
+public class LogBasicController {
+
+	/**
+	 * 鐧诲綍鏈嶅姟
+	 */
+	@Autowired
+	private LogBasicServiceI logBasicServiceI;
+
+	/**
+	 * 鏃ュ織
+	 */
+	private Logger logger = LoggerFactory.getLogger(getClass());
+
+	/**
+	 * 鑾峰彇鏃ユ湡淇濆瓨鏈熼檺涓嬫媺鍒楄〃妗�
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@VciBusinessLog(operateName="鏃ユ湡淇濆瓨鏈熼檺")
+	@GetMapping(value = "/getPeroid")
+	@ResponseBody
+	public BaseResult getPeroid(){
+		try {
+			return logBasicServiceI.getPeroid();
+		}catch (Exception e){
+			e.printStackTrace();
+			String errorMsg = "鏌ヨ鍑虹幇閿欒锛屽師鍥狅細"+ VciBaseUtil.getExceptionMessage(e);
+			logger.error(errorMsg);
+			throw new VciBaseException(errorMsg);
+		}
+	}
+
+	/**
+	 * 淇濆瓨鏈熼檺璁剧疆
+	 * period 鏈熼檺缂栫爜
+	 * @return 淇濆瓨缁撴灉
+	 */
+	@VciBusinessLog(operateName="淇濆瓨鏈熼檺璁剧疆")
+	@PostMapping(value = "/savePeriod")
+	@ResponseBody
+	public BaseResult savePeriod(String period){
+		try {
+			return logBasicServiceI.savePeriod(period);
+		}catch (Exception e){
+			e.printStackTrace();
+			String errorMsg = "淇濆瓨鍑虹幇閿欒锛屽師鍥狅細"+ VciBaseUtil.getExceptionMessage(e);
+			logger.error(errorMsg);
+			throw new VciBaseException(errorMsg);
+		}
+	}
+
+	/**
+	 * 鍒犻櫎鏃ュ織
+	 * period 鏈熼檺缂栫爜
+	 * @return 淇濆瓨缁撴灉
+	 */
+	@VciBusinessLog(operateName="鍒犻櫎鏃ュ織")
+	@DeleteMapping(value = "/deleteLog")
+	@ResponseBody
+	public BaseResult deleteLog(String deleteDate){
+		try {
+			return logBasicServiceI.deleteLog(deleteDate);
+		}catch (Exception e){
+			e.printStackTrace();
+			String errorMsg = "鍒犻櫎鍑虹幇閿欒锛屽師鍥狅細"+ VciBaseUtil.getExceptionMessage(e);
+			logger.error(errorMsg);
+			throw new VciBaseException(errorMsg);
+		}
+	}
+	/**
+	 * 鏌ヨ鏃ュ織
+	 * @param dto 鏌ヨ鏉′欢浼犺緭瀵硅薄
+	 * @return 鏌ヨ鏁版嵁
+	 * @throws PLException
+	 */
+	@VciBusinessLog(operateName="鏃ュ織鏌ヨ")
+	@GetMapping(value = "/getLogListByContion")
+	@ResponseBody
+	public BaseResult getLogListByContion(@RequestBody LogQueryCriteriaDTO dto){
+		try {
+			return logBasicServiceI.getLogListByContion(dto);
+		}catch (Exception e){
+			e.printStackTrace();
+			String errorMsg = "鏌ヨ鏃ュ織鍑虹幇閿欒锛屽師鍥狅細"+ VciBaseUtil.getExceptionMessage(e);
+			logger.error(errorMsg);
+			throw new VciBaseException(errorMsg);
+		}
+	}
+
+	/**
+	 * 鎿嶄綔鐢ㄦ埛鑾峰彇
+	 */
+	@VciBusinessLog(operateName="鑾峰彇鎿嶄綔鐢ㄦ埛")
+	@GetMapping(value = "/getOperatingUsers")
+	@ResponseBody
+	public BaseResult getOperatingUsers(){
+		try {
+			return logBasicServiceI.getOperatingUsers();
+		}catch (Exception e){
+			e.printStackTrace();
+			String errorMsg = "鏌ヨ鏃ュ織鍑虹幇閿欒锛屽師鍥狅細"+ VciBaseUtil.getExceptionMessage(e);
+			logger.error(errorMsg);
+			throw new VciBaseException(errorMsg);
+		}
+	}
+}
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 0e37319..547d42d 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
@@ -397,6 +397,84 @@
         }
     }
 
+
+    /**
+     * 涓氬姟绫诲瀷涓嬫媺鏌ヨ
+     * @param baseQueryObject selectBtmType 閫夋嫨鐨勬簮瀵硅薄,甯﹀垎椤典俊鎭�
+     * @return
+     * @throws PLException
+     */
+    @GetMapping( "/getBtmDatasByPage")
+    @VciBusinessLog(operateName = "涓氬姟绫诲瀷涓嬫媺鏌ヨ")
+    public BaseResult getBtmDatasByPage(BaseQueryObject baseQueryObject){
+        try {
+            return BaseResult.dataGrid(uiManagerService.getBtmDatasByPage(baseQueryObject));
+        }catch (Throwable e) {
+            e.printStackTrace();
+            String exceptionMessage = "涓氬姟绫诲瀷涓嬫媺鏌ヨ鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * UI瀹氫箟涓嬫媺鏌ヨ锛坱emplateType涓篣I瀹氫箟鏃剁殑閫夋嫨瀵硅薄涓嬫媺鏌ヨ锛�
+     * @param baseQueryObject selectBtmType 閫夋嫨鐨勬簮瀵硅薄,甯﹀垎椤典俊鎭�
+     * @return
+     * @throws PLException
+     */
+    @GetMapping( "/getUILayoutDatasByPage")
+    @VciBusinessLog(operateName = "UI瀹氫箟涓嬫媺鏌ヨ")
+    public BaseResult getUILayoutDatasByPage(BaseQueryObject baseQueryObject){
+        try {
+            return BaseResult.dataGrid(uiManagerService.getUILayoutDatasByPage(baseQueryObject));
+        }catch (Throwable e) {
+            e.printStackTrace();
+            String exceptionMessage = "UI瀹氫箟涓嬫媺鏌ヨ鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 閫夋嫨妯℃澘涓嬫媺鏌ヨ
+     * @param baseQueryObject
+     * @return
+     * @throws PLException
+     */
+    @GetMapping( "/getPortalVIDatasByPage")
+    @VciBusinessLog(operateName = "閫夋嫨妯℃澘涓嬫媺鏌ヨ")
+    public BaseResult getPortalVIDatasByPage(BaseQueryObject baseQueryObject){
+        try {
+            return BaseResult.dataGrid(uiManagerService.getPortalVIDatasByPage(baseQueryObject));
+        }catch (Throwable e) {
+            e.printStackTrace();
+            String exceptionMessage = "閫夋嫨妯℃澘涓嬫媺鏌ヨ鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 鏌ヨ妯℃澘涓嬫媺鏌ヨ
+     * @param baseQueryObject
+     * @return
+     * @throws PLException
+     */
+    @GetMapping( "/getQTInfoDatasByPage")
+    @VciBusinessLog(operateName = "鏌ヨ妯℃澘涓嬫媺鏌ヨ")
+    public BaseResult getQTInfoDatasByPage(BaseQueryObject baseQueryObject){
+        try {
+            return BaseResult.dataGrid(uiManagerService.getQTInfoDatasByPage(baseQueryObject));
+        }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/LogBasicServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/LogBasicServiceI.java
new file mode 100644
index 0000000..995a7ce
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/LogBasicServiceI.java
@@ -0,0 +1,42 @@
+package com.vci.web.service;
+
+import com.vci.corba.common.PLException;
+import com.vci.dto.LogQueryCriteriaDTO;
+import com.vci.starter.web.pagemodel.BaseResult;
+
+/**
+ * 骞冲彴鏃ュ織鏈嶅姟
+ * @author yuxc
+ * @date 2024-9-11
+ */
+public interface LogBasicServiceI {
+
+    /**
+     * 鑾峰彇鏃ユ湡淇濆瓨鏈熼檺涓嬫媺鍒楄〃妗�
+     * @return 鏌ヨ缁撴灉
+     */
+    BaseResult getPeroid() throws PLException;
+    /**
+     * 淇濆瓨鏈熼檺璁剧疆
+     * period 鏈熼檺缂栫爜
+     * @return 淇濆瓨缁撴灉
+     */
+    BaseResult savePeriod(String period) throws PLException;
+    /**
+     * 鍒犻櫎鏃ュ織
+     * period 鏈熼檺缂栫爜
+     * @return 淇濆瓨缁撴灉
+     */
+    BaseResult deleteLog(String deleteDate) throws PLException;
+    /**
+     * 鏌ヨ鏃ュ織
+     * @param dto 鏌ヨ鏉′欢浼犺緭瀵硅薄
+     * @return 鏌ヨ鏁版嵁
+     * @throws PLException
+     */
+    BaseResult getLogListByContion(LogQueryCriteriaDTO dto) throws PLException;
+    /**
+     * 鎿嶄綔鐢ㄦ埛鑾峰彇
+     */
+    BaseResult getOperatingUsers() throws PLException;
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIManagerServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIManagerServiceI.java
index 3f393ba..247e847 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIManagerServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIManagerServiceI.java
@@ -1,8 +1,11 @@
 package com.vci.web.service;
 
 import com.vci.corba.common.PLException;
+import com.vci.corba.omd.btm.BizType;
+import com.vci.corba.omd.qtm.QTInfo;
 import com.vci.corba.portal.data.PLUILayout;
 import com.vci.corba.portal.data.PLTabPage;
+import com.vci.corba.portal.data.PortalVI;
 import com.vci.pagemodel.PLTabButtonVO;
 import com.vci.pagemodel.PLUILayoutCloneVO;
 import com.vci.starter.web.exception.VciBaseException;
@@ -212,4 +215,36 @@
      */
     boolean authorizedUI(UIAuthorDTO uiAuthorDTO)throws Exception;
 
+    /**
+     * 涓氬姟绫诲瀷銆佹簮瀵硅薄绫诲瀷銆侀《灞傝妭鐐规樉绀虹被鍨嬬瓑閮借皟鐢ㄨ繖涓帴鍙f煡璇�
+     * @param baseQueryObject
+     * @return
+     * @throws PLException
+     */
+    DataGrid<BizType> getBtmDatasByPage(BaseQueryObject baseQueryObject) throws Throwable;
+
+    /**
+     * UI瀹氫箟涓嬫媺鏌ヨ锛坱emplateType涓篣I瀹氫箟鏃剁殑閫夋嫨瀵硅薄涓嬫媺鏌ヨ锛�
+     * @param baseQueryObject selectBtmType 閫夋嫨鐨勬簮瀵硅薄,甯﹀垎椤典俊鎭�
+     * @return
+     * @throws PLException
+     */
+    DataGrid<PLUILayout> getUILayoutDatasByPage(BaseQueryObject baseQueryObject)throws Throwable;
+
+    /**
+     * 閫夋嫨妯℃澘涓嬫媺鏌ヨ锛坱emplateType涓鸿〃鏍笺�佽〃鍗曘�佹爲琛ㄦ椂鐨勯�夋嫨瀵硅薄涓嬫媺鏌ヨ锛�
+     * @param baseQueryObject
+     * @return
+     * @throws PLException
+     */
+    DataGrid<PortalVI> getPortalVIDatasByPage(BaseQueryObject baseQueryObject) throws Throwable;
+
+    /**
+     * 鏌ヨ妯℃澘涓嬫媺鏌ヨ
+     * @param baseQueryObject
+     * @return
+     * @throws PLException
+     */
+    DataGrid<QTInfo> getQTInfoDatasByPage(BaseQueryObject baseQueryObject)throws Throwable;
+
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LogBasicServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LogBasicServiceImpl.java
new file mode 100644
index 0000000..2392826
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LogBasicServiceImpl.java
@@ -0,0 +1,390 @@
+package com.vci.web.service.impl;
+import com.vci.client.common.objects.UserObject;
+import com.vci.corba.common.PLException;
+import com.vci.corba.common.data.UserEntityInfo;
+import com.vci.corba.framework.data.UserInfo;
+import com.vci.corba.pllog.data.LogInfo;
+import com.vci.corba.pllog.data.LogPeriodInfo;
+import com.vci.corba.pllog.data.LogType;
+import com.vci.dto.LogInfoDTO;
+import com.vci.dto.LogPeriodInfoDTO;
+import com.vci.dto.LogQueryCriteriaDTO;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.web.service.*;
+import com.vci.web.util.*;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 涓氬姟绫诲瀷鏈嶅姟
+ * @author yuxc
+ * @date 2024-9-11
+ */
+@Service
+public class LogBasicServiceImpl implements LogBasicServiceI {
+
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 骞冲彴鐨勮皟鐢ㄥ伐鍏风被
+     */
+    @Autowired
+    private PlatformClientUtil platformClientUtil;
+    public static final String UTF8_BOM="\uFEFF";
+    private final String LOG_SAVE_PERIOD = "logSavePeriod";//鏃ュ織淇濆瓨鏈熼檺
+
+    /**
+     * 鑾峰彇鏃ユ湡淇濆瓨鏈熼檺涓嬫媺鍒楄〃妗�
+     * @return 鏌ヨ缁撴灉
+     */
+    @Override
+    public BaseResult getPeroid() throws PLException {
+        //鑾峰彇褰撳墠鏈熼檺璁剧疆
+        int curPeriod = platformClientUtil.getLogService().getCurPeriod();
+        LogPeriodInfo[] periods = platformClientUtil.getLogService().getPeriods();
+        List<LogPeriodInfoDTO> logDTOs = new ArrayList<>();
+        for (LogPeriodInfo period : periods) {
+            LogPeriodInfoDTO dto = new LogPeriodInfoDTO();
+            dto.setValue(period.value);
+            if(period.code.startsWith(UTF8_BOM)) {
+                period.code=period.code.substring(1);
+            }
+            if (Integer.valueOf(period.code) == curPeriod){
+                dto.setChoose(true);
+            }
+            dto.setCode(period.code);
+            logDTOs.add(dto);
+        }
+        return BaseResult.dataList(logDTOs);
+    }
+
+    /**
+     * 淇濆瓨鏈熼檺璁剧疆
+     * period 鏈熼檺缂栫爜
+     * @return 淇濆瓨缁撴灉
+     */
+    @Override
+    public BaseResult savePeriod(String period) throws PLException {
+        UserEntityInfo userEntityInfo = new UserEntityInfo();
+        userEntityInfo.setModules("com.vci.client.log.ui.LogBasicConfPanel");
+        userEntityInfo.setUserName(WebUtil.getCurrentUserId());
+        boolean b = platformClientUtil.getLogService().savePeriod(period, userEntityInfo);
+        if(!b){
+            return BaseResult.fail("淇濆瓨澶辫触锛�");
+        }
+        return BaseResult.success("淇濆瓨鎴愬姛锛�");
+    }
+
+    /**
+     * 鍒犻櫎鏃ュ織
+     * @param deleteDate 鍒犻櫎鐨勬棩鏈�
+     * @return 鍒犻櫎缁撴灉
+     * @throws PLException
+     */
+    @Override
+    public BaseResult deleteLog(String deleteDate) throws PLException {
+        if(StringUtils.isBlank(deleteDate)){
+            throw new PLException("500", new String[]{"鏃ユ湡涓嶈兘涓虹┖锛�"});
+        }
+        //鑾峰彇褰撳墠鏈熼檺璁剧疆
+        int curSavePeriod = platformClientUtil.getLogService().getCurPeriod();
+        int monthSpan = 1;
+        String monthLabel = "";
+        LogPeriodInfo[] periods = platformClientUtil.getLogService().getPeriods();
+        Map<String, String> periodMap = Arrays.stream(periods).collect(Collectors.toMap(e -> e.code, e -> e.value));
+
+
+        if(curSavePeriod <= 0){
+            // 鏈厤缃椂锛屽彧鑳藉垹闄�
+            monthLabel = periods[0].value;
+            monthSpan = Integer.valueOf(periods[0].code);
+        } else {
+            monthSpan = curSavePeriod;//鏈熼檺code
+            monthLabel = periodMap.get(String.valueOf(curSavePeriod));//鏈熼檺鏄剧ず鍊�
+        }
+        //妫�鏌ュ垹闄ら�昏緫
+        checkCanDelete(deleteDate, monthSpan, monthLabel);
+        boolean res = false;
+        res = platformClientUtil.getLogService().deleteLog(getDeleteDateString(deleteDate));//鍒犻櫎鏃ュ織
+        if(!res){
+            return BaseResult.fail("鍒犻櫎澶辫触锛�");
+        }
+        return BaseResult.success("鍒犻櫎鎴愬姛锛�");
+    }
+
+    /**
+     * 鏌ヨ鏃ュ織
+     * @param queryDto 鏌ヨ鏉′欢浼犺緭瀵硅薄
+     * @return 鏌ヨ鏁版嵁
+     * @throws PLException
+     */
+    @Override
+    public BaseResult getLogListByContion(LogQueryCriteriaDTO queryDto) throws PLException {
+        String querySql = getSQL(queryDto);
+        LogInfo[] logInfos = platformClientUtil.getLogService().getLogListByContion(queryDto.getPageNo(),queryDto.getPageSize(),querySql);
+        List<LogInfoDTO> dtos = new ArrayList<>();
+        for (LogInfo logInfo : logInfos) {
+            LogInfoDTO dto = new LogInfoDTO();
+            dto.setLogType(logInfo.logType);
+            dto.setDate(logInfo.date);
+            dto.setContent(logInfo.content);
+            dto.setPuid(logInfo.puid);
+            dto.setModuleName(logInfo.moduleName);
+            dto.setEntityDesc(logInfo.entityDesc);
+            dto.setResult(logInfo.result);
+            dto.setType(logInfo.type);
+            dto.setProperty(logInfo.property);
+            dto.setTruename(logInfo.truename);
+            dto.setNewVal(logInfo.newVal);
+            dto.setUserIp(logInfo.userIp);
+            dto.setUsername(logInfo.username);
+            dto.setPreviousVal(logInfo.previousVal);
+            dtos.add(dto);
+        }
+        long sumLogRows = platformClientUtil.getLogService().getSumLogRows(querySql);
+        BaseResult result = new BaseResult();
+        result.setSuccess(true);
+        result.setCode(200);
+        result.setData(dtos);
+        result.setTotal(sumLogRows);
+        return result;
+    }
+    /**
+     * 鎿嶄綔鐢ㄦ埛鑾峰彇
+     */
+    @Override
+    public BaseResult getOperatingUsers() throws PLException {
+        List<UserObject> users = new ArrayList<UserObject>();
+        if("secAdmin".equals(WebUtil.getCurrentUserId())){
+            users.addAll(getUsersByUserNames(Arrays.asList("auditAdmin")));
+            users.addAll(getUsersByUserNames(getUserNameByUserType(2)));
+        }
+        else if("auditAdmin".equals(WebUtil.getCurrentUserId())){
+            users.addAll(getUsersByUserNames(Arrays.asList("secAdmin", "sysAdmin")));
+        } else if("sysAdmin".equals(WebUtil.getCurrentUserId())){
+
+        }
+        return BaseResult.dataList(users);
+    }
+
+    /**
+     * 鑾峰彇鐢ㄦ埛淇℃伅
+     * @param userNames 鐢ㄦ埛鍚嶇О
+     * @return 鐢ㄦ埛淇℃伅
+     * @throws PLException
+     */
+    private List<UserObject> getUsersByUserNames(List<String> userNames) throws PLException {
+        List<UserObject> userList = new ArrayList<UserObject>();
+        for(String userName : userNames){
+            UserInfo userInfo = platformClientUtil.getFrameworkService().fetchUserInfoByName(userName);
+            UserObject user = new UserObject();
+            user.setId(userInfo.id);
+            user.setUserName(userInfo.userName);
+            user.setPwd(userInfo.pwd);
+            user.setEmail(userInfo.email);
+            user.setTrueName(userInfo.trueName);
+            user.setSpecialties(userInfo.specialties);
+            user.setDesc(userInfo.desc);
+            user.setUserType(userInfo.userType);
+            user.setStatus(userInfo.status);
+            user.setCreateTime(userInfo.createTime);
+            user.setCreateUser(userInfo.createUser);
+            user.setUpdateTime(userInfo.updateTime);
+            user.setUpdateUser(userInfo.updateUser);
+            user.setPwdUpdateTime(userInfo.pwdUpdateTime);
+            user.setGrantor(userInfo.grantor);
+            user.setSecretGrade(userInfo.secretGrade);
+            user.setIsDeptLeader(userInfo.isDeptLeader);
+            userList.add(user);
+        }
+
+        Collections.sort(userList, new Comparator<UserObject>(){
+            @Override
+            public int compare(UserObject o1, UserObject o2) {
+                return o1.getUserName().compareTo(o2.getUserName());
+            }
+        });
+        return userList;
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛绫诲瀷鑾峰彇鐢ㄦ埛鏁版嵁
+     * @param userType 鐢ㄦ埛绫诲瀷
+     * @return 鐢ㄦ埛鏁版嵁
+     * @throws PLException
+     */
+    private List<String> getUserNameByUserType(int userType) throws PLException{
+        List<String> userNames = new ArrayList<String>();
+        String sql = "select plusername,pltruename from pluser u where u.plusertype = " + String.valueOf(userType);
+        String[][] valss = platformClientUtil.getQueryService().queryBySqlWithoutKey(sql);
+        for(String[] vals : valss){
+            userNames.add(vals[0]);
+        }
+        return userNames;
+    }
+    /**
+     * 鑾峰彇鏌ヨ鏉′欢骞舵嫾鎴怱QL锛屽彧鎷紈here瀛愬彞鍚庨潰鐨凷QL
+     * @return
+     */
+    public String getSQL(LogQueryCriteriaDTO dto) throws PLException {
+        StringBuffer sql = new StringBuffer("");
+//        int period = getPeriod(LOG_SAVE_PERIOD);//鑾峰彇淇濆瓨鏈熼檺锛屼互鏈堜负鍗曚綅
+        int period = platformClientUtil.getLogService().getCurPeriod();;//鑾峰彇淇濆瓨鏈熼檺锛屼互鏈堜负鍗曚綅
+        //涓嬮潰鏄嫾鍑篠QL
+        if(period != 0){
+            sql.append(" to_date(PLDATE) >= add_months(to_date(sysdate),"+(-period)+")");
+        }
+        if(dto.getStartDate()!=null&&!dto.getStartDate().trim().equals("")&&!dto.getStartDate().equals("null")){//璧峰鏃ユ湡
+            if(!sql.toString().equals("")){
+                sql.append(" and ");
+            }
+            sql.append(" to_date(PLDATE) >= to_date('"+dto.getStartDate().trim()+"','yyyy-MM-dd') ");
+        }
+        if(dto.getEndDate()!=null&&!dto.getEndDate().trim().equals("")&&!dto.getEndDate().equals("null")){//缁撴潫鏃ユ湡
+            if(!sql.toString().equals("")){
+                sql.append(" and ");
+            }
+            sql.append(" trunc(PLDATE) <= to_date('"+dto.getEndDate().trim()+"','yyyy-MM-dd')");
+        }
+
+        if(dto.getLogType() == LogType.Login.value()) {//鐧诲叆鐧诲嚭鏃ュ織
+            if(!sql.toString().equals("")){
+                sql.append(" and ");
+            }
+            sql.append("PLLOGTYPE in ('" + getLogTypeString(LogType.Login) +"','" + getLogTypeString(LogType.Logout)+ "')");
+        } else if(dto.getLogType() == LogType.Grant.value()) {//鎺堟潈鏃ュ織
+            if(!sql.toString().equals("")){
+                sql.append(" and ");
+            }
+            sql.append("PLLOGTYPE in('" + getLogTypeString(LogType.Grant) + "')");
+        } else if(dto.getLogType() == LogType.General.value()) {//涓�鑸搷浣滄棩蹇�
+            if(!sql.toString().equals("")){
+                sql.append(" and ");
+            }
+            sql.append("PLLOGTYPE in('" + getLogTypeString(LogType.General) + "')");
+        }
+        if(StringUtils.isNotBlank(dto.getUserName())){//鎿嶄綔鐢ㄦ埛
+            if(!dto.getUserName().trim().equals("")){//濡傛灉鐢ㄦ埛鍚嶄负绌烘牸鍒欎笉鍔犵敤鎴锋潯浠�
+                if(!sql.toString().equals("")){
+                    sql.append(" and ");
+                }
+                if(dto.getUserName().contains("*")){
+                    dto.setUserName(dto.getUserName().trim().replaceAll("\\*", "%"));
+                    sql.append(" PLUSER like '").append(dto.getUserName().trim()).append("'");
+                }else{
+                    sql.append(" PLUSER = '").append(dto.getUserName().trim()).append("'");
+                }
+            }
+        }
+        //鎸塈P鏌ヨ
+        if(StringUtils.isNotBlank(dto.getIpText())){
+            String ip = dto.getIpText().trim();
+            if(!sql.toString().equals("")){
+                sql.append(" and ");
+            }
+            if(ip.trim().contains("*")){//妯$硦鏌ヨ
+                ip = ip.trim().replaceAll("\\*", "%");
+                sql.append(" PLIP like '").append(ip.trim()).append("'");
+            }else{
+                sql.append(" PLIP = '").append(ip.trim()).append("'");
+            }
+        }
+        if(StringUtils.isNotBlank(dto.getTypeText())){
+            String typeValue = dto.getTypeText();
+            sql.append(" and pltype like '%").append(typeValue).append("%'");
+        }
+        //杩囨护鎺塧dmin鍜宒eveloper鐢ㄦ埛鐨勬棩蹇楄褰�
+        sql.append(" and PLUSER !='admin' and  PLUSER !='developer' ");
+
+        sql.append(" and pluser != '" + WebUtil.getCurrentUserId() + "' ");
+
+
+        // 瀹夊叏淇濆瘑鍛樹笉鐪嬬郴缁熺鐞嗗憳鐨勬棩蹇�
+        if("secAdmin".equals(WebUtil.getCurrentUserId())){
+            sql.append(" and pluser != 'sysAdmin' ");
+        }
+        // 瀹¤绠$悊鍛樺彧鐪嬬郴缁熺鐞嗗憳鍜屽畨鍏ㄤ繚瀵嗗憳鐨勬棩蹇�
+        else if("auditAdmin".equals(WebUtil.getCurrentUserId())){
+            sql.append(" and pluser in ('secAdmin', 'sysAdmin')");
+        }
+        return sql.toString();
+    }
+    protected String getLogTypeString(LogType logType){
+        String res = "";
+        if(logType == LogType.Login) {
+            res = "鐧诲綍";
+        } else if(logType == LogType.Logout) {
+            res = "鐧诲嚭";
+        } else if(logType == LogType.Grant) {
+            res = "鎺堟潈";
+        } else if(logType == LogType.General) {
+            res = "涓�鑸搷浣�";
+        } else if(logType == LogType.Integration) {
+            res = "闆嗘垚搴旂敤";
+        }
+        return res;
+    }
+
+    /**
+     * 鏃ユ湡瀛楃涓插鐞�
+     * @param deleteDate 鏃ユ湡瀛楃涓�
+     * @return 澶勭悊瀹屾垚鐨勬棩鏈熷瓧绗︿覆
+     */
+    protected String getDeleteDateString(String deleteDate){
+        int s = Integer.parseInt(deleteDate.substring(8))+1;
+        StringBuffer buff = new StringBuffer();
+        buff.append(deleteDate.substring(0, 8));
+        if(("0"+s).length()>2){
+            buff.append(s+"");
+        }else{
+            buff.append("0"+s);
+        }
+        return buff.toString();
+    }
+
+    /**
+     * 鍒犻櫎閫昏緫妫�鏌�
+     * @param deleteDate 鏃ユ湡瀛楃涓�
+     * @param monthSpan 鏈熼檺code
+     * @param monthLabel 鏈熼檺鏄剧ず鍊�
+     * @return
+     * @throws PLException
+     */
+    private boolean checkCanDelete(String deleteDate, int monthSpan, String monthLabel) throws PLException {
+        boolean res = false;
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            sdf.parse(deleteDate);
+        } catch (ParseException  e1) {
+            throw new PLException("500", new String[]{"灏�" + deleteDate + "杞崲鏃ユ湡鏃跺彂鐢熼敊璇紒"});
+        }
+        String sql = "SELECT FLOOR(MONTHS_BETWEEN(SYSDATE, to_date('" + deleteDate + "','yyyy-mm-dd'))) from dual";
+        String[][] vals;
+        try {
+            vals = platformClientUtil.getQueryService().queryBySqlWithoutKey(sql);
+            if(vals != null && vals.length > 0 && vals[0].length > 0){
+                int spval = Integer.valueOf(vals[0][0]);
+                if(spval <= monthSpan){
+                    throw new PLException("500", new String[]{"鍙兘鍒犻櫎 " + monthLabel + " 涔嬪墠鐨勬暟鎹紒"});
+                }
+            }
+        } catch (PLException e) {
+            e.printStackTrace();
+            e.messages[0] += "璁$畻鏄惁鍙互鍒犻櫎鎸囧畾鏃ユ湡涔嬪墠鐨勬暟鎹椂鍙戠敓閿欒锛�";
+            throw new PLException("500", e.messages);
+        }
+        res = true;
+        return res;
+    }
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java
index fbe28cb..bb4ab4f 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java
@@ -19,6 +19,7 @@
 import com.vci.starter.web.annotation.bus.VciLoginAfter;
 import com.vci.starter.web.annotation.bus.VciLogoutBefore;
 import com.vci.starter.web.annotation.bus.VciLogoutPlugin;
+import com.vci.starter.web.constant.VConstant;
 import com.vci.starter.web.exception.VciBaseException;
 import com.vci.starter.web.interceptor.VciSessionForLoginI;
 import com.vci.starter.web.pagemodel.RequestClientInfo;
@@ -30,7 +31,7 @@
 import com.vci.constant.CacheNameConstant;
 import com.vci.dto.LoginUserDTO;
 import com.vci.web.properties.WebProperties;
-import com.vci.web.redis.RedisService;
+import com.vci.starter.web.redis.RedisService;
 import com.vci.web.service.LoginServiceI;
 import com.vci.web.util.Func;
 import com.vci.web.util.PlatformClientUtil;
@@ -146,7 +147,7 @@
      * @return 鎵ц缁撴灉
      * @throws VciBaseException 鍙傛暟閿欒锛岀敤鎴蜂笉鑳界櫥褰曠瓑浼氭姏鍑哄紓甯�
      */
-    private LoginResultBO login(LoginUserDTO userDTO, RequestClientInfo clientInfo, boolean checkPassword/*鍗曠偣鐧诲綍涓嶉渶瑕佹牎楠屽瘑鐮�*/) throws VciBaseException, PLException {
+    private LoginResultBO login(LoginUserDTO userDTO, RequestClientInfo clientInfo, boolean checkPassword/*鍗曠偣鐧诲綍涓嶉渶瑕佹牎楠屽瘑鐮�*/) throws VciBaseException {
         LoginResultBO loginResult = new LoginResultBO();
         loginResult.setSuccess(false);
 
@@ -167,6 +168,7 @@
             String tokenKey = redisService.getCacheObject(userIdTokenKey);
             redisService.deleteObject(tokenKey);
             redisService.deleteObject(userIdTokenKey);
+            redisService.decreOnlineUser(VConstant.CURRENT_LOGGED_USERS_KEY);
         }
 
         //3.鑾峰彇鐢ㄦ埛鐨勫璞★紙瀵硅薄涓寘鍚鑹查儴闂ㄨ繕鏈夊瘑鐮佺瓥鐣ヤ俊鎭�(褰撳墠鐢ㄦ埛娌¤缃瘑鐮佺瓥鐣ュ氨鏄彇鐨勯粯璁ゅ瘑鐮佺瓥鐣�)锛�
@@ -242,6 +244,8 @@
         sessionInfo.setToken(token);
         //鍒濆鍖栧钩鍙扮殑token
         sessionForLogin.initInvocationInfo(sessionInfo);
+        //璁板綍褰撳墠鐧诲綍浜烘暟鐨勬�绘暟
+        redisService.increOnlineUser(VConstant.CURRENT_LOGGED_USERS_KEY);
         //鎷疯礉鐢ㄦ埛鍒版柊鐨剆ession浼氳瘽涓�
         copyUser2SessionInfo(user, sessionInfo, userDTO.getLangCode());
         //鎷疯礉璇锋眰淇℃伅鍒皊ession浼氳瘽涓�
@@ -558,6 +562,8 @@
                 }
             });
         }
+        //娓呴櫎瀛樺綋鍓嶇櫥褰曠殑鐢ㄦ埛锛堟�绘暟-1锛�
+        redisService.decreOnlineUser(VConstant.CURRENT_LOGGED_USERS_KEY);
         sessionForLogin.logout(userToken);
         if(!CollectionUtils.isEmpty(logoutpluginBeanMap)){
             logoutpluginBeanMap.forEach((k,v) -> {
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsActionServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsActionServiceImpl.java
index 80c21c9..6a05746 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsActionServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsActionServiceImpl.java
@@ -98,6 +98,7 @@
         PLActionCls pac = new PLActionCls();
         pac.name = pLActionCls.getName();
         pac.pid = pLActionCls.getPid();
+        pac.id = pLActionCls.getId();
         pac.description = pLActionCls.getDescription() == null ? "" : pLActionCls.getDescription();
         pac.creator = WebUtil.getCurrentUserId();
         pac.createTime = System.currentTimeMillis();
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java
index f573031..319777c 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java
@@ -153,7 +153,7 @@
     public List<OsBtmTypeVO> selectAllBtm() {
         try {
             return btmDO2VOs(Arrays.stream(platformClientUtil.getBtmService().getBizTypes("")).collect(Collectors.toList()));
-        }  catch (PLException e) {
+        } catch (PLException e) {
             throw new RuntimeException(e);
         }
     }
@@ -166,7 +166,7 @@
     @Override
     @VciUnLog
     public Map<String, OsBtmTypeVO> selectAllBtmMap() {
-        return Optional.ofNullable(self.selectAllBtm()).orElseGet(()->new ArrayList<OsBtmTypeVO>()).stream().collect(Collectors.toMap(s->s.getId().toLowerCase(), t->t,(o1,o2)->o1));
+        return Optional.ofNullable(self.selectAllBtm()).orElseGet(() -> new ArrayList<OsBtmTypeVO>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(), t -> t, (o1, o2) -> o1));
     }
 
     /**
@@ -178,7 +178,7 @@
     @Override
     public List<OsBtmTypeVO> btmDO2VOs(Collection<BizType> btmItems) {
         List<OsBtmTypeVO> VOS = new ArrayList<>();
-        Optional.ofNullable(btmItems).orElseGet(()->new ArrayList<>()).stream().forEach(btmItem -> {
+        Optional.ofNullable(btmItems).orElseGet(() -> new ArrayList<>()).stream().forEach(btmItem -> {
             OsBtmTypeVO vo = btmDO2VO(btmItem);
             VOS.add(vo);
         });
@@ -194,7 +194,7 @@
     @Override
     public OsBtmTypeVO btmDO2VO(BizType btmItem) {
         OsBtmTypeVO vo = new OsBtmTypeVO();
-        if(btmItem !=null){
+        if (btmItem != null) {
             vo.setOid(btmItem.oid);
             vo.setCreator(btmItem.creator);
             vo.setLastModifier(btmItem.modifier);
@@ -202,7 +202,7 @@
                 // btmItem.createTime鎷垮埌鐨勬槸鏃堕棿鎴筹紝浣嗘槸杩欏効瑕佺殑鏄緥濡�2017-12-27 09:32:20.034杩欐牱鐨勬牸寮忥紝鎵�浠ヤ笉璋冪敤杩欎釜鏂规硶锛屾敼璋冪敤鍏朵粬鏂规硶
                 //vo.setCreateTime(VciDateUtil.str2Date(String.valueOf(btmItem.createTime),VciDateUtil.DateTimeFormat));
                 vo.setCreateTime(Func.parse(btmItem.createTime, ConcurrentDateFormat.of(VciDateUtil.DateTimeFormat)));
-                vo.setLastModifyTime( Func.parse(btmItem.modifyTime, ConcurrentDateFormat.of(VciDateUtil.DateTimeFormat)));
+                vo.setLastModifyTime(Func.parse(btmItem.modifyTime, ConcurrentDateFormat.of(VciDateUtil.DateTimeFormat)));
                 vo.setTs(Func.parse(btmItem.ts, ConcurrentDateFormat.of(VciDateUtil.DateTimeMillFormat)));
             } catch (Exception e) {
                 e.printStackTrace();
@@ -221,29 +221,29 @@
             vo.setDelimiter(btmItem.delimiter);
             vo.setfName(btmItem.fName);
             vo.setVersionRule(String.valueOf(btmItem.verRuleName));
-            if(StringUtils.isNotBlank(vo.getRevisionRuleName()) || vo.isInputRevisionFlag()){
+            if (StringUtils.isNotBlank(vo.getRevisionRuleName()) || vo.isInputRevisionFlag()) {
                 vo.setRevisionFlag(true);
             }
             vo.setLifeCycleIds(Arrays.stream(btmItem.lifeCycles).collect(Collectors.joining(",")));
             vo.setApNameArray(btmItem.apNameArray);
             List<OsAttributeVO> attributeVOS = attributeService.listAttrByIds(Arrays.stream(btmItem.apNameArray).collect(Collectors.toList()));
             List<OsBtmTypeAttributeVO> btmTypeAttributeVOS = new ArrayList<>();
-            Optional.ofNullable(attributeVOS).orElseGet(()->new ArrayList<>()).stream().forEach(attributeVO->{
+            Optional.ofNullable(attributeVOS).orElseGet(() -> new ArrayList<>()).stream().forEach(attributeVO -> {
                 OsBtmTypeAttributeVO btmTypeAttributeVO = new OsBtmTypeAttributeVO();
-                BeanUtil.convert(attributeVO,btmTypeAttributeVO);
+                BeanUtil.convert(attributeVO, btmTypeAttributeVO);
                 btmTypeAttributeVO.setPkBtmType(vo.getOid());
                 btmTypeAttributeVO.setBtmTypeId(vo.getId());
                 btmTypeAttributeVO.setAttributeDataType(attributeVO.getAttributeDataType());
                 btmTypeAttributeVO.setAttributeLength(attributeVO.getAttrLength());
                 btmTypeAttributeVO.setDefaultValue(attributeVO.getDefaultValue());
-                if("secretgrade".equalsIgnoreCase(attributeVO.getId())){
+                if ("secretgrade".equalsIgnoreCase(attributeVO.getId())) {
                     vo.setSecretFlag(true);
                 }
-                if(StringUtils.isNotBlank(attributeVO.getBtmTypeId())){
+                if (StringUtils.isNotBlank(attributeVO.getBtmTypeId())) {
                     btmTypeAttributeVO.setReferFlag(true);
                     btmTypeAttributeVO.setReferBtmTypeId(attributeVO.getBtmTypeId());
                 }
-                if(StringUtils.isNotBlank(attributeVO.getEnumId())){
+                if (StringUtils.isNotBlank(attributeVO.getEnumId())) {
                     btmTypeAttributeVO.setEnumFlag(true);
                     btmTypeAttributeVO.setEnumItemMap(enumService.getEnumValueMap(btmTypeAttributeVO.getEnumId()));
                 }
@@ -262,13 +262,13 @@
      */
     @Override
     public List<OsBtmTypeVO> listBtmByIds(Collection<String> btmIds) {
-        if(CollectionUtils.isEmpty(btmIds)){
+        if (CollectionUtils.isEmpty(btmIds)) {
             return null;
         }
         Map<String, OsBtmTypeVO> btmTypeVOMap = self.selectAllBtmMap();
         List<OsBtmTypeVO> btmTypeVOS = new ArrayList<>();
-        btmIds.stream().forEach(id->{
-            if(btmTypeVOMap.containsKey(id.toLowerCase())){
+        btmIds.stream().forEach(id -> {
+            if (btmTypeVOMap.containsKey(id.toLowerCase())) {
                 btmTypeVOS.add(btmTypeVOMap.get(id.toLowerCase()));
             }
         });
@@ -283,10 +283,10 @@
      */
     @Override
     public OsBtmTypeVO getBtmById(String id) {
-        if(StringUtils.isBlank(id)){
+        if (StringUtils.isBlank(id)) {
             return null;
         }
-        return self.selectAllBtmMap().getOrDefault(id.toLowerCase(),null);
+        return self.selectAllBtmMap().getOrDefault(id.toLowerCase(), null);
     }
 
     /**
@@ -297,33 +297,33 @@
      */
     @Override
     public List<OsUsedAttributeVO> listBtmUsedInfo(String btmName) {
-        return listBtmUsedInfo(btmName,false);
+        return listBtmUsedInfo(btmName, false);
     }
 
     /**
      * 鑾峰彇涓氬姟绫诲瀷鐨勫湪鍝釜灞炴�т腑浣跨敤
      *
-     * @param btmId 涓氬姟绫诲瀷
+     * @param btmId   涓氬姟绫诲瀷
      * @param hasLink 鏄惁鍖呭惈閾炬帴绫诲瀷涓�
      * @return 寮曠敤鐨勪俊鎭�
      */
     @Override
-    public List<OsUsedAttributeVO> listBtmUsedInfo(String btmId, boolean hasLink){
-        VciBaseUtil.alertNotNull(btmId,"涓氬姟绫诲瀷鐨勫悕绉�");
-        List<OsAttributeVO> allReferThisBtmAttributes = Optional.ofNullable(attributeService.selectAllAttribute()).orElseGet(()->new ArrayList<>()).stream().filter(s->btmId.equalsIgnoreCase(s.getBtmTypeId())).collect(Collectors.toList());
-        if(CollectionUtils.isEmpty(allReferThisBtmAttributes)){
+    public List<OsUsedAttributeVO> listBtmUsedInfo(String btmId, boolean hasLink) {
+        VciBaseUtil.alertNotNull(btmId, "涓氬姟绫诲瀷鐨勫悕绉�");
+        List<OsAttributeVO> allReferThisBtmAttributes = Optional.ofNullable(attributeService.selectAllAttribute()).orElseGet(() -> new ArrayList<>()).stream().filter(s -> btmId.equalsIgnoreCase(s.getBtmTypeId())).collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(allReferThisBtmAttributes)) {
             return null;
         }
         //鏍规嵁杩欎簺灞炴�э紝鎵惧畠浣跨敤鐨勪笟鍔$被鍨�
-        List<OsUsedAttributeVO> usedInfos= new ArrayList<>();
+        List<OsUsedAttributeVO> usedInfos = new ArrayList<>();
         List<OsBtmTypeVO> btmTypeVOMap = self.selectAllBtmMap().values().stream().collect(Collectors.toList());
         List<OsLinkTypeVO> linkTypeVOS = linkTypeService.selectAllLinkMap().values().stream().collect(Collectors.toList());
-        allReferThisBtmAttributes.stream().forEach(attribute->{
+        allReferThisBtmAttributes.stream().forEach(attribute -> {
             //鍏朵粬鐨勪笟鍔$被鍨嬪寘鍚簡杩欎釜灞炴�х殑
             List<OsBtmTypeVO> usedBtms = btmTypeVOMap.stream().filter(btmTypeVO -> !CollectionUtils.isEmpty(btmTypeVO.getAttributes()) && btmTypeVO.getAttributes().stream().anyMatch(s -> attribute.getId().equalsIgnoreCase(s.getId()))).collect(Collectors.toList());
-            if(!CollectionUtils.isEmpty(usedBtms)){
-                usedBtms.stream().forEach(btm->{
-                    btm.getAttributes().stream().filter(s->attribute.getId().equalsIgnoreCase(s.getId())).forEach(attrInBtm->{
+            if (!CollectionUtils.isEmpty(usedBtms)) {
+                usedBtms.stream().forEach(btm -> {
+                    btm.getAttributes().stream().filter(s -> attribute.getId().equalsIgnoreCase(s.getId())).forEach(attrInBtm -> {
                         OsUsedAttributeVO usedAttributeVO = new OsUsedAttributeVO();
                         usedAttributeVO.setId(attrInBtm.getId());
                         usedAttributeVO.setName(attrInBtm.getName());
@@ -333,11 +333,11 @@
                     });
                 });
             }
-            if(hasLink){
-                List<OsLinkTypeVO> usedLinks = linkTypeVOS.stream().filter(linkTypeVO -> !CollectionUtils.isEmpty(linkTypeVO.getAttributes()) &&linkTypeVO.getAttributes().stream().anyMatch(s->attribute.getId().equalsIgnoreCase(s.getId())) ).collect(Collectors.toList());
-                if(!CollectionUtils.isEmpty(usedLinks)){
-                    usedLinks.stream().forEach(link->{
-                        link.getAttributes().stream().filter(s->attribute.getId().equalsIgnoreCase(s.getId())).forEach(attrInBtm->{
+            if (hasLink) {
+                List<OsLinkTypeVO> usedLinks = linkTypeVOS.stream().filter(linkTypeVO -> !CollectionUtils.isEmpty(linkTypeVO.getAttributes()) && linkTypeVO.getAttributes().stream().anyMatch(s -> attribute.getId().equalsIgnoreCase(s.getId()))).collect(Collectors.toList());
+                if (!CollectionUtils.isEmpty(usedLinks)) {
+                    usedLinks.stream().forEach(link -> {
+                        link.getAttributes().stream().filter(s -> attribute.getId().equalsIgnoreCase(s.getId())).forEach(attrInBtm -> {
                             OsUsedAttributeVO usedAttributeVO = new OsUsedAttributeVO();
                             usedAttributeVO.setId(attrInBtm.getId());
                             usedAttributeVO.setName(attrInBtm.getName());
@@ -360,15 +360,15 @@
      */
     @Override
     public List<OsBtmTypeAttributeVO> listAttributeByBtmId(String btmId) throws PLException {
-        VciBaseUtil.alertNotNull(btmId,"涓氬姟绫诲瀷鐨勭紪鍙�");
+        VciBaseUtil.alertNotNull(btmId, "涓氬姟绫诲瀷鐨勭紪鍙�");
         BizType[] bizTypes = platformClientUtil.getBtmService().getBizTypes(btmId);
-        if(Func.isEmpty(bizTypes)){
+        if (Func.isEmpty(bizTypes)) {
             return new ArrayList<>();
         }
         BizType bizType = bizTypes[0];
         OsBtmTypeVO btmTypeVO = btmDO2VO(bizType);
         List<OsBtmTypeAttributeVO> attributes = btmTypeVO.getAttributes();
-        if(attributes == null){
+        if (attributes == null) {
             attributes = new ArrayList<>();
         }
         return attributes.stream().sorted(((o1, o2) -> o1.getId().toLowerCase(Locale.ROOT).compareTo(o2.getId().toLowerCase(Locale.ROOT)))).collect(Collectors.toList());
@@ -383,12 +383,12 @@
     @Override
     public List<OsBtmTypeAttributeVO> listAttributeByBtmIdHasDefault(String btmId) throws PLException {
         List<OsBtmTypeAttributeVO> attrVOs = listAttributeByBtmId(btmId);
-        if(attrVOs == null){
+        if (attrVOs == null) {
             attrVOs = new ArrayList<>();
         }
-        if(!CollectionUtils.isEmpty(attributeService.getDefaultAttributeVOs())) {
+        if (!CollectionUtils.isEmpty(attributeService.getDefaultAttributeVOs())) {
             List<OsBtmTypeAttributeVO> finalAttrVOs = attrVOs;
-            attributeService.getDefaultAttributeVOs().stream().forEach(attr->{
+            attributeService.getDefaultAttributeVOs().stream().forEach(attr -> {
                 OsBtmTypeAttributeVO attributeVO = new OsBtmTypeAttributeVO();
                 BeanUtil.convert(attr, attributeVO);
                 attributeVO.setAttributeDataType(attr.getAttributeDataType());
@@ -412,6 +412,7 @@
 
     /**
      * 淇敼涓氬姟绫诲瀷涓搴斿睘鎬у悕鐨勫睘鎬�
+     *
      * @param apName
      * @return
      * @throws PLException
@@ -426,7 +427,7 @@
         } catch (PLException e1) {
             e1.printStackTrace();
         }
-        if(abItem == null || abItem.equals("")){
+        if (abItem == null || abItem.equals("")) {
             return true;
         }
         try {
@@ -434,21 +435,21 @@
         } catch (PLException e) {
             e.printStackTrace();
         }
-        if(btmNames == null || btmNames.length <= 0){
+        if (btmNames == null || btmNames.length <= 0) {
             return true;
         }
 
         btmNameList = Arrays.asList(btmNames);
-        for(Iterator<String> i = btmNameList.iterator(); i.hasNext();){
+        for (Iterator<String> i = btmNameList.iterator(); i.hasNext(); ) {
             String btmName = i.next();
             try {
                 platformClientUtil.getBtmService().modifyBTAttribute(btmName, apName);
             } catch (PLException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
-                String erreMsg = "璋冩暣涓氬姟绫诲瀷涓��"+apName+"銆戝睘鎬ф椂鍑虹幇閿欒锛屽師鍥狅細"+e.getMessage();
+                String erreMsg = "璋冩暣涓氬姟绫诲瀷涓��" + apName + "銆戝睘鎬ф椂鍑虹幇閿欒锛屽師鍥狅細" + e.getMessage();
                 logger.error(erreMsg);
-                throw new PLException("500",new String[]{erreMsg});
+                throw new PLException("500", new String[]{erreMsg});
             }
         }
         return false;
@@ -456,6 +457,7 @@
 
     /**
      * 鍒ゆ柇璇ュ睘鎬ф槸鍚﹀凡缁忓湪涓氬姟绫诲瀷涓骇鐢熶簡鏁版嵁
+     *
      * @param abName
      * @return
      * @throws PLException
@@ -463,14 +465,14 @@
     @Override
     public boolean hasInstance(String abName) throws PLException {
         String[] btmNames = platformClientUtil.getBtmService().getBTNamesByAPName(abName);
-        if(btmNames == null || btmNames.length == 0){
+        if (btmNames == null || btmNames.length == 0) {
             return false;
         }
-        for(int i = 0; i < btmNames.length; i++){
+        for (int i = 0; i < btmNames.length; i++) {
             String btmName = btmNames[i];
             boolean flag;
             flag = platformClientUtil.getBtmService().hasData(btmName);
-            if(flag){
+            if (flag) {
                 return flag;
             }
         }
@@ -480,13 +482,14 @@
     /**
      * 鑾峰彇鍚嶅瓧浠ilter寮�濮嬬殑涓氬姟绫诲瀷(for 鏌ヨ)锛屼富瑕佺敤浜庡睘鎬ф睜鐨勪笟鍔$被鍨嬮�夋嫨瀵硅瘽妗�
      * 鑾峰彇鍏ㄩ儴涓氬姟绫诲瀷锛屼紶鍙俧ilter涓�""
+     *
      * @param btmName
      * @return
      * @throws PLException
      */
     @Override
     public BizType[] getBizTypes(String btmName) throws PLException {
-        if(null == btmName){
+        if (null == btmName) {
             btmName = "";
         }
         return platformClientUtil.getBtmService().getBizTypes(btmName);
@@ -494,18 +497,19 @@
 
     /**
      * 涓氬姟绫诲瀷鍒楄〃鏌ヨ锛岄潪鏍戠粨鏋勶細鐢ㄤ簬UI瀹氫箟宸︿晶涓氬姟绫诲瀷鏌ヨ锛屽彧杩斿洖name鍜宭able
+     *
      * @param btmName
      * @return
      * @throws PLException
      */
     @Override
     public Tree getBizTree(String btmName) throws PLException {
-        if(null == btmName){
+        if (null == btmName) {
             btmName = "";
         }
         Tree returnTree = new Tree();
         BizType[] bizTypes = platformClientUtil.getBtmService().getBizTypes(btmName);
-        if(Func.isEmpty(bizTypes)){
+        if (Func.isEmpty(bizTypes)) {
             return returnTree;
         }
         returnTree.setOid("");
@@ -514,13 +518,13 @@
         List<Tree> trees = new ArrayList<>();
         Arrays.stream(bizTypes).forEach(bizType -> {
             Tree tree = new Tree();
-            tree.setText(bizType.name + " " +bizType.label);
+            tree.setText(bizType.name + " " + bizType.label);
             tree.setOid(bizType.oid);
             tree.setLeaf(true);
             tree.setParentName(bizType.fName);
             Map<String, String> atrrMap = new HashMap<>();
-            atrrMap.put("name",bizType.name);
-            atrrMap.put("lable",bizType.label);
+            atrrMap.put("name", bizType.name);
+            atrrMap.put("lable", bizType.label);
             tree.setAttributes(atrrMap);
             trees.add(tree);
         });
@@ -537,7 +541,7 @@
      */
     @Override
     public DataGrid<OsBtmTypeVO> referDataGrid(Map<String, String> conditionMap, PageHelper pageHelper) {
-        DataGrid<OsBtmTypeVO> dataGrid = queryObjectServiceInfoBySql(conditionMap, pageHelper, "plbtmtype",OsBtmTypeVO.class,((data, obj) -> {
+        DataGrid<OsBtmTypeVO> dataGrid = queryObjectServiceInfoBySql(conditionMap, pageHelper, "plbtmtype", OsBtmTypeVO.class, ((data, obj) -> {
             obj.setTableName(VciBaseUtil.getTableName(obj.getId()));
         }));
         return dataGrid;
@@ -552,7 +556,7 @@
     @Override
     public OsBtmTypeVO selectByOid(String oid) {
         List<OsBtmTypeVO> btmTypeVOS = self.selectAllBtmMap().values().stream().collect(Collectors.toList());
-        return Optional.ofNullable(btmTypeVOS).orElseGet(()->new ArrayList<>()).stream().filter(s->s.getOid().equalsIgnoreCase(oid)).findFirst().orElseGet(()->null);
+        return Optional.ofNullable(btmTypeVOS).orElseGet(() -> new ArrayList<>()).stream().filter(s -> s.getOid().equalsIgnoreCase(oid)).findFirst().orElseGet(() -> null);
     }
 
     /**
@@ -564,8 +568,8 @@
     @Override
     public String getNameById(String id) {
         OsBtmTypeVO btmTypeVO = getBtmById(id);
-        if(btmTypeVO == null){
-            throw new VciBaseException("涓氬姟绫诲瀷[{0}]鍦ㄧ郴缁熼噷涓嶅瓨鍦�",new String[]{id});
+        if (btmTypeVO == null) {
+            throw new VciBaseException("涓氬姟绫诲瀷[{0}]鍦ㄧ郴缁熼噷涓嶅瓨鍦�", new String[]{id});
         }
         return btmTypeVO.getName();
     }
@@ -582,7 +586,7 @@
         List<OsERNodeVO> nodeVOList = new ArrayList<>();
         List<OsERRelationVO> relationVOList = new ArrayList<>();
         //鐪嬪綋鍓嶈繖涓笟鍔$被鍨嬶紝鍙傜収浜嗗叾浠栫殑鍝簺涓氬姟绫诲瀷 .鎴戜滑涓嶆樉绀哄紩鐢ㄥ綋鍓嶄笟鍔$被鍨嬬殑涓氬姟绫诲瀷
-        splicingBtmType2Json(nodeVOList, relationVOList, btmTypeVO,true);
+        splicingBtmType2Json(nodeVOList, relationVOList, btmTypeVO, true);
         loadAllLinkTypeByBtmType(nodeVOList, relationVOList, btmTypeVO);
         OsERVO osERVO = new OsERVO();
         osERVO.setTabViewList(nodeVOList);
@@ -604,25 +608,25 @@
         List<OsUsedAttributeVO> usedAttributeVOS = listBtmUsedInfo(btmTypeVO.getId());
         List<OsERNodeVO> nodeVOList = new ArrayList<>();
         List<OsERRelationVO> relationVOList = new ArrayList<>();
-        splicingBtmType2Json(nodeVOList, relationVOList, btmTypeVO,false);
-        if(!CollectionUtils.isEmpty(usedAttributeVOS)){
-            usedAttributeVOS.stream().forEach(usedAttr->{
+        splicingBtmType2Json(nodeVOList, relationVOList, btmTypeVO, false);
+        if (!CollectionUtils.isEmpty(usedAttributeVOS)) {
+            usedAttributeVOS.stream().forEach(usedAttr -> {
                 //涓氬姟绫诲瀷鍜岄摼鎺ョ被鍨嬮兘鏈夊彲鑳�
-                if(BooleanEnum.TRUE.getValue().equalsIgnoreCase(usedAttr.getBusinessType())){
+                if (BooleanEnum.TRUE.getValue().equalsIgnoreCase(usedAttr.getBusinessType())) {
                     //涓氬姟绫诲瀷
                     OsBtmTypeVO linkBtmVO = self.selectAllBtmMap().get(usedAttr.getPkBtmType().toLowerCase(Locale.ROOT));
-                    splicingBtmType2Json(nodeVOList, relationVOList, linkBtmVO,false);
+                    splicingBtmType2Json(nodeVOList, relationVOList, linkBtmVO, false);
                     OsERRelationVO relationVO = new OsERRelationVO();
                     relationVO.setTo(btmTypeVO.getId() + " " + btmTypeVO.getName());
                     relationVO.setFrom(linkBtmVO.getId() + " " + linkBtmVO.getName());
                     relationVO.setToText("寮曠敤");
                     relationVOList.add(relationVO);
-                }else{
+                } else {
                     //鏄摼鎺ョ被鍨�
                     OsLinkTypeVO linkTypeVO = linkTypeService.selectAllLinkMap().get(usedAttr.getPkBtmType().toLowerCase(Locale.ROOT));
                     List<OsLinkTypeVO> linkTypeVOList = new ArrayList<>();
                     linkTypeVOList.add(linkTypeVO);
-                    splicingLinkType2Json(nodeVOList, relationVOList,linkTypeVOList,btmTypeVO,true);
+                    splicingLinkType2Json(nodeVOList, relationVOList, linkTypeVOList, btmTypeVO, true);
                 }
             });
         }
@@ -634,6 +638,7 @@
 
     /**
      * 鑾峰彇鎵�鏈変笟鍔$被鍨嬶紙鏍戝舰缁撴瀯锛�
+     *
      * @return 鏌ヨ缁撴灉
      */
     @Override
@@ -642,18 +647,19 @@
         BizType[] bizTypes = getBizTypes("");
         OsBtmTypeVO osBtmTypeVO = null;
         List<OsBtmTypeVO> osBtmTypeVOS = btmDO2VOs(Arrays.asList(bizTypes));
-        for(int i = 0; i < osBtmTypeVOS.size(); i++){
+        for (int i = 0; i < osBtmTypeVOS.size(); i++) {
             osBtmTypeVO = osBtmTypeVOS.get(i);
 
-            if(osBtmTypeVO.getfName().equals("")){
+            if (osBtmTypeVO.getfName().equals("")) {
                 Tree tree = new Tree();
                 tree.setOid(osBtmTypeVO.getOid());
                 tree.setParentName(null);
                 tree.setParentId(null);
                 tree.setLeaf(true);
+                tree.setId(osBtmTypeVO.getId());
                 tree.setText(osBtmTypeVO.getDescription());
                 tree.setAttributes(WebUtil.objectToMapString(osBtmTypeVO));
-                tree.setChildren(getChildren(osBtmTypeVOS,osBtmTypeVO));
+                tree.setChildren(getChildren(osBtmTypeVOS, osBtmTypeVO));
                 rootTreeList.add(tree);
             }
         }
@@ -663,12 +669,13 @@
 
     /**
      * 鑾峰彇鎵�鏈変笟鍔$被鍨嬪悕绉伴泦鍚�
+     *
      * @return
      */
     @Override
     public List<String> getAllBtmName() throws PLException {
         BizType[] bizTypes = platformClientUtil.getBtmService().getBizTypes("");
-        if(null != bizTypes && bizTypes.length > 0){
+        if (null != bizTypes && bizTypes.length > 0) {
             return Arrays.stream(bizTypes).map(bizType -> bizType.name).collect(Collectors.toList());
         }
         return null;
@@ -676,6 +683,7 @@
 
     /**
      * 鑾峰彇涓氬姟鍏ㄩ儴灞炴�х被鍨�
+     *
      * @param btmName 涓氬姟绫诲瀷鍚嶇О
      * @return 灞炴�х殑淇℃伅
      */
@@ -723,7 +731,7 @@
             vo.setOwner(attribute.creator);
             vo.setLastModifyTime(new Date(attribute.modifyTime));
             String maxLength = AttributeConstants.getOtherValueByType(attribute.other, AttributeConstants.LENGTH);
-            if(StringUtils.isNotBlank(maxLength)){
+            if (StringUtils.isNotBlank(maxLength)) {
                 vo.setAttributeLength(Integer.valueOf(maxLength));
             }
             osBtms.add(vo);
@@ -733,12 +741,13 @@
 
     /**
      * dto杞琩o瀵硅薄
+     *
      * @return
      */
-    private BizType dto2BizType(OsBtmTypeDTO dto){
+    private BizType dto2BizType(OsBtmTypeDTO dto) {
         BizType bizType = new BizType();
         bizType.oid = dto.getOid();
-        bizType.name =dto.getId();
+        bizType.name = dto.getId();
         bizType.isAbstract = dto.isAbstractFlag();
         bizType.label = dto.getName();
         bizType.fName = dto.getfName();
@@ -758,7 +767,7 @@
 
         bizType.delimiter = (dto.getDelimiter() == null ? "" : dto.getDelimiter());
 
-        bizType.verRuleName = Func.isBlank(dto.getVersionRule()) ? 0:Short.parseShort(dto.getVersionRule());
+        bizType.verRuleName = Func.isBlank(dto.getVersionRule()) ? 0 : Short.parseShort(dto.getVersionRule());
 
         //bizType.imageName = dto.get;
         //List<String> attrIdList = dto.getAttributesDTOList().stream().map(OsBtmTypeLinkAttributesDTO::getId).collect(Collectors.toList());
@@ -766,22 +775,23 @@
         bizType.apNameArray = dto.getApNameArray().split(",");//attrIdList.toArray(new String[attrIdList.size()]);
         String userId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
         long timeMillis = System.currentTimeMillis();
-        bizType.creator = Func.isBlank(dto.getCreator()) ? userId:dto.getCreator();
-        bizType.createTime = Func.isEmpty(dto.getCreateTime()) ? timeMillis:dto.getCreateTime().getTime();
+        bizType.creator = Func.isBlank(dto.getCreator()) ? userId : dto.getCreator();
+        bizType.createTime = Func.isEmpty(dto.getCreateTime()) ? timeMillis : dto.getCreateTime().getTime();
         bizType.modifier = userId;
         bizType.modifyTime = timeMillis;
-        bizType.ts = Func.isEmpty(dto.getTs())? timeMillis:dto.getTs().getTime();
+        bizType.ts = Func.isEmpty(dto.getTs()) ? timeMillis : dto.getTs().getTime();
         return bizType;
     }
 
     /**
      * 鍒涘缓鏂扮殑涓氬姟绫诲瀷
+     *
      * @return
      * @throws PLException
      */
     @Override
     public boolean addBtmType(OsBtmTypeDTO btmTypeDTO) throws PLException {
-        VciBaseUtil.alertNotNull(btmTypeDTO,"鍒涘缓鐨勪笟鍔$被鍨嬪璞�");
+        VciBaseUtil.alertNotNull(btmTypeDTO, "鍒涘缓鐨勪笟鍔$被鍨嬪璞�");
         //涓氬姟绫诲瀷鍚嶇О妫�鏌�
         checkName(btmTypeDTO.getId());
         //鐢熷懡鍛ㄦ湡妫�鏌�
@@ -815,26 +825,27 @@
 
     /**
      * 妫�鏌ヤ笟鍔$被鍨嬪悕绉版槸鍚﹀悎瑙�
+     *
      * @param btmName
      * @throws PLException
      */
     private void checkName(String btmName) throws PLException {
         if (Func.isBlank(btmName)) {
-            throw new PLException("500",new String[]{"涓氬姟绫诲瀷鍚嶄笉鑳戒负绌�!"});
+            throw new PLException("500", new String[]{"涓氬姟绫诲瀷鍚嶄笉鑳戒负绌�!"});
         }
 
         if (!btmName.matches("[a-z A-Z]*")) {
-            throw new PLException("500",new String[]{"涓氬姟绫诲瀷鍚嶅彧鑳戒负鑻辨枃瀛楁瘝!"});
+            throw new PLException("500", new String[]{"涓氬姟绫诲瀷鍚嶅彧鑳戒负鑻辨枃瀛楁瘝!"});
         }
 
         int maxLength = platformClientUtil.getBtmService().getBTNameMaxLength();
 
         if (btmName.length() > maxLength) {
-            throw new PLException("500",new String[]{"涓氬姟绫诲瀷鍚嶉暱搴︿笉鑳借秴杩�" + maxLength});
+            throw new PLException("500", new String[]{"涓氬姟绫诲瀷鍚嶉暱搴︿笉鑳借秴杩�" + maxLength});
         }
 
         if (platformClientUtil.getBtmService().checkRowIsExists(btmName)) {
-            throw new PLException("500",new String[]{"涓氬姟绫诲瀷鍚嶅凡缁忓瓨鍦�"});
+            throw new PLException("500", new String[]{"涓氬姟绫诲瀷鍚嶅凡缁忓瓨鍦�"});
         }
     }
 
@@ -845,19 +856,20 @@
      */
     private void checkLifeCycle(OsBtmTypeDTO btmTypeDTO) throws PLException {
         if (Func.isBlank(btmTypeDTO.getLifeCycleId())) {
-            throw new PLException("500",new String[]{"鐢熷懡鍛ㄦ湡涓嶈兘涓虹┖"});
+            throw new PLException("500", new String[]{"鐢熷懡鍛ㄦ湡涓嶈兘涓虹┖"});
         }
     }
 
     /**
      * 閫夋嫨涓�绾х増鏈細蹇呴』閫夋嫨鎴栨墜宸ヨ緭鍏ョ増鏈彿瑙勫垯; 閫夋嫨浜岀骇鐗堟湰锛氬繀椤婚�夋嫨鎴栨墜宸ヨ緭鍏ョ増鏈彿瑙勫垯, (鐗堟鍙峰凡缁忛粯璁ら�夋嫨).
+     *
      * @return
      */
     private void checkVersionInfo(OsBtmTypeDTO dto) throws PLException {
         //闇�瑕佹墜鍔ㄨ緭鍏ョ増鏈椂revisionRuleId涓嶈兘涓虹┖
         if (dto.getRevLevel() == 1 || dto.getRevLevel() == 2) {
             if (Func.isBlank(dto.getRevisionRuleId()) && !dto.isInputRevisionFlag()) {
-                throw new PLException("500",new String[]{"鐗堟湰鍙疯鍒欎笉鑳戒负绌�"});
+                throw new PLException("500", new String[]{"鐗堟湰鍙疯鍒欎笉鑳戒负绌�"});
             }
         }
     }
@@ -865,38 +877,40 @@
     /**
      * 鐗堟湰鏈哄埗淇敼: 浠呭厑璁哥被鍨嬩粠"涓嶅彲淇"鍙樻洿鑷�"涓�绾х増鏈鐞嗘満鍒�","浜岀骇鐗堟湰绠$悊鏈哄埗杩涜璋冩暣"; "涓�绾х増鏈鐞嗘満鍒�"鍙樻洿鑷�"浜岀骇鐗堟湰绠$悊鏈哄埗";
      * 涓ょ鏂瑰紡.
+     *
      * @param dbBizType 褰撳墠淇敼鍓嶇殑涓氬姟绫诲瀷锛堝簱涓瓨鍌ㄧ殑锛�
-     * @param dto 褰撳墠淇敼涓氬姟绫诲瀷
+     * @param dto       褰撳墠淇敼涓氬姟绫诲瀷
      * @throws PLException
      */
-    private void checkRevLevel(BizType dbBizType,OsBtmTypeDTO dto) throws PLException {
-        if (dbBizType.revLevel == 1 && dto.getRevLevel()==0) {
-            throw new PLException("500",new String[]{"鐗堟湰鍙樻洿閿欒锛氫笉鑳戒粠涓�绾у彉涓轰笉鍙慨璁�"});
+    private void checkRevLevel(BizType dbBizType, OsBtmTypeDTO dto) throws PLException {
+        if (dbBizType.revLevel == 1 && dto.getRevLevel() == 0) {
+            throw new PLException("500", new String[]{"鐗堟湰鍙樻洿閿欒锛氫笉鑳戒粠涓�绾у彉涓轰笉鍙慨璁�"});
         }
         if (dbBizType.revLevel == 2 && (dto.getRevLevel() == 1 || dto.getRevLevel() == 0)) {
-            throw new PLException("500",new String[]{"鐗堟湰鍙樻洿閿欒锛氫笉鑳戒粠浜岀骇鍙樹负涓�绾ф垨涓嶅彲淇"});
+            throw new PLException("500", new String[]{"鐗堟湰鍙樻洿閿欒锛氫笉鑳戒粠浜岀骇鍙樹负涓�绾ф垨涓嶅彲淇"});
         }
     }
 
     /**
      * 淇敼涓氬姟绫诲瀷
+     *
      * @param btmTypeDTO
      * @return
      * @throws PLException
      */
     @Override
     public boolean updateBtmType(OsBtmTypeDTO btmTypeDTO) throws PLException {
-        VciBaseUtil.alertNotNull(btmTypeDTO,"淇敼鐨勪笟鍔$被鍨嬪璞�");
+        VciBaseUtil.alertNotNull(btmTypeDTO, "淇敼鐨勪笟鍔$被鍨嬪璞�");
         //妫�鏌ョ敓鍛藉懆鏈熸槸鍚﹀悎瑙�
         checkLifeCycle(btmTypeDTO);
         //鏌ヨ鏁版嵁搴撲腑鐨勪笟鍔$被鍨�
         String id = btmTypeDTO.getId();
         BizType dbBizType = platformClientUtil.getBtmService().getBizTypeByName(id);
-        if(Func.isEmpty(dbBizType) || Func.isBlank(dbBizType.oid)){
-            throw new PLException("500",new String[]{"褰撳墠淇敼鐨勪笟鍔$被鍨嬩笉瀛樺湪锛�"});
+        if (Func.isEmpty(dbBizType) || Func.isBlank(dbBizType.oid)) {
+            throw new PLException("500", new String[]{"褰撳墠淇敼鐨勪笟鍔$被鍨嬩笉瀛樺湪锛�"});
         }
         //妫�鏌ョ増鏈鍒欎慨鏀规槸鍚﹀悎瑙�
-        checkRevLevel(dbBizType,btmTypeDTO);
+        checkRevLevel(dbBizType, btmTypeDTO);
         checkVersionInfo(btmTypeDTO);
         //澶勭悊涓氬姟绫诲瀷涓嬬殑灞炴��
         List<String> lastAttrList = new ArrayList<>(Arrays.asList(btmTypeDTO.getApNameArray().split(",")));
@@ -939,28 +953,29 @@
 
     /**
      * 鍒犻櫎涓氬姟绫诲瀷
+     *
      * @param btmTypeDTO
      * @return
      * @throws PLException
      */
     @Override
     public boolean deleteBtmType(OsBtmTypeDTO btmTypeDTO) throws PLException {
-        VciBaseUtil.alertNotNull(btmTypeDTO,"鍒犻櫎鐨勪笟鍔$被鍨�");
+        VciBaseUtil.alertNotNull(btmTypeDTO, "鍒犻櫎鐨勪笟鍔$被鍨�");
         String btmName = btmTypeDTO.getId();
         //鍙兘鍒犻櫎鍙跺瓙鑺傜偣
-        if(Func.isNotBlank(btmTypeDTO.getfName())){
-            throw new PLException("500",new String[]{"鍙兘鍒犻櫎鍙跺瓙鑺傜偣"});
+        if (Func.isNotBlank(btmTypeDTO.getfName())) {
+            throw new PLException("500", new String[]{"鍙兘鍒犻櫎鍙跺瓙鑺傜偣"});
         }
         // 涓氬姟绫诲瀷琚摼鎺ョ被鍨嬩娇鐢�, 涓嶈兘鍒犻櫎
         List<String> usedNameList = linkTypeService.getUsedBtmLinkList(btmName);
         if (usedNameList != null && usedNameList.size() > 0) {
-            throw new PLException("500",new String[]{"璇ョ被鍨嬪凡琚摼鎺ョ被鍨嬩娇鐢紝绂佹鍒犻櫎"});
+            throw new PLException("500", new String[]{"璇ョ被鍨嬪凡琚摼鎺ョ被鍨嬩娇鐢紝绂佹鍒犻櫎"});
         }
         // 涓氬姟绫诲瀷宸茬粡鐢熸垚浜嗕笟鍔″璞�, 涓嶈兘鍒犻櫎
         if (hasInstanceByBtmName(btmName)) {
-            throw new PLException("500",new String[]{"璇ョ被鍨嬪凡鏈夊疄渚嬶紝绂佹鍒犻櫎"});
+            throw new PLException("500", new String[]{"璇ョ被鍨嬪凡鏈夊疄渚嬶紝绂佹鍒犻櫎"});
         }
-        
+
         BizType bizType = new BizType();
         bizType.ts = btmTypeDTO.getTs().getTime();
         bizType.oid = btmTypeDTO.getOid();
@@ -970,6 +985,7 @@
 
     /**
      * 涓�鑷存�ф鏌�
+     *
      * @return
      * @throws PLException
      */
@@ -977,9 +993,9 @@
     public BaseResult checkBtmConsistency() throws PLException {
         String[] result = platformClientUtil.getBtmService().btmConsistencyCheck();
         Map<String, String> dbCheckMap = new HashMap<String, String>();
-        for(int i = 0; i < result.length; i++){
+        for (int i = 0; i < result.length; i++) {
             String info = result[i];
-            if(info.equals("")){
+            if (info.equals("")) {
                 continue;
             }
             String[] infos = info.split("/DML");
@@ -987,9 +1003,9 @@
             String dml = infos[1];
             dbCheckMap.put(typeName, dml);
         }
-        if(dbCheckMap.size() < 1){
+        if (dbCheckMap.size() < 1) {
             return BaseResult.successMsg("鏁版嵁搴撲腑鐨勮〃缁撴瀯涓庣被鍨嬩竴鑷�,鏃犻渶淇!!");
-        }else{
+        } else {
             //闇�瑕佷慨澶嶆椂灏遍渶瑕佺晫闈㈠敜璧峰璇濇杩涜澶勭悊
             List<Map> list = new ArrayList<>();
             list.add(dbCheckMap);
@@ -1001,26 +1017,29 @@
 
     /**
      * 涓�鑷存�ф鏌ヤ慨澶嶅姛鑳�
+     *
      * @param repairData
      * @return
      */
     @Override
     public BaseResult executeRepair(String repairData) throws Exception {
-        Map<String, String> dbCheckMap = new ObjectMapper().readValue(repairData, new TypeReference<Map<String,String>>(){});
+        Map<String, String> dbCheckMap = new ObjectMapper().readValue(repairData, new TypeReference<Map<String, String>>() {
+        });
         List<String> list = this.getRepairDML(dbCheckMap);
-        if(list.size() < 1){
+        if (list.size() < 1) {
             return BaseResult.success();
         }
         try {
             String[] result = platformClientUtil.getBtmService().executeRepair(list.toArray(new String[0]));
             return BaseResult.success(result);
-        }catch (PLException e){
-            return BaseResult.fail("涓氬姟绫诲瀷淇澶辫触锛屽師鍥狅細"+VciBaseUtil.getExceptionMessage(e));
+        } catch (PLException e) {
+            return BaseResult.fail("涓氬姟绫诲瀷淇澶辫触锛屽師鍥狅細" + VciBaseUtil.getExceptionMessage(e));
         }
     }
 
     /**
      * 鍒涘缓瑙嗗浘
+     *
      * @return
      * @throws PLException
      */
@@ -1031,6 +1050,7 @@
 
     /**
      * 鍒犻櫎鏁版嵁鐣岄潰鐨勬煡璇�
+     *
      * @return 涓氬姟绫诲瀷锛岄摼鎺ョ被鍨�
      */
     @Override
@@ -1039,11 +1059,11 @@
         List<String> allBtmName = this.getAllBtmName();
         //鑾峰彇閾炬帴绫诲瀷鍚嶇О闆嗗悎
         List<String> allLinkType = linkTypeService.getAllLtName();
-        Map<String,List> map = new HashMap<>();
-        map.put("btmType",allBtmName);
-        map.put("linkType",allLinkType);
-        map.put("table",tableList);
-        map.put("workFlow",workFlowTableList);
+        Map<String, List> map = new HashMap<>();
+        map.put("btmType", allBtmName);
+        map.put("linkType", allLinkType);
+        map.put("table", tableList);
+        map.put("workFlow", workFlowTableList);
         List<Map> list = new ArrayList<>();
         list.add(map);
         return BaseResult.dataList(list);
@@ -1051,24 +1071,25 @@
 
     /**
      * 鍒犻櫎鏁版嵁
-     * @param btmNames 涓氬姟绫诲瀷鍚�
+     *
+     * @param btmNames  涓氬姟绫诲瀷鍚�
      * @param linkNames 閾炬帴绫诲瀷鍚�
      * @return
      * @throws PLException
      */
     @Override
-    public List<Map> truncateTable(String[] btmNames,String[] linkNames) throws PLException {
+    public List<Map> truncateTable(String[] btmNames, String[] linkNames) throws PLException {
         List<Map> returnMapList = new ArrayList<>();
         Map<String, List<String>> map = new HashMap<>();
-        map.put("btmSuccess",new ArrayList<>());
-        map.put("btmFail",new ArrayList<>());
-        map.put("linkSuccess",new ArrayList<>());
-        map.put("linkFail",new ArrayList<>());
-        if(Func.isNotEmpty(btmNames)){
-            for(int i = 0; i < btmNames.length; i++){
+        map.put("btmSuccess", new ArrayList<>());
+        map.put("btmFail", new ArrayList<>());
+        map.put("linkSuccess", new ArrayList<>());
+        map.put("linkFail", new ArrayList<>());
+        if (Func.isNotEmpty(btmNames)) {
+            for (int i = 0; i < btmNames.length; i++) {
                 String btName = btmNames[i];
                 try {
-                    if(platformClientUtil.getBtmService().truncateTable(btName)){
+                    if (platformClientUtil.getBtmService().truncateTable(btName)) {
                         //淇敼鎴愬姛璁板綍涓嬫垚鍔熺殑涓氬姟绫诲瀷鍚�
                         map.get("btmSuccess").add(btName);
                     }
@@ -1080,12 +1101,12 @@
                 }
             }
         }
-        if(Func.isNotEmpty(linkNames)){
+        if (Func.isNotEmpty(linkNames)) {
             //truncate閾炬帴绫诲瀷鏁版嵁
-            for(int i = 0; i < linkNames.length; i++){
+            for (int i = 0; i < linkNames.length; i++) {
                 String ltName = linkNames[i];
                 try {
-                    if(platformClientUtil.getLinkTypeService().truncateTable(ltName)){
+                    if (platformClientUtil.getLinkTypeService().truncateTable(ltName)) {
                         map.get("linkSuccess").add(ltName);
                     }
                 } catch (PLException e1) {
@@ -1101,6 +1122,7 @@
 
     /**
      * 鍒犻櫎鍏ㄩ儴绫诲瀷
+     *
      * @return
      * @throws PLException
      */
@@ -1108,7 +1130,7 @@
     public BaseResult deleteAllType() throws PLException {
         DeleteType deleteType = new DeleteType();
         //鑾峰彇寰呭垹闄ょ殑涓氬姟绫诲瀷
-        List<BizType> delBtList =  deleteType.getDelBtList();
+        List<BizType> delBtList = deleteType.getDelBtList();
         //鑾峰彇寰呭垹闄ょ殑閾炬帴绫诲瀷
         List<LinkType> ltNames = deleteType.getDelLtList();
         //鑾峰彇寰呭垹闄ょ殑灞炴��
@@ -1125,7 +1147,7 @@
             platformClientUtil.getBtmService().deleteBtsAndTables(delBtList.toArray(new BizType[0]));
         } catch (PLException e) {
             e.printStackTrace();
-            String exceptionMessage = "娓呴櫎涓氬姟绫诲瀷鍜屽搴旇〃鏍兼椂鍑虹幇寮傚父锛屽師鍥狅細"+VciBaseUtil.getExceptionMessage(e);
+            String exceptionMessage = "娓呴櫎涓氬姟绫诲瀷鍜屽搴旇〃鏍兼椂鍑虹幇寮傚父锛屽師鍥狅細" + VciBaseUtil.getExceptionMessage(e);
             logger.error(exceptionMessage);
             return BaseResult.fail(exceptionMessage);
         }
@@ -1133,7 +1155,7 @@
             ClientServiceProvider.getOMDService().getLinkTypeService().deleteLtsAndTables(ltNames.toArray(new LinkType[0]));
         } catch (PLException e) {
             e.printStackTrace();
-            String exceptionMessage = "娓呴櫎閾炬帴绫诲瀷鏃跺嚭鐜板紓甯革紝鍘熷洜锛�"+VciBaseUtil.getExceptionMessage(e);
+            String exceptionMessage = "娓呴櫎閾炬帴绫诲瀷鏃跺嚭鐜板紓甯革紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
             logger.error(exceptionMessage);
             return BaseResult.fail(exceptionMessage);
         }
@@ -1142,7 +1164,7 @@
             platformClientUtil.getAttributeService().deleteAttributeDefs(abs);
         } catch (PLException e) {
             e.printStackTrace();
-            String exceptionMessage = "娓呴櫎灞炴�ф睜灞炴�ф椂鍑虹幇寮傚父锛屽師鍥狅細"+VciBaseUtil.getExceptionMessage(e);
+            String exceptionMessage = "娓呴櫎灞炴�ф睜灞炴�ф椂鍑虹幇寮傚父锛屽師鍥狅細" + VciBaseUtil.getExceptionMessage(e);
             logger.error(exceptionMessage);
             return BaseResult.fail(exceptionMessage);
         }
@@ -1150,7 +1172,7 @@
             platformClientUtil.getEnumService().deleteEnumTypes(delEnumList.toArray(new EnumType[0]));
         } catch (PLException e) {
             e.printStackTrace();
-            String exceptionMessage = "娓呴櫎鏋氫妇绫诲瀷鏃跺嚭鐜板紓甯革紝鍘熷洜锛�"+VciBaseUtil.getExceptionMessage(e);
+            String exceptionMessage = "娓呴櫎鏋氫妇绫诲瀷鏃跺嚭鐜板紓甯革紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
             logger.error(exceptionMessage);
             return BaseResult.fail(exceptionMessage);
         }
@@ -1158,7 +1180,7 @@
             platformClientUtil.getLifeCycleService().deleteLifeCycles(delLCList.toArray(new LifeCycle[0]));
         } catch (PLException e) {
             e.printStackTrace();
-            String exceptionMessage = "娓呴櫎鐢熷懡鍛ㄦ湡鏃跺嚭鐜板紓甯革紝鍘熷洜锛�"+VciBaseUtil.getExceptionMessage(e);
+            String exceptionMessage = "娓呴櫎鐢熷懡鍛ㄦ湡鏃跺嚭鐜板紓甯革紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
             logger.error(exceptionMessage);
             return BaseResult.fail(exceptionMessage);
         }
@@ -1166,7 +1188,7 @@
             platformClientUtil.getStatePoolService().deleteStatePools(delStateList.toArray(new StatePool[0]));
         } catch (PLException e) {
             e.printStackTrace();
-            String exceptionMessage = "娓呴櫎鐘舵�佹睜鐘舵�佹椂鍑虹幇寮傚父锛屽師鍥狅細"+VciBaseUtil.getExceptionMessage(e);
+            String exceptionMessage = "娓呴櫎鐘舵�佹睜鐘舵�佹椂鍑虹幇寮傚父锛屽師鍥狅細" + VciBaseUtil.getExceptionMessage(e);
             logger.error(exceptionMessage);
             return BaseResult.fail(exceptionMessage);
         }
@@ -1174,7 +1196,7 @@
             platformClientUtil.getVersionService().deleteVersionRules(delVRList.toArray(new VersionRule[0]));
         } catch (PLException e) {
             e.printStackTrace();
-            String exceptionMessage = "娓呴櫎鐗堟湰瑙勫垯鏃跺嚭鐜板紓甯革紝鍘熷洜锛�"+VciBaseUtil.getExceptionMessage(e);
+            String exceptionMessage = "娓呴櫎鐗堟湰瑙勫垯鏃跺嚭鐜板紓甯革紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
             logger.error(exceptionMessage);
             return BaseResult.fail(exceptionMessage);
         }
@@ -1183,12 +1205,13 @@
 
     /**
      * 鏍规嵁涓氬姟绫诲瀷鍚嶇О鍜屽叾涓嬬殑灞炴�у悕绉拌幏鍙栧凡鏈夌殑绱㈠紩
+     *
      * @param conditionMap 鏍规嵁鏌ヨ鏉′欢浼犲弬: typename:涓氬姟绫诲瀷鍚�;
      * @return
      */
     @Override
-    public List<IndexObject> getIndexByCondition(Map<String,String> conditionMap) throws PLException {
-        if(Func.isEmpty(conditionMap)){
+    public List<IndexObject> getIndexByCondition(Map<String, String> conditionMap) throws PLException {
+        if (Func.isEmpty(conditionMap)) {
             return new ArrayList<>();
         }
         List<String> indexNameList = new ArrayList<String>();
@@ -1205,15 +1228,15 @@
         //HashMap<String, String> indexmap = new HashMap<String, String>();
         BusinessObject findBTMObjects[] = platformClientUtil.getQueryService().findBTMObjects(qtl.getId(), OQTool.qtTOXMl(qtl).asXML());
         List<IndexObject> indexObjects = new ArrayList<>();
-        for(int i = 0; i < findBTMObjects.length; i++) {
+        for (int i = 0; i < findBTMObjects.length; i++) {
             BusinessObject findBTMObject = findBTMObjects[i];
             IndexObject indexObject = new IndexObject();
             indexObject.setOid(findBTMObject.oid);
             indexObject.setDescription(findBTMObject.description);
-            indexObject.setCreateTime(Func.format(new Date(findBTMObject.createTime),DateUtil.PATTERN_DATE));
-            indexObject.setIndexName(ObjectTool.getBOAttributeValue(findBTMObject,"indexname"));
-            indexObject.setTypeName(ObjectTool.getBOAttributeValue(findBTMObject,"typename"));
-            indexObject.setAttrNames(ObjectTool.getBOAttributeValue(findBTMObject,"attrname"));
+            indexObject.setCreateTime(Func.format(new Date(findBTMObject.createTime), DateUtil.PATTERN_DATE));
+            indexObject.setIndexName(ObjectTool.getBOAttributeValue(findBTMObject, "indexname"));
+            indexObject.setTypeName(ObjectTool.getBOAttributeValue(findBTMObject, "typename"));
+            indexObject.setAttrNames(ObjectTool.getBOAttributeValue(findBTMObject, "attrname"));
             indexObjects.add(indexObject);
         }
         return indexObjects;
@@ -1221,18 +1244,19 @@
 
     /**
      * 鏍规嵁涓氬姟绫诲瀷鍚嶇О鍜屽叾涓嬬殑灞炴�у悕绉板垹闄ょ储寮�
+     *
      * @param btmName
      * @param indexName
      * @return
      */
     @Override
     public boolean delIndex(String btmName, String indexName) throws PLException {
-        VciBaseUtil.alertNotNull(btmName,"涓氬姟绫诲瀷鍚�",indexName,"绱㈠紩鍚�");
+        VciBaseUtil.alertNotNull(btmName, "涓氬姟绫诲瀷鍚�", indexName, "绱㈠紩鍚�");
         Map<String, String> conditionMap = new HashMap<>();
-        conditionMap.put("typename",btmName);
-        conditionMap.put("indexname",indexName);
+        conditionMap.put("typename", btmName);
+        conditionMap.put("indexname", indexName);
         List<IndexObject> bo2 = getIndexByCondition(conditionMap);
-        if(bo2!=null && bo2.size()>0) {
+        if (bo2 != null && bo2.size() > 0) {
             String[] indexAttr = {indexName};
 
             boolean alterFlag = platformClientUtil.getBtmService().dropIndex(btmName, indexAttr);
@@ -1243,7 +1267,7 @@
             for (int i = 0; i < bo2.size(); i++) {
                 String oid = bo2.get(i).getOid();
                 BusinessObject bo = platformClientUtil.getBOFactoryService().readBusinessObject(oid, "indexobject");
-                platformClientUtil.getBOFactoryService().deleteBusinessObject(bo,1);
+                platformClientUtil.getBOFactoryService().deleteBusinessObject(bo, 1);
             }
         }
         return true;
@@ -1251,12 +1275,13 @@
 
     /**
      * 缁欎笟鍔$被鍨嬩笅鐨勬寚瀹氬睘鎬ф柊澧炵储寮�
+     *
      * @param indexObjectList
      * @return
      */
     @Override
     public boolean addIndex(List<IndexObject> indexObjectList) throws PLException {
-        VciBaseUtil.alertNotNull(indexObjectList,"鏂板鐨勭储寮曚俊鎭�");
+        VciBaseUtil.alertNotNull(indexObjectList, "鏂板鐨勭储寮曚俊鎭�");
         String btmName = indexObjectList.get(0).getTypeName();
         String indexNames = indexObjectList.stream().map(IndexObject::getIndexName).collect(Collectors.joining(","));
         String[] oldindexAttr = {indexNames};
@@ -1264,23 +1289,23 @@
         List<BusinessObject> boList = new ArrayList<>();
         //鍏堟煡璇㈠綋鍓嶆坊鍔犵储寮曟槸鍚﹀凡缁忓瓨鍦紝濡傛灉瀛樺湪灏卞厛鍒犻櫎鍐嶆柊澧炲疄鐜版浛鎹㈡搷浣�
         Map<String, String> conditionMap = new HashMap<>();
-        conditionMap.put("typename",btmName);
+        conditionMap.put("typename", btmName);
         //鍏堣繖鏍峰鐞嗭紝鍓嶇鐜板湪鍙仛浜嗗崟娆′繚瀛橈紝鎵�浠ヤ笉鐢╥n
         conditionMap.put("indexname", indexNames);
         List<IndexObject> indexObjects = getIndexByCondition(conditionMap);
-        if(indexObjects!=null && indexObjects.size()>0){
+        if (indexObjects != null && indexObjects.size() > 0) {
             //绱㈠紩涓嶅瓨鍦ㄦ椂鍒犻櫎灏变細鎶ラ敊绱㈠紩涓嶅瓨鍦紝鎵�浠ヨ繖閲屾湁绱㈠紩鎵嶅幓鍒犻櫎
             boolean b = platformClientUtil.getBtmService().dropIndex(btmName, oldindexAttr);
-            if(b){
-                for(int i = 0; i < indexObjects.size(); i ++){
+            if (b) {
+                for (int i = 0; i < indexObjects.size(); i++) {
                     String oid = (String) indexObjects.get(i).getOid();
-                    bo = platformClientUtil.getBOFactoryService().readBusinessObject(oid,"indexobject");
-                    platformClientUtil.getBOFactoryService().deleteBusinessObject(bo,1);
+                    bo = platformClientUtil.getBOFactoryService().readBusinessObject(oid, "indexobject");
+                    platformClientUtil.getBOFactoryService().deleteBusinessObject(bo, 1);
                 }
             }
         }
 
-        for(int i = 0; i < indexObjectList.size(); i ++){
+        for (int i = 0; i < indexObjectList.size(); i++) {
             IndexObject indexObject = indexObjectList.get(i);
             //bo = platformClientUtil.getBOFService().initBusinessObject("indexobject");
             bo = boService.createCBOByBtmName("indexobject");
@@ -1290,11 +1315,11 @@
             attributeValues.add(new AttributeValue("attrname", indexObject.getAttrNames()));
             bo.newAttrValList = attributeValues.toArray(new AttributeValue[attributeValues.size()]);
             bo.description = indexObject.getDescription();
-            String[] indexAttr = {indexObject.getIndexName(),indexObject.getAttrNames()};
+            String[] indexAttr = {indexObject.getIndexName(), indexObject.getAttrNames()};
             //缁欐寚瀹氫笟鍔$被鍨嬬殑鎸囧畾灞炴�у垱寤虹储寮�
             boolean alterFlag = platformClientUtil.getBtmService().addIndex(btmName, indexAttr);
             //绱㈠紩鍒涘缓鎴愬姛涔嬪悗锛岄渶瑕佸瓨鍌ㄦ垚鍔熺储寮曞埌绱㈠紩琛ㄤ腑
-            if(!alterFlag){
+            if (!alterFlag) {
                 return false;
             }
             boList.add(bo);
@@ -1302,13 +1327,14 @@
             //platformClientUtil.getBOFactoryService().createBusinessObject(bo,false,false);
         }
         //娣诲姞绱㈠紩淇℃伅鍒扮储寮曠殑涓氬姟琛ㄤ腑
-        platformClientUtil.getBOFactoryService().batchCreateBusinessObject(boList.toArray(new BusinessObject[boList.size()]),false,false);
+        platformClientUtil.getBOFactoryService().batchCreateBusinessObject(boList.toArray(new BusinessObject[boList.size()]), false, false);
         return true;
     }
 
     /**
      * 瀵煎嚭涓氬姟绫诲瀷
      * oid 涓氬姟绫诲瀷鍚嶇О
+     *
      * @return 鍒涘缓缁撴灉
      */
     @Override
@@ -1319,7 +1345,7 @@
         //璁剧疆鍒楀悕
         List<String> columns = new ArrayList<>(
                 Arrays.asList("绫诲瀷鍚嶇О", "鏍囩", "缁ф壙鑷�", "瀹炵幇绫�", "鎻忚堪", "鐗堟湰瑙勫垯", "鐗堟湰鍙疯鍒�",
-                        "鏄惁鎵嬪伐杈撳叆","鍒嗛殧绗�", "鐗堟鍙疯鍒�","鐢熷懡鍛ㄦ湡", "澶囬�夌敓鍛藉懆鏈熷垪琛�","灞炴�у垪琛�")
+                        "鏄惁鎵嬪伐杈撳叆", "鍒嗛殧绗�", "鐗堟鍙疯鍒�", "鐢熷懡鍛ㄦ湡", "澶囬�夌敓鍛藉懆鏈熷垪琛�", "灞炴�у垪琛�")
         );
         try {
             new File(excelPath).createNewFile();
@@ -1327,25 +1353,25 @@
             List<WriteExcelData> excelDataList = new ArrayList<>();
             //璁剧疆鍒楀ご
             for (int index = 0; index < columns.size(); index++) {
-                excelDataList.add(new WriteExcelData(0,index, columns.get(index)));
+                excelDataList.add(new WriteExcelData(0, index, columns.get(index)));
             }
             HashSet<String> attributes = new HashSet<>();
             int i = 0;
             for (String name : names.split(",")) {
                 BizType bizType = platformClientUtil.getBtmService().getBizTypeByName(name);
-                excelDataList.add(new WriteExcelData(i+1,0, bizType.name));
-                excelDataList.add(new WriteExcelData(i+1,1, bizType.label));
-                excelDataList.add(new WriteExcelData(i+1,2, bizType.fName));
-                excelDataList.add(new WriteExcelData(i+1,3, bizType.implClass));
-                excelDataList.add(new WriteExcelData(i+1,4, bizType.description));
-                excelDataList.add(new WriteExcelData(i+1,5, bizType.revLevel));
-                excelDataList.add(new WriteExcelData(i+1,6, bizType.revRuleName));
-                excelDataList.add(new WriteExcelData(i+1,7, bizType.revInput));
-                excelDataList.add(new WriteExcelData(i+1,8, bizType.delimiter));
-                excelDataList.add(new WriteExcelData(i+1,9, bizType.verRuleName));
-                excelDataList.add(new WriteExcelData(i+1,10, bizType.lifeCycle));
-                excelDataList.add(new WriteExcelData(i+1,11, String.join(",",bizType.lifeCycles)));
-                excelDataList.add(new WriteExcelData(i+1,12, String.join(",",bizType.apNameArray)));
+                excelDataList.add(new WriteExcelData(i + 1, 0, bizType.name));
+                excelDataList.add(new WriteExcelData(i + 1, 1, bizType.label));
+                excelDataList.add(new WriteExcelData(i + 1, 2, bizType.fName));
+                excelDataList.add(new WriteExcelData(i + 1, 3, bizType.implClass));
+                excelDataList.add(new WriteExcelData(i + 1, 4, bizType.description));
+                excelDataList.add(new WriteExcelData(i + 1, 5, bizType.revLevel));
+                excelDataList.add(new WriteExcelData(i + 1, 6, bizType.revRuleName));
+                excelDataList.add(new WriteExcelData(i + 1, 7, bizType.revInput));
+                excelDataList.add(new WriteExcelData(i + 1, 8, bizType.delimiter));
+                excelDataList.add(new WriteExcelData(i + 1, 9, bizType.verRuleName));
+                excelDataList.add(new WriteExcelData(i + 1, 10, bizType.lifeCycle));
+                excelDataList.add(new WriteExcelData(i + 1, 11, String.join(",", bizType.lifeCycles)));
+                excelDataList.add(new WriteExcelData(i + 1, 12, String.join(",", bizType.apNameArray)));
                 attributes.addAll(Arrays.asList(bizType.apNameArray));
                 i++;
             }
@@ -1353,20 +1379,21 @@
             ExcelUtil.writeDataToFile(excelPath, excelOption);
             //瀵煎嚭灞炴��
             String attrPath = attributeService.exportAttributes("btmattr",
-                    attributes.stream().collect(Collectors.joining(",")),true);
+                    attributes.stream().collect(Collectors.joining(",")), true);
             //绉诲姩灞炴�у埌閾炬帴绫诲瀷鏂囦欢澶归噷闈㈠幓
-            FileUtil.move(new File(attrPath), new File(defaultTempFolder),true);
-            FileUtil.del(attrPath.substring(0,attrPath.lastIndexOf("\\")));
-        }catch (IOException e) {
+            FileUtil.move(new File(attrPath), new File(defaultTempFolder), true);
+            FileUtil.del(attrPath.substring(0, attrPath.lastIndexOf("\\")));
+        } catch (IOException e) {
             throw new RuntimeException(e);
         }
         File zip = ZipUtil.zip(defaultTempFolder);
         FileUtil.del(defaultTempFolder + File.separator);
-        ControllerUtil.writeFileToResponse(response,zip.getAbsoluteFile());
+        ControllerUtil.writeFileToResponse(response, zip.getAbsoluteFile());
     }
 
     /**
      * 瀵煎叆涓氬姟绫诲瀷
+     *
      * @param file 涓婁紶鐨勬枃浠�
      * @return
      */
@@ -1392,8 +1419,8 @@
             }
         }
         //TODO锛氬鍏ュ睘鎬э紝浣嗘槸杩欎釜閫昏緫瀹為檯涓婂瓨鍦ㄤ竴浜涢棶棰橈紝瀵煎叆鐨勫睘鎬у彧鏄笟鍔$被鍨嬬殑灞炴�т笉搴旇鍘荤粰灞炴�ф睜瀵煎叆锛屽彲鑳芥槸鎯崇殑灞炴�т笉瀛樺湪鐨勫氨鏂板涓�娆�
-        BaseResult baseResult = attributeService.importAttributes(attrExcel,true);
-        if(!baseResult.isSuccess()){
+        BaseResult baseResult = attributeService.importAttributes(attrExcel, true);
+        if (!baseResult.isSuccess()) {
             //鍒犻櫎涓婁紶鐨勬枃浠跺す
             FileUtil.del(defaultTempFolder + File.separator);
             return baseResult;
@@ -1408,13 +1435,14 @@
                 return BaseResult.fail(FrameWorkLangCodeConstant.IMPORT_FAIL, new String[]{"娌℃湁瀵煎叆鐨勯摼鎺ユ枃浠躲�傚鍏ョ粓姝紒"});
             }
         }
-        try{
+        try {
             //1銆佽鍙杄xcel涓殑鏁版嵁锛岀粍鎴愬璞�
             ReadExcelOption excelOption = new ReadExcelOption();
-            List<OsBtmTypePO> poList = ExcelUtil.readDataObjectFromExcel(btmExcel, OsBtmTypePO.class,excelOption,(value, po, fieldName)->{});
+            List<OsBtmTypePO> poList = ExcelUtil.readDataObjectFromExcel(btmExcel, OsBtmTypePO.class, excelOption, (value, po, fieldName) -> {
+            });
             //鍘婚櫎閮芥槸绌虹殑鎯呭喌
-            if(CollectionUtils.isEmpty(poList)){
-                return BaseResult.fail(ExcelLangCodeConstant.IMPORT_CONTENT_NULL,new String[]{});
+            if (CollectionUtils.isEmpty(poList)) {
+                return BaseResult.fail(ExcelLangCodeConstant.IMPORT_CONTENT_NULL, new String[]{});
             }
             //褰撳墠excel涓槸鍚﹂噸澶嶇敤鐨勫垽閲峂ap:锛坘ey锛氬垽閲嶅睘鎬э紝value锛氳鍙凤級
             Map<String, String> excelReapeat = new HashMap<>();
@@ -1422,25 +1450,25 @@
 
             //鍒ゆ柇蹇呭~灞炴�ф槸鍚︿负绌猴紝鐢ㄦ埛鏄惁宸插瓨鍦紝浠ュ強閮ㄩ棬鏄惁濉敊绛夋牎楠岄�昏緫
             poList.stream().forEach(osBtmTypePO -> {
-                if(Func.isBlank(osBtmTypePO.getName())){//灞炴�у悕鍒ょ┖
-                    throw new VciBaseException("绗��"+osBtmTypePO.getRowIndex()+"銆戣锛宯ame");
-                }else if(osBtmTypePO.getName().length() > maxLength){
-                    throw new VciBaseException("绗��"+osBtmTypePO.getRowIndex()+"銆戣锛屼笟鍔$被鍨嬪悕闀垮害涓嶈兘瓒呰繃" + maxLength);
-                }else if(!osBtmTypePO.getName().matches("^[A-Za-z]+$")){
-                    throw new VciBaseException("绗��"+osBtmTypePO.getRowIndex()+"銆戣锛屼笟鍔$被鍨嬪悕绉板彧鑳戒负鑻辨枃瀛楁瘝");
-                }else if (osBtmTypePO.getName().length() > maxLength) {
-                    throw new VciBaseException("绗��"+osBtmTypePO.getRowIndex()+"銆戣锛屼笟鍔$被鍨嬪悕闀垮害涓嶈兘瓒呰繃" + maxLength);
-                }else if(excelReapeat.containsKey(osBtmTypePO.getName())){//涓氬姟绫诲瀷鍚嶅湪琛ㄦ牸涓垽閲�
-                    throw new VciBaseException("绗��"+excelReapeat.get(osBtmTypePO.getName())+"銆戣鍜岀銆�"+osBtmTypePO.getRowIndex()+"銆戣鏁版嵁锛屼笟鍔$被鍨嬪悕閲嶅");
-                }else if (Func.isBlank(osBtmTypePO.getLifeCycle())) {
-                    throw new VciBaseException("绗��"+osBtmTypePO.getRowIndex()+"銆戣锛岀敓鍛藉懆鏈熶笉鑳戒负绌�");
-                }else if ("true".equalsIgnoreCase(osBtmTypePO.getRevInput()) && Func.isBlank(osBtmTypePO.getRevRuleName())) {
-                    throw new VciBaseException("绗��"+osBtmTypePO.getRowIndex()+"銆戣锛岀増鏈彿瑙勫垯涓嶈兘涓虹┖");
+                if (Func.isBlank(osBtmTypePO.getName())) {//灞炴�у悕鍒ょ┖
+                    throw new VciBaseException("绗��" + osBtmTypePO.getRowIndex() + "銆戣锛宯ame");
+                } else if (osBtmTypePO.getName().length() > maxLength) {
+                    throw new VciBaseException("绗��" + osBtmTypePO.getRowIndex() + "銆戣锛屼笟鍔$被鍨嬪悕闀垮害涓嶈兘瓒呰繃" + maxLength);
+                } else if (!osBtmTypePO.getName().matches("^[A-Za-z]+$")) {
+                    throw new VciBaseException("绗��" + osBtmTypePO.getRowIndex() + "銆戣锛屼笟鍔$被鍨嬪悕绉板彧鑳戒负鑻辨枃瀛楁瘝");
+                } else if (osBtmTypePO.getName().length() > maxLength) {
+                    throw new VciBaseException("绗��" + osBtmTypePO.getRowIndex() + "銆戣锛屼笟鍔$被鍨嬪悕闀垮害涓嶈兘瓒呰繃" + maxLength);
+                } else if (excelReapeat.containsKey(osBtmTypePO.getName())) {//涓氬姟绫诲瀷鍚嶅湪琛ㄦ牸涓垽閲�
+                    throw new VciBaseException("绗��" + excelReapeat.get(osBtmTypePO.getName()) + "銆戣鍜岀銆�" + osBtmTypePO.getRowIndex() + "銆戣鏁版嵁锛屼笟鍔$被鍨嬪悕閲嶅");
+                } else if (Func.isBlank(osBtmTypePO.getLifeCycle())) {
+                    throw new VciBaseException("绗��" + osBtmTypePO.getRowIndex() + "銆戣锛岀敓鍛藉懆鏈熶笉鑳戒负绌�");
+                } else if ("true".equalsIgnoreCase(osBtmTypePO.getRevInput()) && Func.isBlank(osBtmTypePO.getRevRuleName())) {
+                    throw new VciBaseException("绗��" + osBtmTypePO.getRowIndex() + "銆戣锛岀増鏈彿瑙勫垯涓嶈兘涓虹┖");
                 }
                 try {
                     BizType historyBtm = platformClientUtil.getBtmService().getBizTypeByName(osBtmTypePO.getName());
                     //宸叉湁姝ゆ暟鎹繘琛屽垹闄よ鐩�
-                    if(historyBtm != null && !historyBtm.name.equals("")){
+                    if (historyBtm != null && !historyBtm.name.equals("")) {
                         platformClientUtil.getBtmService().deleteBizType(historyBtm);
                     }
                 } catch (PLException e) {
@@ -1448,7 +1476,7 @@
                 }
 
                 //灞炴�у悕excel涓垽閲嶅鐞�
-                excelReapeat.put(osBtmTypePO.getName(),osBtmTypePO.getRowIndex());
+                excelReapeat.put(osBtmTypePO.getName(), osBtmTypePO.getRowIndex());
                 BizType bizType = new BizType();
                 bizType.name = osBtmTypePO.getName();
                 bizType.label = osBtmTypePO.getLable();
@@ -1472,12 +1500,12 @@
                     throw new RuntimeException(e);
                 }
             });
-        }catch (Exception e){
-            if(logger.isErrorEnabled()){
-                logger.error("璇诲彇excel鍐呭鏃舵垨淇濆瓨涓氬姟绫诲瀷淇℃伅鏃跺嚭鐜颁簡閿欒锛屽叿浣撳師鍥狅細",VciBaseUtil.getExceptionMessage(e));
+        } catch (Exception e) {
+            if (logger.isErrorEnabled()) {
+                logger.error("璇诲彇excel鍐呭鏃舵垨淇濆瓨涓氬姟绫诲瀷淇℃伅鏃跺嚭鐜颁簡閿欒锛屽叿浣撳師鍥狅細", VciBaseUtil.getExceptionMessage(e));
             }
             e.printStackTrace();
-            return BaseResult.fail(VciBaseUtil.getExceptionMessage(e),new String[]{},e);
+            return BaseResult.fail(VciBaseUtil.getExceptionMessage(e), new String[]{}, e);
         }
         //鍒犻櫎涓婁紶鐨勬枃浠跺す
         FileUtil.del(defaultTempFolder + File.separator);
@@ -1486,12 +1514,13 @@
 
     /**
      * 鑾峰彇闇�瑕佷慨澶嶇殑浼猻ql
+     *
      * @param dbCheckMap
      * @return
      */
     private List<String> getRepairDML(Map<String, String> dbCheckMap) {
         List<String> list = new ArrayList<String>();
-        for(Iterator<String> ite = dbCheckMap.keySet().iterator(); ite.hasNext();){
+        for (Iterator<String> ite = dbCheckMap.keySet().iterator(); ite.hasNext(); ) {
             String type = ite.next();
             String dml = dbCheckMap.get(type);
             list.add(type + "/DML" + dml);
@@ -1515,18 +1544,18 @@
             e.printStackTrace();
             String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
             logger.error(exceptionMessage);
-            throw new PLException("500",new String[]{exceptionMessage});
+            throw new PLException("500", new String[]{exceptionMessage});
         }
         return flag;
     }
 
-    private List<Tree> getChildren(List<OsBtmTypeVO> osBtmTypeVOS,OsBtmTypeVO parentBIzType){
-        List<Tree> trees= new ArrayList<>();
+    private List<Tree> getChildren(List<OsBtmTypeVO> osBtmTypeVOS, OsBtmTypeVO parentBIzType) {
+        List<Tree> trees = new ArrayList<>();
         for (OsBtmTypeVO bizType : osBtmTypeVOS) {
-            if(StringUtils.isBlank(bizType.getfName())){
+            if (StringUtils.isBlank(bizType.getfName())) {
                 continue;
             }
-            if(bizType.getfName().equals(parentBIzType.getId())){
+            if (bizType.getfName().equals(parentBIzType.getId())) {
                 Tree tree = new Tree();
                 tree.setOid(bizType.getOid());
                 tree.setParentName(parentBIzType.getfName());
@@ -1534,7 +1563,7 @@
                 tree.setLeaf(true);
                 tree.setText(bizType.getDescription());
                 tree.setAttributes(WebUtil.objectToMapString(bizType));
-                tree.setChildren(getChildren(osBtmTypeVOS,bizType));
+                tree.setChildren(getChildren(osBtmTypeVOS, bizType));
                 trees.add(tree);
             }
         }
@@ -1544,12 +1573,12 @@
     /**
      * 灏嗕笟鍔$被鍨嬫嫾鎺son
      *
-     * @param nodeVOList  瀵硅薄鑺傜偣鐨勪俊鎭�
-     * @param relationVOList  鍏崇郴鐨勪俊鎭�
-     * @param btmTypeVO 涓氬姟绫诲瀷鏄剧ず瀵硅薄
-     * @param hasRefer 鍖呭惈鍙傜収
+     * @param nodeVOList     瀵硅薄鑺傜偣鐨勪俊鎭�
+     * @param relationVOList 鍏崇郴鐨勪俊鎭�
+     * @param btmTypeVO      涓氬姟绫诲瀷鏄剧ず瀵硅薄
+     * @param hasRefer       鍖呭惈鍙傜収
      */
-    private void splicingBtmType2Json(List<OsERNodeVO> nodeVOList, List<OsERRelationVO> relationVOList, OsBtmTypeVO btmTypeVO,boolean hasRefer) {
+    private void splicingBtmType2Json(List<OsERNodeVO> nodeVOList, List<OsERRelationVO> relationVOList, OsBtmTypeVO btmTypeVO, boolean hasRefer) {
         OsERNodeVO nodeVO = new OsERNodeVO();
         nodeVO.setKey(btmTypeVO.getId() + " " + btmTypeVO.getName());
         List<OsERNodePropertyVO> itemList = new ArrayList<>();
@@ -1557,15 +1586,15 @@
             OsERNodePropertyVO nodePropertyVO = new OsERNodePropertyVO();
             nodePropertyVO.setName(attribute.getId() + " " + attribute.getName());
             nodePropertyVO.setKey("oid".equals(attribute.getId().toLowerCase()));
-            if(StringUtils.isNotBlank(attribute.getReferBtmTypeId())){
+            if (StringUtils.isNotBlank(attribute.getReferBtmTypeId())) {
                 //鍙傜収鐨勫睘鎬э紝璁剧疆涓洪粍鑹�
                 nodePropertyVO.setColor("#FEDD32FF");
-            }else{
+            } else {
                 nodePropertyVO.setColor("#000");
             }
             itemList.add(nodePropertyVO);
             //鍒ゆ柇鍙傜収
-            if(hasRefer) {
+            if (hasRefer) {
                 selectReferenceBtmType(attribute, btmTypeVO, nodeVOList, relationVOList);
             }
         });
@@ -1576,9 +1605,9 @@
     /**
      * 鍒ゆ柇涓氬姟绫诲瀷鐨勫睘鎬ф槸涓嶆槸鍙傜収绫诲瀷锛屽苟灏嗗弬鐓ф坊鍔犲埌ER鍥句腑
      *
-     * @param attribute     涓氬姟绫诲瀷灞炴��
-     * @param nodeVOList  鑺傜偣淇℃伅
-     * @param btmTypeVO 涓氬姟绫诲瀷
+     * @param attribute      涓氬姟绫诲瀷灞炴��
+     * @param nodeVOList     鑺傜偣淇℃伅
+     * @param btmTypeVO      涓氬姟绫诲瀷
      * @param relationVOList 鍏崇郴淇℃伅
      */
     private void selectReferenceBtmType(OsBtmTypeAttributeVO attribute, OsBtmTypeVO btmTypeVO,
@@ -1592,14 +1621,14 @@
             nodeVO.setKey(referenceBtmType.getId() + " " + referenceBtmType.getName());
 
             List<OsERNodePropertyVO> items = new ArrayList<>();
-            if(referenceBtmType.getId().equalsIgnoreCase(btmTypeVO.getId())){
+            if (referenceBtmType.getId().equalsIgnoreCase(btmTypeVO.getId())) {
                 //鍙傜収鑷繁鐨勫唴瀹�
                 OsERRelationVO relationVO = new OsERRelationVO();
                 relationVO.setTo(referenceBtmType.getId() + " " + referenceBtmType.getName());
                 relationVO.setFrom(btmTypeVO.getId() + " " + btmTypeVO.getName());
                 relationVO.setToText("鑷弬鐓�");
                 relationVOList.add(relationVO);
-            }else {
+            } else {
                 referenceBtmAttributes.forEach(attr -> {
                     OsERNodePropertyVO nodePropertyVO = new OsERNodePropertyVO();
                     nodePropertyVO.setName(attr.getId() + " " + attr.getName());
@@ -1622,23 +1651,23 @@
     /**
      * 鍔犺浇涓氬姟绫诲瀷鎵�鍏宠仈鐨勯摼鎺ョ被鍨�
      *
-     * @param nodeVOList  鑺傜偣淇℃伅
+     * @param nodeVOList     鑺傜偣淇℃伅
      * @param relationVOList 鍏崇郴鐨勪俊鎭�
-     * @param btmTypeVO    涓氬姟绫诲瀷
+     * @param btmTypeVO      涓氬姟绫诲瀷
      */
     private void loadAllLinkTypeByBtmType(List<OsERNodeVO> nodeVOList, List<OsERRelationVO> relationVOList, OsBtmTypeVO btmTypeVO) {
         Map<String, OsLinkTypeVO> linkTypeVOMap = linkTypeService.selectAllLinkMap();
         Collection<OsLinkTypeVO> linkTypeVOS = linkTypeVOMap.values();
         Set<OsLinkTypeVO> fromLinkTypeVOList = linkTypeVOS.stream().filter(link ->
-            Arrays.stream(link.getFromBtmType().split(",")).anyMatch(s->s.equalsIgnoreCase(btmTypeVO.getId()))
+                Arrays.stream(link.getFromBtmType().split(",")).anyMatch(s -> s.equalsIgnoreCase(btmTypeVO.getId()))
         ).collect(Collectors.toSet());
         Set<OsLinkTypeVO> toLinkTypeList = linkTypeVOS.stream().filter(link ->
-                Arrays.stream(link.getToBtmType().split(",")).anyMatch(s->s.equalsIgnoreCase(btmTypeVO.getId()))).collect(Collectors.toSet());
+                Arrays.stream(link.getToBtmType().split(",")).anyMatch(s -> s.equalsIgnoreCase(btmTypeVO.getId()))).collect(Collectors.toSet());
         List<OsLinkTypeVO> linkTypeVOList = new ArrayList<>();
         linkTypeVOList.addAll(fromLinkTypeVOList);
         linkTypeVOList.addAll(toLinkTypeList);
         if (!CollectionUtils.isEmpty(linkTypeVOList)) {
-            splicingLinkType2Json(nodeVOList, relationVOList,linkTypeVOList,btmTypeVO,false);
+            splicingLinkType2Json(nodeVOList, relationVOList, linkTypeVOList, btmTypeVO, false);
         }
 
     }
@@ -1646,31 +1675,31 @@
     /**
      * 灏嗛摼鎺ョ被鍨嬫嫾鎺ユ垚json
      *
-     * @param nodeVOList  鑺傜偣淇℃伅
-     * @param relationVOList  鍏崇郴淇℃伅
-     * @param linkTypeVOs 閾炬帴绫诲瀷
-     * @param btmTypeVO 涓氬姟绫诲瀷鐨勬樉绀哄璞�
-     * @param used 鏄惁涓鸿浣跨敤
+     * @param nodeVOList     鑺傜偣淇℃伅
+     * @param relationVOList 鍏崇郴淇℃伅
+     * @param linkTypeVOs    閾炬帴绫诲瀷
+     * @param btmTypeVO      涓氬姟绫诲瀷鐨勬樉绀哄璞�
+     * @param used           鏄惁涓鸿浣跨敤
      */
     private void splicingLinkType2Json(List<OsERNodeVO> nodeVOList, List<OsERRelationVO> relationVOList,
-                                       List<OsLinkTypeVO> linkTypeVOs,OsBtmTypeVO btmTypeVO,boolean used) {
+                                       List<OsLinkTypeVO> linkTypeVOs, OsBtmTypeVO btmTypeVO, boolean used) {
         linkTypeVOs.forEach(link -> {
             List<OsLinkTypeAttributeVO> attributeList = link.getAttributes();
-            OsERNodeVO nodeVO= new OsERNodeVO();
+            OsERNodeVO nodeVO = new OsERNodeVO();
             nodeVO.setKey(link.getId() + " " + link.getName());
             List<OsERNodePropertyVO> items = new ArrayList<>();
             attributeList.forEach(attr -> {
                 OsERNodePropertyVO nodePropertyVO = new OsERNodePropertyVO();
                 nodePropertyVO.setName(attr.getId() + " " + attr.getName());
                 nodePropertyVO.setKey("oid".equals(attr.getId().toLowerCase()));
-                if(StringUtils.isNotBlank(attr.getReferBtmTypeId())) {
+                if (StringUtils.isNotBlank(attr.getReferBtmTypeId())) {
                     nodePropertyVO.setColor("#FEDD32FF");
-                }else {
+                } else {
                     nodePropertyVO.setColor("#1c446f");
                 }
                 items.add(nodePropertyVO);
                 //鍒ゆ柇鍙傜収
-                if(!used) {
+                if (!used) {
                     selectReferenceLinkType(attr, link, nodeVOList, relationVOList);
                 }
             });
@@ -1682,26 +1711,26 @@
 
             nodeVOList.add(nodeVO);
 
-            if(used){
+            if (used) {
                 relationVO.setText("琚紩鐢�");
             }
             //濡傛灉褰撳墠鐨刦rom绔紝閭d箞灏辨樉绀簍o绔殑
             //濡傛灉褰撳墠鐨勬槸to绔殑锛岄偅涔堝氨鏄剧ずfrom绔殑鍐呭
-            if(Arrays.stream(link.getFromBtmType().split(",")).anyMatch(s->s.equalsIgnoreCase(btmTypeVO.getId()))){
+            if (Arrays.stream(link.getFromBtmType().split(",")).anyMatch(s -> s.equalsIgnoreCase(btmTypeVO.getId()))) {
                 //杩欎釜鏄痜rom绔�
-               if(!used) {
-                   relationVO.setToText("from绔�");
-               }
+                if (!used) {
+                    relationVO.setToText("from绔�");
+                }
                 //鎵捐繖涓摼鎺ョ被鍨嬬殑to绔殑涓氬姟绫诲瀷
-               link.getToBtmTypeVOS().stream().forEach(toBtm->{
-                    splicingBtmType2JsonForLink(nodeVOList,relationVOList,link,toBtm,true);
-               });
-            }else{
-                if(!used) {
+                link.getToBtmTypeVOS().stream().forEach(toBtm -> {
+                    splicingBtmType2JsonForLink(nodeVOList, relationVOList, link, toBtm, true);
+                });
+            } else {
+                if (!used) {
                     relationVO.setToText("to绔�");
                 }
-                link.getFromBtmTypeVOS().stream().forEach(fromBtm->{
-                    splicingBtmType2JsonForLink(nodeVOList,relationVOList,link,fromBtm,false);
+                link.getFromBtmTypeVOS().stream().forEach(fromBtm -> {
+                    splicingBtmType2JsonForLink(nodeVOList, relationVOList, link, fromBtm, false);
                 });
             }
             relationVOList.add(relationVO);
@@ -1710,11 +1739,12 @@
 
     /**
      * 閾炬帴绫诲瀷鍏抽敭鐨勪笟鍔$被鍨�
-     * @param nodeVOList 瀵硅薄鍒楄〃
+     *
+     * @param nodeVOList     瀵硅薄鍒楄〃
      * @param relationVOList 鍏宠仈鍏崇郴鍒楄〃
-     * @param link 閾炬帴绫诲瀷
-     * @param btmTypeVO 涓氬姟绫诲瀷
-     * @param to 鏄惁涓簍o绔�
+     * @param link           閾炬帴绫诲瀷
+     * @param btmTypeVO      涓氬姟绫诲瀷
+     * @param to             鏄惁涓簍o绔�
      */
     private void splicingBtmType2JsonForLink(List<OsERNodeVO> nodeVOList, List<OsERRelationVO> relationVOList, OsLinkTypeVO link, OsBtmTypeVO btmTypeVO, boolean to) {
         OsERNodeVO nodeVO = new OsERNodeVO();
@@ -1732,7 +1762,7 @@
         OsERRelationVO relationVO = new OsERRelationVO();
         relationVO.setFrom(link.getId() + " " + link.getName());
         relationVO.setTo(btmTypeVO.getId() + " " + btmTypeVO.getName());
-        relationVO.setToText(to?"to绔�":"from绔�");
+        relationVO.setToText(to ? "to绔�" : "from绔�");
         relationVOList.add(relationVO);
         nodeVOList.add(nodeVO);
     }
@@ -1740,12 +1770,12 @@
     /**
      * 鍒ゆ柇閾炬帴绫诲瀷鐨勫睘鎬ф槸涓嶆槸鍙傜収绫诲瀷锛屽苟灏嗗弬鐓ф坊鍔犲埌ER鍥句腑
      *
-     * @param attr          閾炬帴绫诲瀷鐨勫睘鎬�
-     * @param linkTypeVO 閾炬帴绫诲瀷鐨勫唴瀹�
-     * @param nodeVOList 鑺傜偣瀵硅薄
+     * @param attr           閾炬帴绫诲瀷鐨勫睘鎬�
+     * @param linkTypeVO     閾炬帴绫诲瀷鐨勫唴瀹�
+     * @param nodeVOList     鑺傜偣瀵硅薄
      * @param relationVOList 鍏崇郴瀵硅薄
      */
-    private void selectReferenceLinkType(OsLinkTypeAttributeVO attr, OsLinkTypeVO linkTypeVO,List<OsERNodeVO> nodeVOList, List<OsERRelationVO> relationVOList) {
+    private void selectReferenceLinkType(OsLinkTypeAttributeVO attr, OsLinkTypeVO linkTypeVO, List<OsERNodeVO> nodeVOList, List<OsERRelationVO> relationVOList) {
         if (StringUtils.isNotBlank(attr.getReferBtmTypeId())) {
             //鏄弬鐓х被鍨嬬殑
             OsBtmTypeVO referenceBtmType = getBtmById(attr.getReferBtmTypeId());
@@ -1775,7 +1805,7 @@
     /**
      * 灏佽鍒犻櫎鍏ㄩ儴绫诲瀷鐩稿叧鐨勬煡璇㈡柟娉曠殑鍐呴儴绫�
      */
-    private class DeleteType{
+    private class DeleteType {
 
         private List<String> exceptBts, exceptAbs, exceptEnums, exceptRev, exceptLCs, exceptStates;
 
@@ -1786,20 +1816,21 @@
 
         /**
          * 鑾峰彇闇�瑕佸垹闄ょ殑涓氬姟绫诲瀷
+         *
          * @return
          */
         public List<BizType> getDelBtList() throws PLException {
             List<BizType> list = new ArrayList<>();
             BizType[] bts = platformClientUtil.getBtmService().getBizTypes("");
-            for(BizType bt : bts){
+            for (BizType bt : bts) {
                 boolean exceptFlag = false;
-                for(String except : exceptBts){
-                    if(except.equalsIgnoreCase(bt.name)){
+                for (String except : exceptBts) {
+                    if (except.equalsIgnoreCase(bt.name)) {
                         exceptFlag = true;
                         break;
                     }
                 }
-                if(!exceptFlag){
+                if (!exceptFlag) {
                     list.add(bt);
                 }
             }
@@ -1808,6 +1839,7 @@
 
         /**
          * 鑾峰彇闇�瑕佸垹闄ょ殑閾炬帴绫诲瀷
+         *
          * @return
          */
         public List<LinkType> getDelLtList() throws PLException {
@@ -1817,6 +1849,7 @@
 
         /**
          * 鑾峰彇寰呭垹闄ょ殑灞炴��
+         *
          * @return
          */
         public List<String> getDelAbList() {
@@ -1829,26 +1862,26 @@
             }
             //渚濇嵁淇濈暀鐨勭被鍨嬫瀯閫犱繚鐣欑殑灞炴��
             exceptAbs = new ArrayList<String>();
-            for(String except : exceptBts){
+            for (String except : exceptBts) {
                 String[] btmApNameArray = null;
                 try {
                     btmApNameArray = platformClientUtil.getBtmService().getAttributeNames(except);
                 } catch (PLException e) {
                     e.printStackTrace();
                 }
-                if(btmApNameArray != null){
-                    for(String abName : btmApNameArray){
-                        if(!exceptAbs.contains(abName)){
+                if (btmApNameArray != null) {
+                    for (String abName : btmApNameArray) {
+                        if (!exceptAbs.contains(abName)) {
                             exceptAbs.add(abName);
                         }
                     }
                 }
             }
             //鏋勯�犲彲鍒犻櫎鐨勫睘鎬�
-            if(attribItems != null){
-                for(AttributeDef ab : attribItems){
+            if (attribItems != null) {
+                for (AttributeDef ab : attribItems) {
                     String abName = ab.name;
-                    if(!exceptAbs.contains(abName)){
+                    if (!exceptAbs.contains(abName)) {
                         list.add(abName);
                     }
                 }
@@ -1858,6 +1891,7 @@
 
         /**
          * 鑾峰彇寰呭垹闄ょ殑鏋氫妇绫诲瀷
+         *
          * @return
          */
         public List<EnumType> getDelEnumList() {
@@ -1867,15 +1901,15 @@
                 exceptEnums = new ArrayList<String>();
                 EnumType[] emItems = ClientServiceProvider.getOMDService().getEnumService().getEnumTypes("", 0, 0);
                 AttributeDef[] abs = platformClientUtil.getAttributeService().getAttributeDefsByNames(exceptAbs.toArray(new String[0]));
-                for(AttributeDef ab : abs){
+                for (AttributeDef ab : abs) {
                     OtherInfo otherInfo = OtherInfo.getOtherInfoByText(ab.other);
                     String enumName = otherInfo.getEnumName();
-                    if(enumName != null && !enumName.equals("") && !exceptEnums.contains(enumName)){
+                    if (enumName != null && !enumName.equals("") && !exceptEnums.contains(enumName)) {
                         exceptEnums.add(enumName);
                     }
                 }
-                for(EnumType em : emItems){
-                    if(!exceptEnums.contains(em.name)){
+                for (EnumType em : emItems) {
+                    if (!exceptEnums.contains(em.name)) {
                         list.add(em);
                     }
                 }
@@ -1887,17 +1921,18 @@
 
         /**
          * 鑾峰彇寰呭垹闄ょ殑鐢熷懡鍛ㄦ湡
+         *
          * @return
          */
-        public List<LifeCycle> getDelLCList(){
+        public List<LifeCycle> getDelLCList() {
             List<LifeCycle> list = new ArrayList<LifeCycle>();
             exceptLCs = new ArrayList<String>();
             exceptStates = new ArrayList<String>();
-            for(String btName : exceptBts){
+            for (String btName : exceptBts) {
                 try {
                     BizType bt = platformClientUtil.getBtmService().getBizTypeByName(btName);
                     String lcName = bt.lifeCycle;
-                    if(lcName != null && !lcName.equals("") && !exceptLCs.contains(lcName)){
+                    if (lcName != null && !lcName.equals("") && !exceptLCs.contains(lcName)) {
                         exceptLCs.add(lcName);
                     }
                 } catch (PLException e) {
@@ -1911,15 +1946,15 @@
             } catch (PLException e) {
                 e.printStackTrace();
             }
-            if(lcs != null){
-                for(LifeCycle lc : lcs){
+            if (lcs != null) {
+                for (LifeCycle lc : lcs) {
                     String name = lc.name;
-                    if(name != null && !name.equals("") && !exceptLCs.contains(name)){
+                    if (name != null && !name.equals("") && !exceptLCs.contains(name)) {
                         list.add(lc);
-                    }else{
+                    } else {
                         //淇濈暀鐨勭姸鎬佹睜
                         Bound[] bounds = lc.bounds;
-                        for(Bound bound : bounds){
+                        for (Bound bound : bounds) {
                             String sName = bound.name;
                             exceptStates.add(sName);
                         }
@@ -1931,9 +1966,10 @@
 
         /**
          * 鑾峰彇寰呭垹闄ょ殑鐘舵��
+         *
          * @return
          */
-        public List<StatePool> getDelSPList(){
+        public List<StatePool> getDelSPList() {
             List<StatePool> list = new ArrayList<StatePool>();
             StatePool[] states = null;
             try {
@@ -1941,10 +1977,10 @@
             } catch (PLException e) {
                 e.printStackTrace();
             }
-            if(states != null){
-                for(StatePool state : states){
+            if (states != null) {
+                for (StatePool state : states) {
                     String name = state.name;
-                    if(name != null && !name.equals("") && !exceptStates.contains(name)){
+                    if (name != null && !name.equals("") && !exceptStates.contains(name)) {
                         list.add(state);
                     }
                 }
@@ -1954,16 +1990,17 @@
 
         /**
          * 鑾峰彇寰呭垹闄ょ殑鐗堟湰瑙勫垯
+         *
          * @return
          */
-        public List<VersionRule> getDelVRList(){
+        public List<VersionRule> getDelVRList() {
             List<VersionRule> list = new ArrayList<VersionRule>();
             exceptRev = new ArrayList<String>();
-            for(String btName : exceptBts){
+            for (String btName : exceptBts) {
                 try {
                     BizType bt = platformClientUtil.getBtmService().getBizTypeByName(btName);
                     String revName = bt.revRuleName;
-                    if(revName != null && !revName.equals("") && !exceptRev.contains(revName)){
+                    if (revName != null && !revName.equals("") && !exceptRev.contains(revName)) {
                         exceptRev.add(revName);
                     }
                 } catch (PLException e) {
@@ -1976,10 +2013,10 @@
             } catch (PLException e) {
                 e.printStackTrace();
             }
-            if(revs != null){
-                for(VersionRule rev : revs){
+            if (revs != null) {
+                for (VersionRule rev : revs) {
                     String name = rev.name;
-                    if(name != null && !name.equals("") && !exceptRev.contains(name)){
+                    if (name != null && !name.equals("") && !exceptRev.contains(name)) {
                         list.add(rev);
                     }
                 }
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 3ef9a19..da050fc 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.qtm.QTInfo;
 import com.vci.corba.portal.PortalService;
 import com.vci.corba.portal.data.*;
 import com.vci.dto.RoleRightDTO;
@@ -20,7 +21,7 @@
 import com.vci.starter.web.pagemodel.DataGrid;
 import com.vci.starter.web.pagemodel.SessionInfo;
 import com.vci.starter.web.util.*;
-import com.vci.web.redis.RedisService;
+import com.vci.starter.web.redis.RedisService;
 import com.vci.web.service.OsBtmServiceI;
 import com.vci.web.service.UIManagerServiceI;
 import com.vci.web.util.*;
@@ -2118,7 +2119,6 @@
         return roleRightVOS;
     }
 
-
     /**
      * UI瑙掕壊瀵硅薄杞崲
      * @param infos
@@ -2267,7 +2267,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;
@@ -2333,6 +2333,220 @@
         return res;
     }
 
+    /**
+     * 涓氬姟绫诲瀷銆佹簮瀵硅薄绫诲瀷銆侀《灞傝妭鐐规樉绀虹被鍨嬬瓑閮借皟鐢ㄨ繖涓帴鍙f煡璇�
+     * @param baseQueryObject
+     * @return
+     * @throws PLException
+     */
+    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());
+
+
+        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 = 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);
+        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;
+    }
+
+    /**
+     * 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() <= 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 = 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);
+        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() <= 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 = 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);
+        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() <= 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 = 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);
+        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;
+    }
+
     //鍩虹鍏叡妫�鏌ユ帴鍙�
     private abstract class BaseComptInter {
 
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/PlatformClientUtil.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/PlatformClientUtil.java
index 5798c87..a2e9a69 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/PlatformClientUtil.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/PlatformClientUtil.java
@@ -4,7 +4,6 @@
 import com.vci.corba.bofactory.BOFactoryServicePrx;
 import com.vci.corba.common.PLException;
 import com.vci.corba.framework.FrameworkServicePrx;
-import com.vci.corba.log.LogServicePrx;
 import com.vci.corba.omd.atm.AttPoolServicePrx;
 import com.vci.corba.omd.btm.BTMServicePrx;
 import com.vci.corba.omd.data.AttributeValue;
@@ -14,6 +13,7 @@
 import com.vci.corba.omd.qtm.QTDServicePrx;
 import com.vci.corba.omd.stm.StatePoolServicePrx;
 import com.vci.corba.omd.vrm.VersionRuleServicePrx;
+import com.vci.corba.pllog.LogServicePrx;
 import com.vci.corba.portal.PortalServicePrx;
 import com.vci.corba.query.ObjectQueryServicePrx;
 import com.vci.corba.volume.VolumeServicePrx;
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/resources/properties/ice.properties b/Source/plt-web/plt-web-parent/plt-web/src/main/resources/properties/ice.properties
index 2fae8b8..3259ca1 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/resources/properties/ice.properties
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/resources/properties/ice.properties
@@ -1,4 +1,5 @@
 #NameService=PLT
 Adapter=PLT
-Endpoints=default -h localhost -p 4601
+Endpoints=default -h localhost -p 4061
+Ice.MessageSizeMax=1048576
 #Endpoints=VCI-PLT/Locator:default -h localhost -p 4601
\ No newline at end of file
diff --git a/Source/plt-web/plt-web-ui/src/api/systemModel/systemConfig/api.js b/Source/plt-web/plt-web-ui/src/api/systemModel/systemConfig/api.js
index 9f2141c..e96a110 100644
--- a/Source/plt-web/plt-web-ui/src/api/systemModel/systemConfig/api.js
+++ b/Source/plt-web/plt-web-ui/src/api/systemModel/systemConfig/api.js
@@ -9,6 +9,14 @@
   });
 }
 
+// 鑾峰彇褰撳墠鐢ㄦ埛鍦ㄧ嚎浜烘暟
+export function getOnlineUsersNum() {
+  return request({
+    url: "/api/hmSysModConfigController/getOnlineUsersNum",
+    method: "get",
+  });
+}
+
 // 閰嶇疆椤规煡璇�
 export function getAppConfigDetailsByID(params) {
   return request({
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/index.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/index.vue
index 4bdc47c..3b809cc 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/index.vue
@@ -151,6 +151,8 @@
         });
         this.treeData[0].children = data;
         loading.close();
+      }).catch(error=>{
+        loading.close();
       })
     },
     // 澶勭悊鏍戝舰缁撴瀯
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/index.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/index.vue
index b8cc2f9..36166ce 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/index.vue
@@ -185,6 +185,8 @@
         });
         this.treeData[0].children = data;
         loading.close();
+      }).catch(error=>{
+        loading.close();
       })
     },
 
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/queryDefine/index.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/queryDefine/index.vue
index 4a4395b..5b8d5cf 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/queryDefine/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/queryDefine/index.vue
@@ -202,6 +202,8 @@
         });
         this.treeData = data;
         loading.close();
+      }).catch(error=>{
+        loading.close();
       })
     },
     // 澶勭悊涓氬姟绫诲瀷鏍戝舰缁撴瀯
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/index.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/index.vue
index 308c333..e83166d 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/index.vue
@@ -1,26 +1,10 @@
 <template>
   <el-container>
-
     <el-aside>
       <basic-container>
-        <div ref="TreeBox" style="height: calc(100vh - 144px);!important;">
-          <div class="headerCon">
-            <el-button icon="el-icon-plus" plain size="small" type="primary" @click="addClickHandler">鍒涘缓
-            </el-button>
-            <el-button icon="el-icon-edit" plain size="small" type="primary" @click="editClickHandler">淇敼
-            </el-button>
-            <el-button icon="el-icon-delete" plain size="small" type="danger" @click="delClickHandler">鍒犻櫎
-            </el-button>
-            <el-button icon="el-icon-download" plain size="small" type="primary" @click="exportClickHandler">瀵煎嚭
-            </el-button>
-            <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="uploadClickHandler">瀵煎叆
-            </el-button>
-            <el-button class="smallBtn" plain size="small" type="primary"
-                       @click="checkViewClickHandler">鏌ョ湅浣跨敤鑼冨洿
-            </el-button>
-          </div>
+        <div ref="TreeBox" style="height: calc(100vh - 154px);!important;">
           <!-- 宸︿晶鏍�         -->
-          <div style="height:  calc(100vh - 280px);">
+          <div style="height:  calc(100vh - 190px);">
             <avue-tree :data="treeData" :option="treeOption" @node-click="nodeClick">
           <span slot-scope="{ node, data }" class="el-tree-node__label">
            <span style="font-size: 15px">
@@ -36,6 +20,7 @@
 
     <el-main>
       <basic-container>
+
       </basic-container>
     </el-main>
 
@@ -43,8 +28,53 @@
 </template>
 
 <script>
+import {getBizTypes} from "@/api/modeling/businessType/api";
 export default {
-  name: "index"
+  name: "index",
+  data() {
+    return {
+      treeOption: {
+        height: 'auto',
+        defaultExpandedKeys: ['topNode'],
+        menu: false,
+        addBtn: false,
+        props: {
+          label: 'label',
+          value: 'oid',
+          children: 'children'
+        }
+      },
+      nodeRow: {},
+      treeData: [{
+        label: '涓氬姟绫诲瀷鏍�',
+        oid: 'topNode',
+        children: []
+      }],
+    }
+  },
+  created() {
+    this.getTreeList();
+  },
+  methods: {
+    //鏍戣〃鏌ヨ
+    getTreeList() {
+      const loading = this.$loading({});
+      getBizTypes().then(res => {
+        const data = res.data.data.map(item => {
+          item.attributes.label = item.attributes.id;
+          return item.attributes;
+        });
+        this.treeData[0].children = data;
+        loading.close();
+      }).catch(error => {
+        loading.close();
+      })
+    },
+    // 鏍戠偣鍑�
+    nodeClick(row) {
+      this.nodeRow = row;
+    },
+  }
 }
 </script>
 
diff --git a/Source/plt-web/plt-web-ui/src/views/systemModel/systemMonitor/index.vue b/Source/plt-web/plt-web-ui/src/views/systemModel/systemMonitor/index.vue
index 24f5dce..9fb216f 100644
--- a/Source/plt-web/plt-web-ui/src/views/systemModel/systemMonitor/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/systemModel/systemMonitor/index.vue
@@ -4,8 +4,8 @@
       <el-form ref="form" :model="form" label-width="150px">
         <el-form-item label="褰撳墠鍦ㄧ嚎鐢ㄦ埛浜烘暟">
           <div style="display: flex;">
-            <el-input v-model="form.name" :readOnly="true"></el-input>
-            <el-button plain style="margin-left: 10px"> 鍒锋柊</el-button>
+            <el-input v-model="form.currentOnlineUser" :readOnly="true"></el-input>
+            <el-button plain type="primary" style="margin-left: 10px" @click="getOnlineUsersNum"> 鍒锋柊</el-button>
           </div>
         </el-form-item>
       </el-form>
@@ -14,14 +14,31 @@
 </template>
 
 <script>
+import {
+  getOnlineUsersNum
+} from "@/api/systemModel/systemConfig/api"
 export default {
   name: "index",
   data() {
     return {
       form: {
-        name: '0'
+        currentOnlineUser: '0'
       }
     }
+  },
+  created() {
+    this.getOnlineUsersNum();
+  },
+  methods: {
+    // 宸︿晶鏍戞煡璇�
+    getOnlineUsersNum() {
+      getOnlineUsersNum().then(res => {
+        if (res.data.code === 200) {
+          const data = res.data.obj;
+          this.form.currentOnlineUser = data;
+        }
+      })
+    }
   }
 }
 </script>
diff --git a/Source/plt-web/plt-web-ui/src/views/wel/index.vue b/Source/plt-web/plt-web-ui/src/views/wel/index.vue
index 5afdcc8..052b5e6 100644
--- a/Source/plt-web/plt-web-ui/src/views/wel/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/wel/index.vue
@@ -13,12 +13,6 @@
             <img src="https://img.shields.io/badge/JDK-1.8+-green.svg" alt="Build Status"/>
             <img src="https://img.shields.io/badge/Spring%20Cloud-2021-blue.svg" alt="Coverage Status"/>
             <img src="https://img.shields.io/badge/Spring%20Boot-2.7-blue.svg" alt="Downloads"/>
-            <a target="_blank" href="https://bladex.vip">
-              <img src="https://img.shields.io/badge/Saber%20Author-Small%20Chill-ff69b4.svg" alt="Downloads"/>
-            </a>
-            <a target="_blank" href="https://bladex.vip">
-              <img src="https://img.shields.io/badge/Copyright%20-@BladeX-%23ff3f59.svg" alt="Downloads"/>
-            </a>
           </p>
         </basic-container>
       </el-col>

--
Gitblit v1.9.3