From afd5c86b170c2fc63896a2475097cf1654a3c889 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期三, 27 十一月 2024 23:02:07 +0800
Subject: [PATCH] 业务类型树查询接口新增UIDataTree用来专门返回key:list形式的参数,修改多处Map<String,String>为Map<String,Object>。

---
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java                              |    3 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmPwdStrategyQueryServiceImpl.java |    3 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/ReferConfigVO.java                                    |    6 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/OsBtmTypeDTO.java                                           |   13 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIDataServiceImpl.java                             |  164 +++---
 Bin/lib/service/MsgService.jar                                                                                                  |    0 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebLoServiceImpl.java                              |    2 
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/BaseTree.java                            |  226 +++++++++
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/OsBtmTypeVO.java                                      |   13 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java        |    2 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UITreeQuery.java                                          |    6 
 Bin/properties/menuConfig.json                                                                                                  |  231 ++++++---
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/BaseResult.java                          |    8 
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/Tree.java                                |  184 ++-----
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LoginController.java                                 |    3 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebBoServiceI.java                                      |   22 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIDataServiceI.java                                     |    4 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebLoServiceI.java                                      |    7 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java                              |   19 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UIBaseQuery.java                                          |    6 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebBoServiceImpl.java                              |   29 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmUserQueryController.java                 |    1 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UIDataGridQuery.java                                      |    6 
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/UIDataTree.java                          |  395 +++++++++++++++++
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OsBtmTypePO.java                                             |    5 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/UITreeDefineVO.java                                   |    9 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UILinkTypeDataQuery.java                                  |    6 
 27 files changed, 1,016 insertions(+), 357 deletions(-)

diff --git a/Bin/lib/service/MsgService.jar b/Bin/lib/service/MsgService.jar
index 4b9e0bc..b590cae 100644
--- a/Bin/lib/service/MsgService.jar
+++ b/Bin/lib/service/MsgService.jar
Binary files differ
diff --git a/Bin/properties/menuConfig.json b/Bin/properties/menuConfig.json
index ff3052b..3776823 100644
--- a/Bin/properties/menuConfig.json
+++ b/Bin/properties/menuConfig.json
@@ -1,91 +1,150 @@
 {
-  "hasChildren": true,
-  "children": [
-    {
-      "hasChildren": true,
-      "children": [],
-      "id": "systemManagmentNode",
-      "name": "绠$悊鍔熻兘妯″潡",
-      "parentId": "VCIBaseTreeNode",
-      "code": "systemManagmentNode",
-      "alias": "system",
-      "meta": {
-        "keepAlive": false
+  "sysModuleNode": {
+    "hasChildren": true,
+    "children": [
+      {
+        "hasChildren": true,
+        "children": [],
+        "id": "systemManagmentNode",
+        "name": "绠$悊鍔熻兘妯″潡",
+        "parentId": "VCIBaseTreeNode",
+        "code": "systemManagmentNode",
+        "alias": "system",
+        "category": "0",
+        "meta": {
+          "keepAlive": false
+        },
+        "sort": 2,
+        "soruce": "",
+        "path": "views/systemModel/mangeModel/index"
       },
-      "sort": 2,
-      "soruce": "",
-      "path": "views/systemModel/mangeModel/index"
+      {
+        "hasChildren": true,
+        "children": [],
+        "id": "modelManagmentNode",
+        "name": "涓氬姟鍔熻兘妯″潡",
+        "parentId": "VCIBaseTreeNode",
+        "code": "modelManagmentNode",
+        "alias": "model",
+        "category": "0",
+        "meta": {
+          "keepAlive": false
+        },
+        "sort": 3,
+        "soruce": "",
+        "path": "views/systemModel/businessModel/index"
+      },
+      {
+        "hasChildren": true,
+        "children": [],
+        "id": "operateNode",
+        "name": "鎿嶄綔绫诲瀷绠$悊",
+        "parentId": "VCIBaseTreeNode",
+        "code": "operateNode",
+        "alias": "operate",
+        "category": "0",
+        "meta": {
+          "keepAlive": false
+        },
+        "sort": 4,
+        "soruce": "",
+        "path": "views/systemModel/operateType/index"
+      },
+      {
+        "hasChildren": false,
+        "children": [],
+        "id": "sysOptionNode",
+        "name": "绯荤粺閰嶇疆",
+        "parentId": "VCIBaseTreeNode",
+        "code": "sysOptionNode",
+        "alias": "sysOption",
+        "category": "0",
+        "meta": {
+          "keepAlive": false
+        },
+        "sort": 5,
+        "soruce": "",
+        "path": "views/systemModel/systemConfig/index"
+      },
+      {
+        "hasChildren": false,
+        "children": [],
+        "id": "sysMonitorNode",
+        "name": "绯荤粺杩愯鐩戞帶",
+        "parentId": "VCIBaseTreeNode",
+        "code": "sysMonitorNode",
+        "alias": "sysMonitor",
+        "category": "0",
+        "meta": {
+          "keepAlive": false
+        },
+        "sort": 5,
+        "soruce": "",
+        "path": "views/systemModel/systemMonitor/index"
+      }
+    ],
+    "id": "VCIBaseTreeNode",
+    "name": "绯荤粺妯″潡閰嶇疆",
+    "parentId": "systemManagmentNode",
+    "code": "rootNode",
+    "alias": "root",
+    "category": "0",
+    "meta": {
+      "keepAlive": false
     },
-    {
-      "hasChildren": true,
-      "children": [],
-      "id": "modelManagmentNode",
-      "name": "涓氬姟鍔熻兘妯″潡",
-      "parentId": "VCIBaseTreeNode",
-      "code": "modelManagmentNode",
-      "alias": "model",
-      "meta": {
-        "keepAlive": false
-      },
-      "sort": 3,
-      "soruce": "",
-      "path": "views/systemModel/businessModel/index"
-    },
-    {
-      "hasChildren": true,
-      "children": [],
-      "id": "operateNode",
-      "name": "鎿嶄綔绫诲瀷绠$悊",
-      "parentId": "VCIBaseTreeNode",
-      "code": "operateNode",
-      "alias": "operate",
-      "meta": {
-        "keepAlive": false
-      },
-      "sort": 4,
-      "soruce": "",
-      "path": "views/systemModel/operateType/index"
-    },
-    {
-      "hasChildren": false,
-      "children": [],
-      "id": "sysOptionNode",
-      "name": "绯荤粺閰嶇疆",
-      "parentId": "VCIBaseTreeNode",
-      "code": "sysOptionNode",
-      "alias": "sysOption",
-      "meta": {
-        "keepAlive": false
-      },
-      "sort": 5,
-      "soruce": "",
-      "path": "views/systemModel/systemConfig/index"
-    },
-    {
-      "hasChildren": false,
-      "children": [],
-      "id": "sysMonitorNode",
-      "name": "绯荤粺杩愯鐩戞帶",
-      "parentId": "VCIBaseTreeNode",
-      "code": "sysMonitorNode",
-      "alias": "sysMonitor",
-      "meta": {
-        "keepAlive": false
-      },
-      "sort": 5,
-      "soruce": "",
-      "path": "views/systemModel/systemMonitor/index"
-    }
-  ],
-  "id": "VCIBaseTreeNode",
-  "name": "绯荤粺妯″潡閰嶇疆",
-  "parentId": "systemManagmentNode",
-  "code": "rootNode",
-  "alias": "root",
-  "meta": {
-    "keepAlive": false
+    "sort": 0,
+    "soruce": "",
+    "path": ""
   },
-  "sort": 0,
-  "soruce": "",
-  "path": ""
+  "systemManagmentNode": {
+    "hasChildren": true,
+    "children": [],
+    "childType": -1,
+    "id": "systemManagmentNode",
+    "name": "绠$悊鍔熻兘妯″潡",
+    "parentId": "VCIBaseTreeNode",
+    "code": "systemManagmentNode",
+    "alias": "system",
+    "category": "0",
+    "meta": {
+      "keepAlive": false
+    },
+    "sort": 2,
+    "soruce": "",
+    "path": "views/systemModel/mangeModel/index"
+  },
+  "modelManagmentNode": {
+    "hasChildren": true,
+    "children": [],
+    "childType": -1,
+    "id": "modelManagmentNode",
+    "name": "涓氬姟鍔熻兘妯″潡",
+    "parentId": "VCIBaseTreeNode",
+    "code": "modelManagmentNode",
+    "alias": "model",
+    "category": "0",
+    "meta": {
+      "keepAlive": false
+    },
+    "sort": 3,
+    "soruce": "",
+    "path": "views/systemModel/businessModel/index"
+  },
+  "operateNode": {
+    "hasChildren": true,
+    "children": [],
+    "childType": -1,
+    "id": "operateNode",
+    "name": "鎿嶄綔绫诲瀷绠$悊",
+    "parentId": "VCIBaseTreeNode",
+    "code": "operateNode",
+    "alias": "operate",
+    "category": "0",
+    "meta": {
+      "keepAlive": false
+    },
+    "sort": 4,
+    "soruce": "",
+    "path": "views/systemModel/operateType/index"
+  }
 }
\ No newline at end of file
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/OsBtmTypeDTO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/OsBtmTypeDTO.java
index 0e185a2..cd277ac 100644
--- a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/OsBtmTypeDTO.java
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/OsBtmTypeDTO.java
@@ -155,6 +155,19 @@
      */
     private Date lastModifyTime;
 
+    /**
+     * 鍥剧墖鍚嶇О
+     */
+    private String imageName;
+
+    public void setImageName(String imageName) {
+        this.imageName = imageName;
+    }
+
+    public String getImageName() {
+        return imageName;
+    }
+
     public void setApNameArray(String apNameArray) {
         this.apNameArray = apNameArray;
     }
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/OsBtmTypeVO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/OsBtmTypeVO.java
index 8ba5e9e..5e2154e 100644
--- a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/OsBtmTypeVO.java
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/OsBtmTypeVO.java
@@ -183,6 +183,19 @@
     private String[] apNameArray;
 
     /**
+     * 鍥剧墖鍚嶇О
+     */
+    private String imageName;
+
+    public void setImageName(String imageName) {
+        this.imageName = imageName;
+    }
+
+    public String getImageName() {
+        return imageName;
+    }
+
+    /**
      * 鍖呭惈灞炴��
      */
     private List<OsBtmTypeAttributeVO> attributes;
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/ReferConfigVO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/ReferConfigVO.java
index 490cef8..b3fd2c6 100644
--- a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/ReferConfigVO.java
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/ReferConfigVO.java
@@ -92,7 +92,7 @@
 	/**
 	 * 鏇挎崲鐨勬槧灏�
 	 */
-	private Map<String,String> replaceMap = new HashMap<String, String>();
+	private Map<String,Object> replaceMap = new HashMap<>();
 
 	/**
 	 * 鎺掑簭瀛楁
@@ -192,11 +192,11 @@
 		this.conditionMap = conditionMap;
 	}
 
-	public Map<String, String> getReplaceMap() {
+	public Map<String, Object> getReplaceMap() {
 		return replaceMap;
 	}
 
-	public void setReplaceMap(Map<String, String> replaceMap) {
+	public void setReplaceMap(Map<String, Object> replaceMap) {
 		this.replaceMap = replaceMap;
 	}
 
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/UITreeDefineVO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/UITreeDefineVO.java
index f779f10..a4bbc1d 100644
--- a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/UITreeDefineVO.java
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/UITreeDefineVO.java
@@ -22,9 +22,9 @@
     private String loadType;
 
     /**
-     * 鏄惁鍙嶅悜
+     * 鏄惁鍙嶅悜,TODO:鏍戝畾涔変笂宸茬粡娌℃湁浣跨敤杩欎釜瀛楁浜�
      */
-    private boolean orientation = false;
+    //private boolean orientation = false;
 
     /**
      * 鏄剧ず鍥炬爣
@@ -77,13 +77,13 @@
         this.loadType = loadType;
     }
 
-    public boolean isOrientation() {
+    /*public boolean isOrientation() {
         return orientation;
     }
 
     public void setOrientation(boolean orientation) {
         this.orientation = orientation;
-    }
+    }*/
 
     public boolean isShowImage() {
         return showImage;
@@ -146,7 +146,6 @@
         return "UITreeDefineVO{" +
                 "btmType='" + btmType + '\'' +
                 ", loadType='" + loadType + '\'' +
-                ", orientation=" + orientation +
                 ", showImage=" + showImage +
                 ", rootContent='" + rootContent + '\'' +
                 ", linkType='" + linkType + '\'' +
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OsBtmTypePO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OsBtmTypePO.java
index 2d42882..2a18145 100644
--- a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OsBtmTypePO.java
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OsBtmTypePO.java
@@ -88,6 +88,11 @@
     private short verRuleName;
 
     /**
+     * 鍥剧墖鍚嶇О
+     */
+    private String imageName;
+
+    /**
      * btmItemsTo
      */
     @ExcelColumn(value="鐢熷懡鍛ㄦ湡")
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/BaseResult.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/BaseResult.java
index b16511e..d0c8185 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/BaseResult.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/BaseResult.java
@@ -90,7 +90,7 @@
     /**
      * 鏍戠殑鏁版嵁
      */
-    private Collection<Tree> treeData;
+    private Collection<BaseTree> treeData;
 
     public Object[] getMsgObjs() {
         return msgObjs;
@@ -196,11 +196,11 @@
         this.data = data;
     }
 
-    public Collection<Tree> getTreeData() {
+    public Collection<BaseTree> getTreeData() {
         return treeData;
     }
 
-    public void setTreeData(Collection<Tree> treeData) {
+    public void setTreeData(Collection<BaseTree> treeData) {
         this.treeData = treeData;
     }
 
@@ -411,7 +411,7 @@
      * @param treeList 鏍戣妭鐐归泦鍚�
      * @return 缁熶竴鏁版嵁瀵硅薄
      */
-    public static BaseResult tree(Collection<Tree> treeList){
+    public static BaseResult tree(Collection<? extends BaseTree> treeList){
         BaseResult baseResult = new BaseResult<>();
         baseResult.setCode(ResultCodeEnum.SUCCESS.code);
         baseResult.setSuccess(true);
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/BaseTree.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/BaseTree.java
new file mode 100644
index 0000000..4b25910
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/BaseTree.java
@@ -0,0 +1,226 @@
+package com.vci.starter.web.pagemodel;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author ludc
+ * @date 2024/11/27 16:53
+ */
+public class BaseTree implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     * @serial 搴忓垪鍖栧��
+     */
+    private static final long serialVersionUID = 6886695271635257122L;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 鏄剧ず鏂囨湰
+     */
+    private String text;
+
+    /**
+     * 缂栧彿
+     */
+    private String id;
+
+    /**
+     * 鏄惁鍙跺瓙
+     */
+    private boolean leaf = false;
+
+    /**
+     * 鏄惁鏄剧ず澶嶉�夋
+     */
+    private boolean showCheckbox = false;
+
+    /**
+     * 鏄惁榛樿閫変腑
+     */
+    private boolean checked = false;
+
+    /**
+     * 灞傜骇
+     */
+    private  int level;
+
+    /**
+     * 鍥炬爣
+     */
+    private String icon;
+
+    /**
+     * 鍥炬爣鏍峰紡
+     */
+    private String iconCls;
+
+    /**
+     * 涓婄骇鑺傜偣
+     */
+    private String parentId;
+
+    /**
+     * 涓婄骇鑺傜偣鐨勫悕绉�
+     */
+    private String parentName;
+
+    /**
+     * 涓婄骇鑺傜偣鐨勪笟鍔$被鍨�
+     */
+    private String parentBtmName;
+
+    /**
+     * 鏄惁灞曞紑
+     */
+    private boolean expanded = false;
+
+    /**
+     * 閾炬帴
+     */
+    private String href;//layui鍜宔xtjs浣跨敤href,easyui浣跨敤url锛岀粺涓�href
+
+    /**
+     * 鎺掑簭绱㈠紩
+     */
+    private String index;
+
+    /**
+     * 褰撳墠鏁版嵁瀵硅薄
+     */
+    private Object data;
+
+    public void setOid(String oid) {
+        this.oid = oid;
+    }
+
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public void setLeaf(boolean leaf) {
+        this.leaf = leaf;
+    }
+
+    public void setShowCheckbox(boolean showCheckbox) {
+        this.showCheckbox = showCheckbox;
+    }
+
+    public void setChecked(boolean checked) {
+        this.checked = checked;
+    }
+
+    public void setLevel(int level) {
+        this.level = level;
+    }
+
+    public void setIcon(String icon) {
+        this.icon = icon;
+    }
+
+    public void setIconCls(String iconCls) {
+        this.iconCls = iconCls;
+    }
+
+    public void setParentId(String parentId) {
+        this.parentId = parentId;
+    }
+
+    public void setParentName(String parentName) {
+        this.parentName = parentName;
+    }
+
+    public void setParentBtmName(String parentBtmName) {
+        this.parentBtmName = parentBtmName;
+    }
+
+    public void setExpanded(boolean expanded) {
+        this.expanded = expanded;
+    }
+
+    public void setHref(String href) {
+        this.href = href;
+    }
+
+    public void setIndex(String index) {
+        this.index = index;
+    }
+
+    public void setData(Object data) {
+        this.data = data;
+    }
+
+    public String getOid() {
+        return oid;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public boolean isLeaf() {
+        return leaf;
+    }
+
+    public boolean isShowCheckbox() {
+        return showCheckbox;
+    }
+
+    public boolean isChecked() {
+        return checked;
+    }
+
+    public int getLevel() {
+        return level;
+    }
+
+    public String getIcon() {
+        return icon;
+    }
+
+    public String getIconCls() {
+        return iconCls;
+    }
+
+    public String getParentId() {
+        return parentId;
+    }
+
+    public String getParentName() {
+        return parentName;
+    }
+
+    public String getParentBtmName() {
+        return parentBtmName;
+    }
+
+    public boolean isExpanded() {
+        return expanded;
+    }
+
+    public String getHref() {
+        return href;
+    }
+
+    public String getIndex() {
+        return index;
+    }
+
+    public Object getData() {
+        return data;
+    }
+}
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 19d6de9..9a3c0c6 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
@@ -12,7 +12,7 @@
  * @author weidy
  *
  */
-public class Tree implements java.io.Serializable{
+public class Tree extends BaseTree implements java.io.Serializable{
 
 	/**
 	 * 绂佹淇敼杩欎釜鍊�
@@ -24,7 +24,7 @@
 	 * 鏋勯�犲嚱鏁�
 	 */
 	public Tree(){
-		
+
 	}
 
 	/**
@@ -48,93 +48,22 @@
 		setData(o);
 	}
 
-
-	/**
-	 * 涓婚敭
-	 */
-	private String oid;
-	/**
-	 * 鏄剧ず鏂囨湰
-	 */
-	private String text;
-	/**
-	 * 缂栧彿
-	 */
-	private String id;
-	/**
-	 * 鏄惁鍙跺瓙
-	 */
-	private boolean leaf = false;
-
-	/**
-	 * 鏄惁鏄剧ず澶嶉�夋
-	 */
-	private boolean showCheckbox = false;
-	/**
-	 * 鏄惁榛樿閫変腑
-	 */
-	private boolean checked = false;
-	
 	/**
 	 * 瀛愯妭鐐�
 	 */
-	private List<Tree> children = new ArrayList<Tree>();
-	/**
-	 * 灞傜骇
-	 */
-	private  int level;
-	/**
-	 * 鍥炬爣
-	 */
-	private String icon;
-	/**
-	 * 鍥炬爣鏍峰紡
-	 */
-	private String iconCls;
-	/**
-	 * 涓婄骇鑺傜偣
-	 */
-	private String parentId;
+	private List<Tree> children = new ArrayList<>();
 
-	/**
-	 * 涓婄骇鑺傜偣鐨勫悕绉�
-	 */
-	private String parentName;
-
-	/**
-	 * 涓婄骇鑺傜偣鐨勪笟鍔$被鍨�
-	 */
-	private String parentBtmName;
-	/**
-	 * 鏄惁灞曞紑
-	 */
-	private boolean expanded = false;
-	
-	/**
-	 * 閾炬帴
-	 */
-	private String href;//layui鍜宔xtjs浣跨敤href,easyui浣跨敤url锛岀粺涓�href
-	
-	/**
-	 * 鎺掑簭绱㈠紩
-	 */
-	private String index;//鎺掑簭绱㈠紩
-	/***
-	 * 褰撳墠鏁版嵁瀵硅薄
-	 */
-	private Object data;
-	
 	/**
 	 * 鍏朵粬鐨勫睘鎬�
 	 */
-	private Map<String,String> attributes = new HashMap<String, String>();//浣跨敤骞冲彴鐨勮瘽锛屾墍鏈夌殑灞炴�ч兘鏄疭tring鐨�
-	
+	private Map<String,String> attributes = new HashMap<>();//浣跨敤骞冲彴鐨勮瘽锛屾墍鏈夌殑灞炴�ч兘鏄疭tring鐨�
+
 	/**
 	 * 鑾峰彇涓婚敭
 	 * @return 涓婚敭鐨勫��
 	 */
 	public String getOid() {
-		return oid;
+		return super.getOid();
 	}
 
 	/**
@@ -142,7 +71,7 @@
 	 * @param oid 涓婚敭鐨勫��
  	 */
 	public void setOid(String oid) {
-		this.oid = oid;
+		super.setOid(oid);
 	}
 
 	/**
@@ -150,7 +79,7 @@
 	 * @return 鏍戣妭鐐规枃鏈�
 	 */
 	public String getText() {
-		return text;
+		return super.getText();
 	}
 
 	/**
@@ -158,7 +87,7 @@
 	 * @param text 鏍戣妭鐐规枃鏈�
 	 */
 	public void setText(String text) {
-		this.text = text;
+		super.setText(text);
 	}
 
 	/**
@@ -166,14 +95,14 @@
 	 * @param id
 	 */
 	public void setId(String id) {
-		this.id = id;
+		super.setId(id);
 	}
 
 	/**
 	 * 鑾峰彇缂栧彿
 	 */
 	public String getId() {
-		return id;
+		return super.getId();
 	}
 
 	/**
@@ -181,7 +110,7 @@
 	 * @return true 琛ㄧず鍙跺瓙鑺傜偣
 	 */
 	public boolean isLeaf() {
-		return leaf;
+		return super.isLeaf();
 	}
 
 	/**
@@ -189,7 +118,7 @@
 	 * @param leaf 鏄惁鍙跺瓙鑺傜偣
 	 */
 	public void setLeaf(boolean leaf) {
-		this.leaf = leaf;
+		super.setLeaf(leaf);
 	}
 
 	/**
@@ -197,7 +126,7 @@
 	 * @return true琛ㄧず鏄剧ず
 	 */
 	public boolean isShowCheckbox() {
-		return showCheckbox;
+		return super.isShowCheckbox();
 	}
 
 	/**
@@ -205,7 +134,7 @@
 	 * @param showCheckbox 鏄惁鏄剧ず澶嶉�夋
 	 */
 	public void setShowCheckbox(boolean showCheckbox) {
-		this.showCheckbox = showCheckbox;
+		super.setShowCheckbox(showCheckbox);
 	}
 
 	/**
@@ -213,7 +142,7 @@
 	 * @return true琛ㄧず闇�瑕佽嚜鍔ㄥ嬀閫�
 	 */
 	public boolean isChecked() {
-		return checked;
+		return super.isChecked();
 	}
 
 	/**
@@ -221,7 +150,7 @@
 	 * @param checked 鏄惁鑷姩鍕鹃��
 	 */
 	public void setChecked(boolean checked) {
-		this.checked = checked;
+		super.setChecked(checked);
 	}
 
 	/**
@@ -229,7 +158,7 @@
 	 * @return 瀛愯妭鐐瑰垪琛�
 	 */
 	public List<Tree> getChildren() {
-		return children;
+		return this.children;
 	}
 
 	/**
@@ -245,7 +174,7 @@
 	 * @return 鍥炬爣
 	 */
 	public String getIcon() {
-		return icon;
+		return super.getIcon();
 	}
 
 	/**
@@ -253,7 +182,7 @@
 	 * @param icon 鍥炬爣
 	 */
 	public void setIcon(String icon) {
-		this.icon = icon;
+		super.setIcon(icon);
 	}
 
 	/**
@@ -261,7 +190,7 @@
 	 * @return css绫荤殑鍚嶇О
 	 */
 	public String getIconCls() {
-		return iconCls;
+		return super.getIconCls();
 	}
 
 	/**
@@ -269,7 +198,7 @@
 	 * @param iconCls css绫荤殑鍚嶇О
 	 */
 	public void setIconCls(String iconCls) {
-		this.iconCls = iconCls;
+		super.setIconCls(iconCls);
 	}
 
 	/**
@@ -277,7 +206,7 @@
 	 * @return 涓婄骇鑺傜偣鐨刼id
 	 */
 	public String getParentId() {
-		return parentId;
+		return super.getParentId();
 	}
 
 	/**
@@ -285,7 +214,7 @@
 	 * @param parentId 涓婄骇鑺傜偣鐨刼id
 	 */
 	public void setParentId(String parentId) {
-		this.parentId = parentId;
+		super.setParentId(parentId);
 	}
 
 	/**
@@ -293,7 +222,7 @@
 	 * @return true琛ㄧず鑷姩灞曞紑
 	 */
 	public boolean isExpanded() {
-		return expanded;
+		return super.isExpanded();
 	}
 
 	/**
@@ -301,7 +230,7 @@
 	 * @param expanded 鏄惁鑷姩灞曞紑
 	 */
 	public void setExpanded(boolean expanded) {
-		this.expanded = expanded;
+		super.setExpanded(expanded);
 	}
 
 	/**
@@ -309,7 +238,7 @@
 	 * @return 閾炬帴鍦板潃
 	 */
 	public String getHref() {
-		return href;
+		return super.getHref();
 	}
 
 	/**
@@ -317,7 +246,7 @@
 	 * @param href 閾炬帴鍦板潃
 	 */
 	public void setHref(String href) {
-		this.href = href;
+		super.setHref(href);
 	}
 
 	/**
@@ -325,7 +254,7 @@
 	 * @return 鎺掑簭鍙�
 	 */
 	public String getIndex() {
-		return index;
+		return super.getIndex();
 	}
 
 	/**
@@ -333,7 +262,7 @@
 	 * @param index 鎺掑簭鍙�
 	 */
 	public void setIndex(String index) {
-		this.index = index;
+		super.setIndex(index);
 	}
 
 	/**
@@ -357,7 +286,7 @@
 	 * @return 涓婄骇鐨勫悕绉�
 	 */
 	public String getParentName() {
-		return parentName;
+		return super.getParentName();
 	}
 
 	/**
@@ -365,15 +294,15 @@
 	 * @param parentName 涓婄骇鐨勫悕绉�
 	 */
 	public void setParentName(String parentName) {
-		this.parentName = parentName;
+		super.setParentName(parentName);
 	}
 
 	public String getParentBtmName() {
-		return parentBtmName;
+		return super.getParentBtmName();
 	}
 
 	public void setParentBtmName(String parentBtmName) {
-		this.parentBtmName = parentBtmName;
+		super.setParentBtmName(parentBtmName);
 	}
 
 	/**
@@ -406,7 +335,7 @@
 				if (node.getOid().equalsIgnoreCase(childnode.getParentId())) {
 					childnode.setParentName(node.getText());
 					if(StringUtils.isBlank(childnode.getParentBtmName())){
-						childnode.setParentBtmName(node.getAttributes().getOrDefault("btmname",""));
+						childnode.setParentBtmName((String)node.getAttributes().getOrDefault("btmname",""));
 					}
 					node.getChildren().add(childnode);
 				}
@@ -416,7 +345,7 @@
 				node.setLeaf(false);
 			}else {
 				node.setLeaf(true);
-				
+
 			}
 			this.getChildren().add(node);
 		}
@@ -424,41 +353,42 @@
 
 
 	public Object getData() {
-		return data;
+		return super.getData();
 	}
 
 	public void setData(Object data) {
-		this.data = data;
+		super.setData(data);
 	}
 
 	public int getLevel() {
-		return level;
+		return super.getLevel();
 	}
 
 	public void setLevel(int level) {
-		this.level = level;
+		super.setLevel(level);
 	}
 
 	@Override
 	public String toString() {
 		return "Tree{" +
-				"oid='" + oid + '\'' +
-				", text='" + text + '\'' +
-				", leaf=" + leaf +
-				", showCheckbox=" + showCheckbox +
-				", checked=" + checked +
-				", children=" + children +
-				", level=" + level +
-				", icon='" + icon + '\'' +
-				", iconCls='" + iconCls + '\'' +
-				", parentId='" + parentId + '\'' +
-				", parentName='" + parentName + '\'' +
-				", parentBtmName='" + parentBtmName + '\'' +
-				", expanded=" + expanded +
-				", href='" + href + '\'' +
-				", index='" + index + '\'' +
-				", data=" + data +
+				"oid='" + super.getOid() + '\'' +
+				", text='" + super.getText() + '\'' +
+				", leaf=" + super.isLeaf() +
+				", showCheckbox=" + super.isShowCheckbox() +
+				", checked=" + super.isChecked() +
+				", children=" + this.getChildren() +
+				", level=" + super.getLevel() +
+				", icon='" + super.getIcon() + '\'' +
+				", iconCls='" + super.getIconCls() + '\'' +
+				", parentId='" + super.getParentId() + '\'' +
+				", parentName='" + super.getParentBtmName() + '\'' +
+				", parentBtmName='" + super.getParentBtmName() + '\'' +
+				", expanded=" + super.isExpanded() +
+				", href='" + super.getHref() + '\'' +
+				", index='" + super.getIndex() + '\'' +
+				", data=" + super.getData() +
 				", attributes=" + attributes +
 				'}';
 	}
+
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/UIDataTree.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/UIDataTree.java
new file mode 100644
index 0000000..b150ad4
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/UIDataTree.java
@@ -0,0 +1,395 @@
+package com.vci.starter.web.pagemodel;
+
+import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author ludc
+ * @date 2024/11/27 16:34
+ */
+@Data
+public class UIDataTree extends BaseTree implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     * @serial 搴忓垪鍖栧��
+     */
+    private static final long serialVersionUID = 6886695271635257212L;
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     */
+    public UIDataTree(){
+
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     * @param oid 涓婚敭
+     * @param text 鏍戣妭鐐规枃鏈�
+     */
+    public UIDataTree(String oid, String text){
+        setOid(oid);
+        setText(text);
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     * @param oid 涓婚敭
+     * @param text 鏍戣妭鐐规枃鏈�
+     */
+    public UIDataTree(String oid, String text,Object o){
+        setOid(oid);
+        setText(text);
+        setData(o);
+    }
+
+    /**
+     * 鍏朵粬鐨勫睘鎬�
+     */
+    private Map<String,Object> attributes = new HashMap<>();
+
+    /**
+     * 瀛愯妭鐐�
+     */
+    private List<UIDataTree> children = new ArrayList<>();
+
+    /**
+     * 鑾峰彇涓婚敭
+     * @return 涓婚敭鐨勫��
+     */
+    public String getOid() {
+        return super.getOid();
+    }
+
+    /**
+     * 璁剧疆涓婚敭
+     * @param oid 涓婚敭鐨勫��
+     */
+    public void setOid(String oid) {
+        super.setOid(oid);
+    }
+
+    /**
+     * 鑾峰彇鏍戣妭鐐规枃鏈�
+     * @return 鏍戣妭鐐规枃鏈�
+     */
+    public String getText() {
+        return super.getText();
+    }
+
+    /**
+     * 璁剧疆鏍戣妭鐐规枃鏈�
+     * @param text 鏍戣妭鐐规枃鏈�
+     */
+    public void setText(String text) {
+        super.setText(text);
+    }
+
+    /**
+     * 璁剧疆缂栧彿
+     * @param id
+     */
+    public void setId(String id) {
+        super.setId(id);
+    }
+
+    /**
+     * 鑾峰彇缂栧彿
+     */
+    public String getId() {
+        return super.getId();
+    }
+
+    /**
+     * 鏄惁鍙跺瓙鑺傜偣
+     * @return true 琛ㄧず鍙跺瓙鑺傜偣
+     */
+    public boolean isLeaf() {
+        return super.isLeaf();
+    }
+
+    /**
+     * 璁剧疆鍙跺瓙鑺傜偣
+     * @param leaf 鏄惁鍙跺瓙鑺傜偣
+     */
+    public void setLeaf(boolean leaf) {
+        super.setLeaf(leaf);
+    }
+
+    /**
+     * 鏄惁鏄剧ず澶嶉�夋
+     * @return true琛ㄧず鏄剧ず
+     */
+    public boolean isShowCheckbox() {
+        return super.isShowCheckbox();
+    }
+
+    /**
+     * 璁剧疆鏄惁鏄剧ず澶嶉�夋
+     * @param showCheckbox 鏄惁鏄剧ず澶嶉�夋
+     */
+    public void setShowCheckbox(boolean showCheckbox) {
+        super.setShowCheckbox(showCheckbox);
+    }
+
+    /**
+     * 鏄惁鑷姩鍕鹃�変笂
+     * @return true琛ㄧず闇�瑕佽嚜鍔ㄥ嬀閫�
+     */
+    public boolean isChecked() {
+        return super.isChecked();
+    }
+
+    /**
+     * 璁剧疆鏄惁鍕鹃��
+     * @param checked 鏄惁鑷姩鍕鹃��
+     */
+    public void setChecked(boolean checked) {
+        super.setChecked(checked);
+    }
+
+    /**
+     * 鑾峰彇瀛愯妭鐐�
+     * @return 瀛愯妭鐐瑰垪琛�
+     */
+    public List<UIDataTree> getChildren() {
+        return this.children;
+    }
+
+    /**
+     * 璁剧疆瀛愯妭鐐�
+     * @param children 瀛愯妭鐐瑰垪琛�
+     */
+    public void setChildren(List<UIDataTree> children) {
+        this.children = children;
+    }
+
+    /**
+     * 鑾峰彇鍥炬爣
+     * @return 鍥炬爣
+     */
+    public String getIcon() {
+        return super.getIcon();
+    }
+
+    /**
+     * 璁剧疆鍥炬爣
+     * @param icon 鍥炬爣
+     */
+    public void setIcon(String icon) {
+        super.setIcon(icon);
+    }
+
+    /**
+     * 鑾峰彇鍥炬爣鐨勬樉绀篶ss绫�
+     * @return css绫荤殑鍚嶇О
+     */
+    public String getIconCls() {
+        return super.getIconCls();
+    }
+
+    /**
+     * 璁剧疆鍥炬爣鐨勬樉绀篶ss绫�
+     * @param iconCls css绫荤殑鍚嶇О
+     */
+    public void setIconCls(String iconCls) {
+        super.setIconCls(iconCls);
+    }
+
+    /**
+     * 鑾峰彇涓婄骇涓婚敭
+     * @return 涓婄骇鑺傜偣鐨刼id
+     */
+    public String getParentId() {
+        return super.getParentId();
+    }
+
+    /**
+     * 璁剧疆涓婄骇涓婚敭
+     * @param parentId 涓婄骇鑺傜偣鐨刼id
+     */
+    public void setParentId(String parentId) {
+        super.setParentId(parentId);
+    }
+
+    /**
+     * 鏄惁鑷姩灞曞紑
+     * @return true琛ㄧず鑷姩灞曞紑
+     */
+    public boolean isExpanded() {
+        return super.isExpanded();
+    }
+
+    /**
+     * 璁剧疆鏄惁鑷姩灞曞紑
+     * @param expanded 鏄惁鑷姩灞曞紑
+     */
+    public void setExpanded(boolean expanded) {
+        super.setExpanded(expanded);
+    }
+
+    /**
+     * 鑾峰彇閾炬帴鍦板潃
+     * @return 閾炬帴鍦板潃
+     */
+    public String getHref() {
+        return super.getHref();
+    }
+
+    /**
+     * 璁剧疆閾炬帴鍦板潃
+     * @param href 閾炬帴鍦板潃
+     */
+    public void setHref(String href) {
+        super.setHref(href);
+    }
+
+    /**
+     * 鑾峰彇鎺掑簭鍙�
+     * @return 鎺掑簭鍙�
+     */
+    public String getIndex() {
+        return super.getIndex();
+    }
+
+    /**
+     * 璁剧疆鎺掑簭鍙�
+     * @param index 鎺掑簭鍙�
+     */
+    public void setIndex(String index) {
+        super.setIndex(index);
+    }
+
+    /**
+     * 鑾峰彇鏍戣妭鐐规寚浠g殑涓氬姟鏁版嵁鐨勬墍鏈夊睘鎬ф槧灏�
+     * @return key琛ㄧず灞炴�х殑鍚嶇О锛寁alue琛ㄧず灞炴�х殑鍊�
+     */
+    public Map<String, Object> getAttributes() {
+        return attributes;
+    }
+
+    /**
+     * 璁剧疆鏍戣妭鐐规寚浠g殑涓氬姟鏁版嵁鐨勬墍鏈夊睘鎬ф槧灏�
+     * @param attributes key琛ㄧず灞炴�х殑鍚嶇О锛寁alue琛ㄧず灞炴�х殑鍊�
+     */
+    public void setAttributes(Map<String, Object> attributes) {
+        this.attributes = attributes;
+    }
+
+    /**
+     * 鑾峰彇涓婄骇鐨勮妭鐐圭殑鍚嶇О
+     * @return 涓婄骇鐨勫悕绉�
+     */
+    public String getParentName() {
+        return super.getParentName();
+    }
+
+    /**
+     * 璁剧疆涓婄骇鑺傜偣鐨勫悕绉�
+     * @param parentName 涓婄骇鐨勫悕绉�
+     */
+    public void setParentName(String parentName) {
+        super.setParentName(parentName);
+    }
+
+    public String getParentBtmName() {
+        return super.getParentBtmName();
+    }
+
+    public void setParentBtmName(String parentBtmName) {
+        super.setParentBtmName(parentBtmName);
+    }
+
+    /**
+     * 鍒╃敤閫掑綊灏嗘爲杞崲涓轰笂涓嬬骇鍏崇郴
+     * @param rootTree 椤跺眰鑺傜偣
+     * @param children 瀛愯妭鐐�
+     * @return 鍚湁涓婁笅绾у叧绯荤殑鏍�
+     */
+    public static List<UIDataTree> getChildList(List<UIDataTree> rootTree, List<UIDataTree> children){
+        if(rootTree == null ||rootTree.size() == 0){
+            if(children !=null && children.size()>0){
+                rootTree = children.subList(0, children.size());
+            }else{
+                return null;
+            }
+        }
+        UIDataTree bt = new UIDataTree();
+        bt.findChild(rootTree, children);
+        return rootTree;
+    }
+
+    /**
+     * 鏌ヨ鏍戠殑涓嬬骇
+     * @param treenode 褰撳墠鑺傜偣
+     * @param children 鍏朵粬鐨勮妭鐐�
+     */
+    public void findChild(List<UIDataTree> treenode, List<UIDataTree> children){
+        for (UIDataTree node : treenode) {
+            for (UIDataTree childnode : children) {
+                if (node.getOid().equalsIgnoreCase(childnode.getParentId())) {
+                    childnode.setParentName(node.getText());
+                    if(StringUtils.isBlank(childnode.getParentBtmName())){
+                        childnode.setParentBtmName((String)node.getAttributes().getOrDefault("btmname",""));
+                    }
+                    node.getChildren().add(childnode);
+                }
+            }
+            if (node.getChildren().size()>0) {
+                findChild(node.getChildren(), children);
+                node.setLeaf(false);
+            }else {
+                node.setLeaf(true);
+
+            }
+            this.getChildren().add(node);
+        }
+    }
+
+
+    public Object getData() {
+        return super.getData();
+    }
+
+    public void setData(Object data) {
+        super.setData(data);
+    }
+
+    public int getLevel() {
+        return super.getLevel();
+    }
+
+    public void setLevel(int level) {
+        super.setLevel(level);
+    }
+
+    @Override
+    public String toString() {
+        return "UIDataTree{" +
+                "oid='" + this.getOid() + '\'' +
+                ", text='" + this.getText() + '\'' +
+                ", leaf=" + this.isLeaf() +
+                ", showCheckbox=" + this.isShowCheckbox() +
+                ", checked=" + this.isChecked() +
+                ", children=" + this.getChildren() +
+                ", level=" + this.getLevel() +
+                ", icon='" + this.getIcon() + '\'' +
+                ", iconCls='" + this.getIconCls() + '\'' +
+                ", parentId='" + this.getParentId() + '\'' +
+                ", parentName='" + this.getParentBtmName() + '\'' +
+                ", parentBtmName='" + this.getParentBtmName() + '\'' +
+                ", expanded=" + this.isExpanded() +
+                ", href='" + this.getHref() + '\'' +
+                ", index='" + this.getIndex() + '\'' +
+                ", data=" + this.getData() +
+                ", attributes=" + attributes +
+                '}';
+    }
+
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java
index b13d963..ab20ea1 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java
@@ -1814,7 +1814,6 @@
         return name;
     }
 
-
     /**
      * 鏍规嵁涓氬姟绫诲瀷鑾峰彇琛ㄦ牸鍚嶇О
      * @param btmname 涓氬姟绫诲瀷锛屽苟涓斾笉鑳芥槸瑙嗗浘
@@ -1878,7 +1877,7 @@
      * @param replaceMap 浣跨敤鏇挎崲鐨勬暟鎹簮
      * @return 鏇挎崲鍚庣殑鍊�
      */
-    public static String replaceByFreeMarker(String freemarker,Map<String,String> replaceMap){
+    public static String replaceByFreeMarker(String freemarker,Map<String,Object> replaceMap){
         if(StringUtils.isBlank(freemarker)){
             return "";
         }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmPwdStrategyQueryServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmPwdStrategyQueryServiceImpl.java
index 932c429..3a842d0 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmPwdStrategyQueryServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmPwdStrategyQueryServiceImpl.java
@@ -259,6 +259,9 @@
         if(strategy.getRequireCharCount() > strategy.getCombinations().split(",").length){
             throw new VciBaseException("蹇呭~绉嶇被涓嶈兘澶т簬鎵�閫夋嫨鐨勫瘑鐮佺粍鍚堟柟寮忕殑涓暟!");
         }
+        if(strategy.getRequireCharCount() <= 0){
+            throw new VciBaseException("蹇呭~绉嶇被涓嶈兘灏忎簬绛変簬0!");
+        }
         if(strategy.getMaxLength() < strategy.getMinLength()){
             throw new VciBaseException("瀵嗙爜鏈�澶ч暱搴︿笉鑳藉皬浜庢渶灏忛暱搴�!");
         }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java
index 8c2133d..a21f858 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java
@@ -388,7 +388,7 @@
 		//涓撲笟
 		smUserVO.setSpecialties(userInfo.specialties);
 		UserLogonInfo lockObj = platformClientUtil.getFrameworkService().fetchUserLogonObj(userInfo.id);
-		smUserVO.setLockFlag(lockObj.plWrongNum == 0);
+		smUserVO.setLockFlag(lockObj.plWrongNum != 0);
 		smUserVO.setCreator(userInfo.createUser);
 		smUserVO.setCreateTime(VciDateUtil.long2Date(userInfo.createTime));
 		smUserVO.setLastModifier(userInfo.updateUser);
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmUserQueryController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmUserQueryController.java
index f3d796e..05daef5 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmUserQueryController.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmUserQueryController.java
@@ -364,5 +364,4 @@
         //BaseResult.fail("杩欓噷杩斿洖鍓嶇鐨勯敊璇俊鎭�");
     }
 
-
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LoginController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LoginController.java
index df11726..eb67ce8 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LoginController.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LoginController.java
@@ -240,8 +240,6 @@
 		return doSingleLogin(request,response,"username");
 	}
 
-
-
 	/**
 	 * 鑾峰彇瀹㈡埛绔姹備俊鎭�,涓轰簡闅旂粷鍦╯erver灞備娇鐢╮equest
 	 * @param request 璇锋眰瀵硅薄
@@ -342,4 +340,5 @@
 		loginService.logout(userToken);
 		return BaseResult.success();
 	}
+
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UIBaseQuery.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UIBaseQuery.java
index 49ac8ce..8666338 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UIBaseQuery.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UIBaseQuery.java
@@ -15,18 +15,18 @@
     /**
      * 鏉ユ簮鏁版嵁
      */
-    private Map<String,String> sourceData = new HashMap<>();
+    private Map<String,Object> sourceData = new HashMap<>();
 
     /**
      * 閫夋嫨鏁版嵁
      */
     private List<Map<String,String>> selectData = new ArrayList<>();
 
-    public Map<String, String> getSourceData() {
+    public Map<String, Object> getSourceData() {
         return sourceData;
     }
 
-    public void setSourceData(Map<String, String> sourceData) {
+    public void setSourceData(Map<String, Object> sourceData) {
         this.sourceData = sourceData;
     }
 
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UIDataGridQuery.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UIDataGridQuery.java
index 57fea20..5b1defd 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UIDataGridQuery.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UIDataGridQuery.java
@@ -42,7 +42,7 @@
     /**
      * 鏉ユ簮鏁版嵁
      */
-    private Map<String,String> sourceData = new HashMap<>();
+    private Map<String,Object> sourceData = new HashMap<>();
 
     /**
      * 閫夋嫨鏁版嵁
@@ -54,11 +54,11 @@
      */
     private boolean treeTableFlag = false;
 
-    public Map<String, String> getSourceData() {
+    public Map<String, Object> getSourceData() {
         return sourceData;
     }
 
-    public void setSourceData(Map<String, String> sourceData) {
+    public void setSourceData(Map<String, Object> sourceData) {
         this.sourceData = sourceData;
     }
 
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UILinkTypeDataQuery.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UILinkTypeDataQuery.java
index 7458727..7a4cc46 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UILinkTypeDataQuery.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UILinkTypeDataQuery.java
@@ -61,7 +61,7 @@
     /**
      * 鏇挎崲鐨勫睘鎬т俊鎭�
      */
-    private Map<String,String> replaceMap;
+    private Map<String,Object> replaceMap;
 
     /**
      * 鎸囧畾灞傜骇
@@ -148,11 +148,11 @@
         this.linkType = linkType;
     }
 
-    public Map<String, String> getReplaceMap() {
+    public Map<String, Object> getReplaceMap() {
         return replaceMap;
     }
 
-    public void setReplaceMap(Map<String, String> replaceMap) {
+    public void setReplaceMap(Map<String, Object> replaceMap) {
         this.replaceMap = replaceMap;
     }
 
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UITreeQuery.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UITreeQuery.java
index c4f6a3a..9da4d10 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UITreeQuery.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/query/UITreeQuery.java
@@ -57,18 +57,18 @@
     /**
      * 鏉ユ簮鏁版嵁
      */
-    private Map<String,String> sourceData = new HashMap<>();
+    private Map<String,Object> sourceData = new HashMap<>();
 
     /**
      * 閫夋嫨鏁版嵁
      */
     private List<Map<String,String>> selectData = new ArrayList<>();
 
-    public Map<String, String> getSourceData() {
+    public Map<String, Object> getSourceData() {
         return sourceData;
     }
 
-    public void setSourceData(Map<String, String> sourceData) {
+    public void setSourceData(Map<String, Object> sourceData) {
         this.sourceData = sourceData;
     }
 
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIDataServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIDataServiceI.java
index 7bcfcf6..e84f0d4 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIDataServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIDataServiceI.java
@@ -50,7 +50,7 @@
      * @return 鏍戝舰鏁版嵁
      * @throws VciBaseException 鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
-    List<Tree> getDataForTree(UITreeQuery treeQuery) throws VciBaseException, PLException;
+    List<UIDataTree> getDataForTree(UITreeQuery treeQuery) throws Exception;
 
     /**
      * 鑾峰彇鏍戝舰鏁版嵁(鏍规嵁鏌ヨ妯℃澘鏌ヨ瀵硅薄)
@@ -58,7 +58,7 @@
      * @return 鏍戝舰鏁版嵁
      * @throws VciBaseException 鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
-    BaseResult getDataByTemp(UITreeQuery treeQuery) throws VciBaseException, PLException;
+    BaseResult getDataByTemp(UITreeQuery treeQuery) throws Exception;
 
     /**
      * 璋冪敤鍓嶇疆浜嬩欢
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebBoServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebBoServiceI.java
index a0d0ac2..169823a 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebBoServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebBoServiceI.java
@@ -105,7 +105,7 @@
 	 * @return
 	 * @throws VciBaseException
 	 */
-	 List<BusinessObject> queryCBOByScheme(String queryScheme, Map<String, String> conditionMap, Map<String, String> replaceMap) throws VciBaseException;
+	 List<BusinessObject> queryCBOByScheme(String queryScheme, Map<String, String> conditionMap, Map<String, Object> replaceMap) throws VciBaseException;
 	
 	/**
 	 * 浣跨敤鏌ヨ鏂规鏉ユ煡璇㈡暟鎹紝杩斿洖CBO锛屾敮鎸佸垎椤�
@@ -116,7 +116,7 @@
 	 * @return
 	 * @throws VciBaseException
 	 */
-	 List<BusinessObject> queryCBOByScheme(String queryScheme, Map<String, String> conditionMap, Map<String, String> replaceMap, PageHelper ph) throws VciBaseException;
+	 List<BusinessObject> queryCBOByScheme(String queryScheme, Map<String, String> conditionMap, Map<String, Object> replaceMap, PageHelper ph) throws VciBaseException;
 
 	/**
 	 * 浣跨敤鍚嶅瓧鑾峰彇鏌ヨ妯℃澘
@@ -125,7 +125,7 @@
 	 * @return 鏌ヨ妯℃澘
 	 * @throws VciBaseException 鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
 	 */
-	QueryTemplate getQtByName(String name, Map<String, String> replaceMap) throws VciBaseException;
+	QueryTemplate getQtByName(String name, Map<String, Object> replaceMap) throws VciBaseException;
 
 	/**
 	 *  浣跨敤鏌ヨ鏂规鏉ユ煡璇㈡暟鎹紝杩斿洖CBO锛屾敮鎸佽嚜瀹氫箟鏌ヨ瀛楁锛屽寘鎷弬鐓у拰鏋氫妇;鍙傜収瀛楁浣跨敤xxx.yy;鏋氫妇瀛楁浣跨敤xxx_enumCode
@@ -137,7 +137,7 @@
 	 * @return
 	 * @throws VciBaseException
 	 */
-	 List<BusinessObject> queryCBOByScheme(String queryScheme, Map<String, String> conditionMap, Map<String, String> replaceMap, PageHelper ph, List<String> clauseList) throws VciBaseException;
+	 List<BusinessObject> queryCBOByScheme(String queryScheme, Map<String, String> conditionMap, Map<String, Object> replaceMap, PageHelper ph, List<String> clauseList) throws VciBaseException;
 	
 	/**
 	 * 鏌ヨ鏁伴噺
@@ -165,7 +165,7 @@
      * @return
      * @throws VciBaseException
      */
-     int queryCountByScheme(String queryScheme, Map<String, String> conditionMap, Map<String, String> replaceMap) throws VciBaseException;
+     int queryCountByScheme(String queryScheme, Map<String, String> conditionMap, Map<String, Object> replaceMap) throws VciBaseException;
     
     /**
      * 浣跨敤瀵硅薄鏉ユ煡璇㈡暟閲�
@@ -269,7 +269,7 @@
      * @return
      * @throws VciBaseException
      */
-     <T> List<T> queryObjectByScheme(String queryScheme, Class<T> c, Map<String, String> conditionMap, PageHelper ph, Map<String, String> replaceMap) throws VciBaseException;
+     <T> List<T> queryObjectByScheme(String queryScheme, Class<T> c, Map<String, String> conditionMap, PageHelper ph, Map<String, Object> replaceMap) throws VciBaseException;
 
 	/**
 	 * 淇濆瓨鏁版嵁锛屽彲浠ュ湪request涓缃槸鍚︽寔涔呭寲
@@ -409,7 +409,7 @@
      * @return 鍒楄〃鏁版嵁锛屾暟鎹槸Map褰㈠紡鐨勶紝鍖呭惈鍒嗛〉淇℃伅
      * @throws VciBaseException
      */
-     DataGrid queryGridByScheme(String queryScheme, Map<String, String> conditionMap, Map<String, String> replaceMap) throws VciBaseException;
+     DataGrid queryGridByScheme(String queryScheme, Map<String, String> conditionMap, Map<String, Object> replaceMap) throws VciBaseException;
     
     /**
      * 鏍规嵁鏌ヨ鏂规鏉ユ煡璇㈠垪琛ㄦ暟鎹紱鍙互鍦╬ageHelper涓缃槸鍚︽煡璇㈡�绘暟锛宲ageHelper鐨勪紭鍏堢骇鏈�澶э紱
@@ -420,7 +420,7 @@
      * @return 鍒楄〃鏁版嵁锛屾暟鎹槸Map褰㈠紡鐨勶紝鍖呭惈鍒嗛〉淇℃伅
      * @throws VciBaseException
      */
-     DataGrid queryGridByScheme(String queryScheme, Map<String, String> conditionMap, Map<String, String> replaceMap, PageHelper ph) throws VciBaseException;
+     DataGrid queryGridByScheme(String queryScheme, Map<String, String> conditionMap, Map<String, Object> replaceMap, PageHelper ph) throws VciBaseException;
     
     /**
      * 鏍规嵁鏌ヨ鏂规鏉ユ煡璇㈠垪琛ㄦ暟鎹紝鍙互鑷畾涔夋煡璇㈢殑鍒楋紝鍖呮嫭鍙傜収鍜屾灇涓�
@@ -432,7 +432,7 @@
      * @return 鍒楄〃鏁版嵁锛屾暟鎹槸Map褰㈠紡鐨勶紝鍖呭惈鍒嗛〉淇℃伅
      * @throws VciBaseException
      */
-     DataGrid queryGridByScheme(String queryScheme, Map<String, String> conditionMap, Map<String, String> replaceMap, PageHelper ph, List<String> clauseList) throws VciBaseException;
+     DataGrid queryGridByScheme(String queryScheme, Map<String, String> conditionMap, Map<String, Object> replaceMap, PageHelper ph, List<String> clauseList) throws VciBaseException;
     
     /**
      * 鏌ヨ瀵硅薄鐨勫垪琛ㄦ暟鎹� 
@@ -461,7 +461,7 @@
      * @return 鍒楄〃鏁版嵁锛屾暟鎹槸瀵硅薄褰㈠紡鐨勶紝鍖呭惈鍒嗛〉淇℃伅
      * @throws VciBaseException
      */
-     DataGrid queryGridClassByScheme(String queryScheme, Class c, Map<String, String> conditionMap, Map<String, String> replaceMap) throws VciBaseException;
+     DataGrid queryGridClassByScheme(String queryScheme, Class c, Map<String, String> conditionMap, Map<String, Object> replaceMap) throws VciBaseException;
     
     /**
      * 閫氳繃鏌ヨ鏂规鏌ヨ瀵硅薄鐨勫垪琛ㄦ暟鎹�
@@ -472,7 +472,7 @@
      * @return 鍒楄〃鏁版嵁锛屾暟鎹槸瀵硅薄褰㈠紡鐨勶紝鍖呭惈鍒嗛〉淇℃伅
      * @throws VciBaseException
      */
-     DataGrid queryGridClassByScheme(String queryScheme, Class c, Map<String, String> conditionMap, Map<String, String> replaceMap, PageHelper ph) throws VciBaseException;
+     DataGrid queryGridClassByScheme(String queryScheme, Class c, Map<String, String> conditionMap, Map<String, Object> replaceMap, PageHelper ph) throws VciBaseException;
 	
     /**
      * BusinessObject 杞负HashMap
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebLoServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebLoServiceI.java
index 413891b..bd00cac 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebLoServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebLoServiceI.java
@@ -3,6 +3,7 @@
 import com.vci.corba.omd.data.AttributeValue;
 import com.vci.corba.omd.data.BusinessObject;
 import com.vci.corba.omd.data.LinkObject;
+import com.vci.corba.query.data.BOAndLO;
 import com.vci.starter.web.exception.VciBaseException;
 import com.vci.starter.web.pagemodel.DataGrid;
 import com.vci.starter.web.pagemodel.PageHelper;
@@ -13,8 +14,6 @@
 import java.util.Map;
 
 public interface WebLoServiceI {
-
-
 
 	/**
 	 * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈤摼鎺ョ被鍨�
@@ -224,14 +223,14 @@
 	 * @param linkTypeDataQuery 鏌ヨ瀵硅薄
 	 * @return 閾炬帴绫诲瀷鍜屽叧鑱旂殑to绔�
 	 */
-	List<com.vci.corba.query.data.BOAndLO> queryCLOAndBOBySchema(UILinkTypeDataQuery linkTypeDataQuery) ;
+	List<BOAndLO> queryCLOAndBOBySchema(UILinkTypeDataQuery linkTypeDataQuery) ;
 
 	/**
 	 * 浣跨敤閾炬帴绫诲瀷鐨勫悕绉版煡璇� 閾炬帴绫诲瀷鐨則o绔殑涓氬姟绫诲瀷
 	 * @param linkTypeDataQuery 鏌ヨ鐨勫璞�
 	 * @return 閾炬帴瀵硅薄鍜宼o绔笟鍔″璞�
 	 */
-	List<com.vci.corba.query.data.BOAndLO> queryCLOAndBoByLinkType(UILinkTypeDataQuery linkTypeDataQuery);
+	List<BOAndLO> queryCLOAndBoByLinkType(UILinkTypeDataQuery linkTypeDataQuery);
 
 	/**
 	 * 鏌ヨ鍒楄〃
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 ce3999a..beba67e 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
@@ -245,6 +245,7 @@
             vo.setTableName(VciBaseUtil.getTableName(vo.getId()));
             vo.setInputRevisionFlag(btmItem.revInput);
             vo.setDelimiter(btmItem.delimiter);
+            vo.setImageName(btmItem.imageName);
             vo.setfName(btmItem.fName);
             vo.setVersionRule(String.valueOf(btmItem.verRuleName));
             if (StringUtils.isNotBlank(vo.getRevisionRuleId()) || vo.isInputRevisionFlag()) {
@@ -715,6 +716,7 @@
                 tree.setParentName(null);
                 tree.setParentId(null);
                 tree.setLeaf(true);
+                tree.setIcon(osBtmTypeVO.getImageName());
                 tree.setId(osBtmTypeVO.getId());
                 tree.setText(osBtmTypeVO.getDescription());
                 tree.setAttributes(WebUtil.objectToMapString(osBtmTypeVO));
@@ -811,6 +813,7 @@
         bizType.label = dto.getName();
         bizType.fName = dto.getfName();
         bizType.implClass = dto.getImplClass();
+        bizType.imageName = dto.getImageName();
         bizType.shape = "";
         bizType.lifeCycle = dto.getLifeCycleId();
         List<String> lcList = Arrays.asList(dto.getSubLifeCycleId().split(","));
@@ -823,14 +826,9 @@
         bizType.revLevel = dto.getRevLevel();
         bizType.revRuleName = dto.getRevisionRuleId();
         bizType.revInput = dto.isInputRevisionFlag();
-
         bizType.delimiter = (dto.getDelimiter() == null ? "" : dto.getDelimiter());
-
         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());
-
         bizType.apNameArray = dto.getApNameArray().split(",");//attrIdList.toArray(new String[attrIdList.size()]);
         String userId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
         long timeMillis = System.currentTimeMillis();
@@ -1406,7 +1404,7 @@
         //璁剧疆鍒楀悕
         List<String> columns = new ArrayList<>(
                 Arrays.asList("绫诲瀷鍚嶇О", "鏍囩", "缁ф壙鑷�", "瀹炵幇绫�", "鎻忚堪", "鐗堟湰瑙勫垯", "鐗堟湰鍙疯鍒�",
-                        "鏄惁鎵嬪伐杈撳叆", "鍒嗛殧绗�", "鐗堟鍙疯鍒�", "鐢熷懡鍛ㄦ湡", "澶囬�夌敓鍛藉懆鏈熷垪琛�", "灞炴�у垪琛�")
+                        "鏄惁鎵嬪伐杈撳叆", "鍒嗛殧绗�", "鐗堟鍙疯鍒�","鍥炬爣", "鐢熷懡鍛ㄦ湡", "澶囬�夌敓鍛藉懆鏈熷垪琛�", "灞炴�у垪琛�")
         );
         try {
             new File(excelPath).createNewFile();
@@ -1430,9 +1428,10 @@
                 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, 10, bizType.imageName));
+                excelDataList.add(new WriteExcelData(i + 1, 11, bizType.lifeCycle));
+                excelDataList.add(new WriteExcelData(i + 1, 12, String.join(",", bizType.lifeCycles)));
+                excelDataList.add(new WriteExcelData(i + 1, 13, String.join(",", bizType.apNameArray)));
                 attributes.addAll(Arrays.asList(bizType.apNameArray));
                 i++;
             }
@@ -1549,6 +1548,7 @@
                 bizType.revInput = Boolean.parseBoolean(osBtmTypePO.getRevInput().toLowerCase(Locale.ROOT));
                 bizType.delimiter = osBtmTypePO.getDelimiter();
                 bizType.verRuleName = osBtmTypePO.getVerRuleName();
+                bizType.imageName = osBtmTypePO.getImageName();
                 bizType.lifeCycle = osBtmTypePO.getLifeCycle();
                 bizType.lifeCycles = osBtmTypePO.getLifeCycles().split(",");
                 bizType.apNameArray = osBtmTypePO.getApNameArray().split(",");
@@ -1622,6 +1622,7 @@
                 tree.setParentName(parentBIzType.getfName());
                 tree.setParentId(parentBIzType.getOid());
                 tree.setLeaf(true);
+                tree.setIcon(bizType.getImageName());
                 tree.setText(bizType.getDescription());
                 tree.setAttributes(WebUtil.objectToMapString(bizType));
                 tree.setChildren(getChildren(osBtmTypeVOS, bizType));
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIDataServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIDataServiceImpl.java
index 5497ddb..f8a96a8 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIDataServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIDataServiceImpl.java
@@ -1,11 +1,14 @@
 package com.vci.web.service.impl;
 
+import com.vci.client.common.oq.OQTool;
+import com.vci.common.qt.object.QueryTemplate;
 import com.vci.corba.common.PLException;
 import com.vci.corba.framework.data.UserInfo;
-import com.vci.corba.omd.btm.BizType;
 import com.vci.corba.omd.data.*;
 import com.vci.corba.omd.lcm.LifeCycle;
 import com.vci.corba.omd.ltm.LinkType;
+import com.vci.corba.omd.qtm.QTInfo;
+import com.vci.corba.query.data.BOAndLO;
 import com.vci.dto.*;
 import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
 import com.vci.frameworkcore.lcstatuspck.ReleaseDataLCStatus;
@@ -35,6 +38,7 @@
 import com.vci.web.util.PlatformClientUtil;
 import com.vci.web.util.WebUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.dom4j.DocumentHelper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -142,7 +146,7 @@
         VciBaseUtil.alertNotNull(dataGridQuery,"鏌ヨ瀵硅薄",dataGridQuery.getBtmname(),"涓氬姟绫诲瀷",dataGridQuery.getTableDefineId());
         //鍏堝垽鏂煡璇㈡ā鏉�
         UITableDefineVO tableDefineVO = uiEngineService.getComponentByOid(dataGridQuery.getComponentOid(),null).getTableDefineVO();
-        String queryTemplate = !CollectionUtils.isEmpty(dataGridQuery.getSourceData())?dataGridQuery.getSourceData().getOrDefault("querytemplate",tableDefineVO.getQueryTemplateName()):tableDefineVO.getQueryTemplateName();
+        String queryTemplate = !CollectionUtils.isEmpty(dataGridQuery.getSourceData())? (String) dataGridQuery.getSourceData().getOrDefault("querytemplate",tableDefineVO.getQueryTemplateName()) :tableDefineVO.getQueryTemplateName();
         if(StringUtils.isBlank(queryTemplate)){
             //璇存槑娌℃湁璁剧疆鏌ヨ妯℃澘锛岄渶瑕佺湅鐪嬪湪杩欎釜琛ㄦ牸鎵�鍦ㄧ殑缁勪欢鏈夋病鏈夎缃�
             tableDefineVO = uiEngineService.getTableById(dataGridQuery.getBtmname(), dataGridQuery.getTableDefineId());
@@ -187,7 +191,7 @@
         queryFieldList.add("creator_name");
         queryFieldList.add("lastmodifier_name");
         //鎴戜滑鍦ㄥ悗鍙版煡璇笟鍔℃暟鎹�
-        Map<String, String> replaceMap = wrapperReplaceMap(dataGridQuery.getSourceData());
+        Map<String, Object> replaceMap = wrapperReplaceMap(dataGridQuery.getSourceData());
 
         if(dataGridQuery.isLinkTypeFlag()){
             UILinkTypeDataQuery linkTypeDataQuery = new UILinkTypeDataQuery();
@@ -220,7 +224,7 @@
     public UIFormDataVO getDataForForm(UIFormQuery formQuery) throws VciBaseException, PLException {
         VciBaseUtil.alertNotNull(formQuery,"琛ㄥ崟鐨勬煡璇㈠璞�",formQuery.getBtmname(),"涓氬姟绫诲瀷鐨勪俊鎭�",formQuery.getOid(),"涓氬姟鏁版嵁鐨勪富閿�",formQuery.getFormDefineId(),"琛ㄥ崟鐨勫畾涔夌紪鍙�");
         UIFormDefineVO formDefineVO = uiEngineService.getFormById(formQuery.getBtmname(),formQuery.getFormDefineId());
-        String queryTemplate = !CollectionUtils.isEmpty(formQuery.getSourceData())?formQuery.getSourceData().getOrDefault("querytemplate",formDefineVO.getQueryTemplateName()):formDefineVO.getQueryTemplateName();
+        String queryTemplate = !CollectionUtils.isEmpty(formQuery.getSourceData())? (String) formQuery.getSourceData().getOrDefault("querytemplate",formDefineVO.getQueryTemplateName()) :formDefineVO.getQueryTemplateName();
         Set<String> queryFieldList = formDefineVO.getItems().stream().filter(s->!UIFieldTypeEnum.CUSTOM.getValue().equalsIgnoreCase(s.getType())).map(UIFormItemVO::getField).collect(Collectors.toSet());
         //鑾峰彇鍙傜収
         List<UIFormItemVO> referFieldList = formDefineVO.getItems().stream().filter(s -> UIFieldTypeEnum.REFER.getValue().equalsIgnoreCase(s.getType())).collect(Collectors.toList());
@@ -253,7 +257,7 @@
         queryFieldList.add("creator_name");
         queryFieldList.add("lastmodifier_name");
         Map<String,String> conditionMap = WebUtil.getOidQuery(formQuery.getOid());
-        Map<String, String> replaceMap = wrapperReplaceMap(formQuery.getSourceData());
+        Map<String, Object> replaceMap = wrapperReplaceMap(formQuery.getSourceData());
         UIFormDataVO formDataVO = new UIFormDataVO();
         replaceMap.put("oid", formQuery.getOid().trim());
         if(!formDefineVO.isLinkTypeFlag()) {
@@ -323,13 +327,14 @@
      * @param sourceDataMap 鏉ユ簮鏁版嵁
      * @return 鏇挎崲鍚庣殑鍊�
      */
-    private Map<String,String> wrapperReplaceMap(Map<String,String> sourceDataMap){
-        Map<String,String> replaceMap =!CollectionUtils.isEmpty(sourceDataMap)? sourceDataMap:new HashMap<>();
+    private Map<String,Object> wrapperReplaceMap(Map<String,Object> sourceDataMap){
+        Map<String,Object> replaceMap =!CollectionUtils.isEmpty(sourceDataMap)? sourceDataMap:new HashMap<>();
         if(!replaceMap.containsKey("f_oid")){
             replaceMap.put("f_oid",replaceMap.getOrDefault("oid",""));
         }
-        if(replaceMap.get("f_oid").contains(TREE_NODE_ID_SEP)){
-            replaceMap.put("f_oid",replaceMap.get("f_oid").split(TREE_NODE_ID_SEP)[1]);
+        String fOid = replaceMap.get("f_oid").toString();
+        if(fOid.contains(TREE_NODE_ID_SEP)){
+            replaceMap.put("f_oid",fOid.split(TREE_NODE_ID_SEP)[1]);
         }
         return replaceMap;
     }
@@ -347,7 +352,7 @@
      * @throws VciBaseException 鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
     @Override
-    public List<Tree> getDataForTree(UITreeQuery treeQuery) throws VciBaseException, PLException {
+    public List<UIDataTree> getDataForTree(UITreeQuery treeQuery) throws Exception {
         VciBaseUtil.alertNotNull(treeQuery,"琛ㄥ崟鐨勬煡璇㈠璞�",treeQuery.getBtmname(),"涓氬姟绫诲瀷鐨勪俊鎭�",treeQuery.getComponentOid(),"鏍戞墍鍦ㄧ殑缁勪欢鐨勪富閿�");
         Map<String, OsAttributeVO> attributeVOMap = attrService.selectAllAttributeMap();
         UIComponentVO componentVO = uiEngineService.getComponentByOid(treeQuery.getComponentOid(),attributeVOMap);
@@ -362,7 +367,14 @@
         if(!treeQuery.isLinkTypeFlag() && StringUtils.isBlank(treeQuery.getParentBtmName())){
             treeQuery.setParentBtmName(treeQuery.getBtmname());
         }
-
+        //TODO: 鏇挎崲鏍戝畾涔変笂鐨勬鍙嶅悜鏌ヨ灞炴�э紝鍥犱负姝e弽鍚戞煡璇㈡槸鐢遍摼鎺ョ被鍨嬫煡璇㈡ā鏉夸笂鎺у埗鐨�
+        boolean isOrientation = false; //鏄惁鍙嶅悜锛屼娇鐢ㄦā鏉夸笂閰嶇疆鐨�
+        String qtName = treeDefineVO.getQueryTemplateName();
+        if(Func.isNotBlank(treeDefineVO.getLinkType()) && Func.isNotBlank(qtName)){
+            QTInfo wrapper = platformClientUtil.getQTDService().getQT(qtName);
+            QueryTemplate qt = OQTool.getQTByDoc(DocumentHelper.parseText(wrapper.qtText), qtName);
+            isOrientation = qt.getDirection().equals("opposite");
+        }
         if(treeQuery.getConditionMap() == null){
             treeQuery.setConditionMap(new HashMap<>());
         }
@@ -381,15 +393,15 @@
         if(StringUtils.isNotBlank(treeQuery.getParentOid()) && treeQuery.getParentOid().contains(TREE_NODE_ID_SEP)){
             treeQuery.setParentOid(treeQuery.getParentOid().split(TREE_NODE_ID_SEP)[1]);
         }
-        String queryTemplate = StringUtils.isNotBlank(treeQuery.getQueryTemplate())?treeQuery.getQueryTemplate():(!CollectionUtils.isEmpty(treeQuery.getSourceData())?treeQuery.getSourceData().getOrDefault("querytemplate",treeDefineVO.getQueryTemplateName()):treeDefineVO.getQueryTemplateName());
-        String valueField = treeQuery.isLinkTypeFlag()?(!treeDefineVO.isOrientation()?"${oid}" + TREE_NODE_ID_SEP + "${t_oid}":"${oid}" + TREE_NODE_ID_SEP + "${f_oid}"):(StringUtils.isNotBlank(treeQuery.getValueField())?treeQuery.getValueField():"oid");
+        String queryTemplate = StringUtils.isNotBlank(treeQuery.getQueryTemplate())?treeQuery.getQueryTemplate():(!CollectionUtils.isEmpty(treeQuery.getSourceData())? (String) treeQuery.getSourceData().getOrDefault("querytemplate",treeDefineVO.getQueryTemplateName()) :treeDefineVO.getQueryTemplateName());
+        String valueField = treeQuery.isLinkTypeFlag()?(!isOrientation?"${oid}" + TREE_NODE_ID_SEP + "${t_oid}":"${oid}" + TREE_NODE_ID_SEP + "${f_oid}"):(StringUtils.isNotBlank(treeQuery.getValueField())?treeQuery.getValueField():"oid");
         String textField = StringUtils.isNotBlank(treeDefineVO.getTreeNodeExpression())?treeDefineVO.getTreeNodeExpression():(StringUtils.isNotBlank(treeQuery.getTextField())?treeQuery.getTextField():"name");
-        List<Tree> rootTreeList = new ArrayList<>();
+        List<UIDataTree> rootTreeList = new ArrayList<>();
         List<String> queryFieldList = new ArrayList<>();
         queryFieldList.add("creator_name");
         queryFieldList.add("lastmodifier_name");
         String rootExpress = StringUtils.isNotBlank(treeQuery.getRootExpress())?treeQuery.getRootExpress():treeDefineVO.getRootContent();
-        Map<String, String> replaceMap = wrapperReplaceMap(treeQuery.getSourceData());
+        Map<String, Object> replaceMap = wrapperReplaceMap(treeQuery.getSourceData());
         if(StringUtils.isBlank(treeDefineVO.getLinkType())){
             //杩欎釜鏄笟鍔$被鍨嬬殑鑷弬鐓�
             //浠ュ墠鐨勫钩鍙版病鏈夊鑷弬鐓ц繖绉嶆湁鍏ㄩ儴鏌ヨ鐨�
@@ -461,7 +473,7 @@
             linkTypeDataQuery.setConditionMap(treeQuery.getConditionMap());
             linkTypeDataQuery.setParentOid(treeQuery.getParentOid());
             linkTypeDataQuery.setClauseList(queryFieldList);
-            linkTypeDataQuery.setDirection(treeDefineVO.isOrientation());
+            linkTypeDataQuery.setDirection(isOrientation);
             linkTypeDataQuery.setToBtmType(treeDefineVO.getBtmType());
             linkTypeDataQuery.setLinkType(treeDefineVO.getLinkType());
             if(UITreeLoadTypeEnum.ALL.getValue().equalsIgnoreCase(treeDefineVO.getLoadType())){
@@ -469,7 +481,7 @@
             }
             if(treeQuery.isQueryRoot()){
                 //鏌ヨ鏍硅妭鐐�.鎴戜滑闇�瑕佸垽鏂槸鍚﹁缃簡鏍硅妭鐐圭殑鏌ヨ鏉′欢
-                List<com.vci.corba.query.data.BOAndLO> rootCbos = null;
+                List<BOAndLO> rootCbos = null;
                 String parentFieldNameAndValue = treeDefineVO.getShowLinkAbs();
                 if(StringUtils.isNotBlank(parentFieldNameAndValue)){
                     if(StringUtils.isNotBlank(queryTemplate)){
@@ -491,7 +503,7 @@
                     }
                     if(!CollectionUtils.isEmpty(rootCbos)){
                         if(StringUtils.isBlank(parentFieldName)){
-                            if(treeDefineVO.isOrientation()){
+                            if(isOrientation){
                                 parentFieldName = "t_oid";
                             }else{
                                 parentFieldName = "f_oid";
@@ -511,15 +523,15 @@
                     if(CollectionUtils.isEmpty(replaceMap)){
                         throw new VciBaseException("鏍硅妭鐐规病鏈夐厤缃煡璇㈡潯浠讹紝涔熸病鏈夋潵婧愭暟鎹�");
                     }
-                    Tree root = new Tree();
-                    root.setOid(replaceMap.getOrDefault("oid",replaceMap.getOrDefault("t_oid","")));
+                    UIDataTree root = new UIDataTree();
+                    root.setOid((String) replaceMap.getOrDefault("oid",replaceMap.getOrDefault("t_oid","")));
                     root.setText(getValueByExpressForBOAndLO(new HashMap<>(),replaceMap,rootExpress));
                     root.setAttributes(replaceMap);
                     root.setIndex("0");
                     rootTreeList.add(root);
 
                     if(StringUtils.isBlank(parentFieldName)){
-                        if(treeDefineVO.isOrientation()){
+                        if(isOrientation){
                             parentFieldName = "t_oid";
                         }else{
                             parentFieldName = "f_oid";
@@ -539,7 +551,7 @@
                     if(linkTypeDataQuery.getReplaceMap() == null){
                         linkTypeDataQuery.setReplaceMap(new HashMap<>());
                     }
-                    linkTypeDataQuery.getReplaceMap().put(treeDefineVO.isOrientation()?"t_oid":"f_oid",treeQuery.getParentOid());
+                    linkTypeDataQuery.getReplaceMap().put(isOrientation?"t_oid":"f_oid",treeQuery.getParentOid());
                 }
                 return cloAndCbo2Trees(loService.queryCLOAndBoByLinkType(linkTypeDataQuery),valueField,textField,parentFieldName,treeQuery.isShowCheckBox(),treeQuery.getParentOid());
             }
@@ -553,7 +565,7 @@
      * @throws VciBaseException 鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
     @Override
-    public BaseResult getDataByTemp(UITreeQuery treeQuery) throws VciBaseException, PLException {
+    public BaseResult getDataByTemp(UITreeQuery treeQuery) throws Exception {
         VciBaseUtil.alertNotNull(treeQuery,"琛ㄥ崟鐨勬煡璇㈠璞�",treeQuery.getComponentOid(),"褰撳墠缁勪欢鐨勪富閿�");
         //1銆佸厛鏌ヨ椤甸潰瀹氫箟缁勪欢
         Map<String, OsAttributeVO> attributeVOMap = attrService.selectAllAttributeMap();
@@ -563,12 +575,19 @@
         }
         // 2銆佹牴鎹厤缃殑鏌ヨ妯℃澘鏌ヨ鏁版嵁(闇�瑕佽�冭檻鍏ㄩ潰涓�鐐�),
         // 杩欏効鏍规嵁褰撳墠绫诲瀷鏉ヨ幏鍙栨槸浠�涔堢被鍨嬬殑鏌ヨ妯℃澘锛岀劧鍚庡仛瀵瑰簲鐨勬煡璇㈠鐞�
-
+        //TODO: 鏇挎崲鏍戝畾涔変笂鐨勬鍙嶅悜鏌ヨ灞炴�э紝鍥犱负姝e弽鍚戞煡璇㈡槸鐢遍摼鎺ョ被鍨嬫煡璇㈡ā鏉夸笂鎺у埗鐨�
         UITreeDefineVO treeDefineVO = componentVO.getTreeDefineVO();
-        String queryTemplate = StringUtils.isNotBlank(treeQuery.getQueryTemplate())?treeQuery.getQueryTemplate():(!CollectionUtils.isEmpty(treeQuery.getSourceData())?treeQuery.getSourceData().getOrDefault("querytemplate",treeDefineVO.getQueryTemplateName()):treeDefineVO.getQueryTemplateName());
-        Map<String, String> replaceMap = wrapperReplaceMap(treeQuery.getSourceData());
+        boolean isOrientation = false; //鏄惁鍙嶅悜锛屼娇鐢ㄦā鏉夸笂閰嶇疆鐨�
+        String qtName = treeDefineVO.getQueryTemplateName();
+        if(Func.isNotBlank(treeDefineVO.getLinkType()) && Func.isNotBlank(qtName)){
+            QTInfo wrapper = platformClientUtil.getQTDService().getQT(qtName);
+            QueryTemplate qt = OQTool.getQTByDoc(DocumentHelper.parseText(wrapper.qtText), qtName);
+            isOrientation = qt.getDirection().equals("opposite");
+        }
+        String queryTemplate = StringUtils.isNotBlank(treeQuery.getQueryTemplate())?treeQuery.getQueryTemplate():(!CollectionUtils.isEmpty(treeQuery.getSourceData())? (String) treeQuery.getSourceData().getOrDefault("querytemplate",treeDefineVO.getQueryTemplateName()) :treeDefineVO.getQueryTemplateName());
+        Map<String, Object> replaceMap = wrapperReplaceMap(treeQuery.getSourceData());
         List<String> queryFieldList = new ArrayList<>();
-        String valueField = treeQuery.isLinkTypeFlag()?(!treeDefineVO.isOrientation()?"${oid}" + TREE_NODE_ID_SEP + "${t_oid}":"${oid}" + TREE_NODE_ID_SEP + "${f_oid}"):(StringUtils.isNotBlank(treeQuery.getValueField())?treeQuery.getValueField():"oid");
+        String valueField = treeQuery.isLinkTypeFlag()?(!isOrientation?"${oid}" + TREE_NODE_ID_SEP + "${t_oid}":"${oid}" + TREE_NODE_ID_SEP + "${f_oid}"):(StringUtils.isNotBlank(treeQuery.getValueField())?treeQuery.getValueField():"oid");
         String textField = StringUtils.isNotBlank(treeDefineVO.getTreeNodeExpression())?treeDefineVO.getTreeNodeExpression():(StringUtils.isNotBlank(treeQuery.getTextField())?treeQuery.getTextField():"name");
         String rootExpress = StringUtils.isNotBlank(treeQuery.getRootExpress())?treeQuery.getRootExpress():treeDefineVO.getRootContent();
         String parentFieldName = treeQuery.getParentFieldName();
@@ -586,7 +605,7 @@
         List<BusinessObject> rootCbos = boService.queryCBOByScheme(queryTemplate, null, replaceMap);
 
         //3銆佹牴鎹笉鍚岀殑缁勪欢杩斿洖涓嶅悓鐨勬暟鎹被鍨嬶紙鏍戙�佸垪琛ㄣ�佹爲琛ㄣ�佽嚜瀹氫箟妯℃澘銆佽〃鍗曠瓑锛�
-        List<Tree> rootTreeList = null;
+        List<UIDataTree> rootTreeList = null;
         if(!CollectionUtils.isEmpty(rootCbos)){
             rootTreeList = cbo2Trees(rootCbos,valueField,StringUtils.isBlank(rootExpress)?textField:rootExpress,parentFieldName,treeQuery.isShowCheckBox(),null);
             TreeQueryObject treeQueryObject = new TreeQueryObject();
@@ -609,19 +628,19 @@
      * @param queryFieldList 鏌ヨ鐨勫瓧娈�
      * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄锛岄渶瑕乿alueField鍜宼extField锛岃繕鏈塸arentFieldName,鍜宑heckBox
      */
-    private void queryTreeForBO(List<Tree> rootTreeList, String queryTemplate,List<String> queryFieldList,TreeQueryObject treeQueryObject) {
-        for (Tree rootTree : rootTreeList) {
+    private void queryTreeForBO(List<UIDataTree> rootTreeList, String queryTemplate,List<String> queryFieldList,TreeQueryObject treeQueryObject) {
+        for (UIDataTree rootTree : rootTreeList) {
             List<BusinessObject> thisChildren = null;
-            Map<String,String> sourceDataMap = rootTree.getAttributes();
+            Map<String,Object> sourceDataMap = rootTree.getAttributes();
             sourceDataMap.put("f_oid",rootTree.getOid());
             Map<String,String> conditionMap = new HashMap<>();
             conditionMap.put(treeQueryObject.getParentFieldName(),rootTree.getOid());
             if (StringUtils.isNotBlank(queryTemplate)) {
                 thisChildren = boService.queryCBOByScheme(queryTemplate, conditionMap, sourceDataMap, null, queryFieldList);
             } else {
-                thisChildren = boService.queryCBO(sourceDataMap.getOrDefault("btmname",sourceDataMap.getOrDefault("btmName",treeQueryObject.getParentBtmName())), conditionMap, null, queryFieldList);
+                thisChildren = boService.queryCBO((String) sourceDataMap.getOrDefault("btmname",sourceDataMap.getOrDefault("btmName",treeQueryObject.getParentBtmName())), conditionMap, null, queryFieldList);
             }
-            List<Tree> childrenTree = cbo2Trees(thisChildren, treeQueryObject.getValueField(), treeQueryObject.getTextField(), treeQueryObject.getParentFieldName(), treeQueryObject.isShowCheckBox(), null);
+            List<UIDataTree> childrenTree = cbo2Trees(thisChildren, treeQueryObject.getValueField(), treeQueryObject.getTextField(), treeQueryObject.getParentFieldName(), treeQueryObject.isShowCheckBox(), null);
             rootTree.setChildren(childrenTree);
             if(treeQueryObject.isQueryAllLevel() && !CollectionUtils.isEmpty(childrenTree) ) {
                 queryTreeForBO(childrenTree,queryTemplate,queryFieldList,treeQueryObject);
@@ -638,8 +657,8 @@
      * @param textField 鏄剧ず琛ㄨ揪寮�
      * @param showCheckBox 鏄惁鏄剧ず澶嶉�夋
      */
-    private void queryTreeForLO(List<Tree> rootTreeList, UILinkTypeDataQuery linkTypeDataQuery,String parentFieldName,String valueField,String textField,boolean showCheckBox) {
-        for (Tree rootTree : rootTreeList) {
+    private void queryTreeForLO(List<UIDataTree> rootTreeList, UILinkTypeDataQuery linkTypeDataQuery,String parentFieldName,String valueField,String textField,boolean showCheckBox) {
+        for (UIDataTree rootTree : rootTreeList) {
             Map<String,String> conditionMap = new HashMap<>();
             conditionMap.put(linkTypeDataQuery.isDirection()?"t_oid":"f_oid",rootTree.getOid());
             linkTypeDataQuery.setConditionMap(conditionMap);
@@ -658,12 +677,12 @@
      * @param parentOid 涓婄骇鐨勪富閿�
      * @return 鏍�
      */
-    private List<Tree> cbo2Trees(Collection<BusinessObject> cbos,String valueField,String textField,String parentFieldName,boolean showCheckBox,String parentOid){
+    private List<UIDataTree> cbo2Trees(Collection<BusinessObject> cbos,String valueField,String textField,String parentFieldName,boolean showCheckBox,String parentOid){
         final int[] i = {0};
-        List<Tree> rootList = new ArrayList<>();
-        List<Tree> children = new ArrayList<>();
+        List<UIDataTree> rootList = new ArrayList<>();
+        List<UIDataTree> children = new ArrayList<>();
         cbos.stream().forEach(cbo->{
-            Tree tree = new Tree();
+            UIDataTree tree = new UIDataTree();
             tree.setOid(getValueByExpress(cbo,valueField));
             tree.setText(getValueByExpress(cbo,textField));
             if(StringUtils.isNotBlank(parentFieldName)){
@@ -683,7 +702,7 @@
         if(rootList.size() == 0 && children.size() == 0){
             return rootList;
         }
-        return Tree.getChildList(rootList,children);
+        return UIDataTree.getChildList(rootList,children);
     }
 
     /**
@@ -696,42 +715,25 @@
      * @param parentOid 涓婄骇鐨勫��
      * @return 鏍戝舰鏁版嵁
      */
-    public List<Tree> cloAndCbo2Trees(Collection<com.vci.corba.query.data.BOAndLO> boAndLOS,String valueField,String textField,String parentFieldName,boolean showCheckBox,String parentOid){
+    public List<UIDataTree> cloAndCbo2Trees(Collection<BOAndLO> boAndLOS, String valueField, String textField, String parentFieldName, boolean showCheckBox, String parentOid){
         final int[] i = {0};
-        List<Tree> rootList = new ArrayList<>();
-        List<Tree> children = new ArrayList<>();
+        List<UIDataTree> rootList = new ArrayList<>();
+        List<UIDataTree> children = new ArrayList<>();
         boAndLOS.stream().forEach(boAndLO->{
-            Tree tree = new Tree();
+            UIDataTree tree = new UIDataTree();
             BusinessObject cbo = new BusinessObject();
             cbo = boAndLO.bo;
             LinkObject clo = new LinkObject();
             clo = boAndLO.lo;
-            Map<String,String> cloMap = loService.clo2Map(clo);
-            Map<String,String> cbo2Map = boService.cbo2Map(cbo);
-            //灏嗛摼鎺ョ被鍨嬬殑灞炴�т篃鏀捐繘杩涜杩斿洖
-            String linkName = Func.isNotBlank(cloMap.get("linktypename")) ? cloMap.get("linktypename"):parentFieldName;
-            Map<String, String> returnMap = new HashMap<>();
-            cloMap.forEach((key,value)->{
-                //杩囨护鎺夌┖鍊�
-                if(!returnMap.containsKey(linkName + key) && Func.isNotBlank(key) || Func.isNotBlank(value)){
-                    returnMap.put(linkName + key,value);
-                }
-            });
-            //杩囨护鎺夌┖鍊硷紝鐢ㄤ綔杩斿洖鐨刴ap
-           cbo2Map.entrySet().stream().forEach(entry -> {
-                String key = entry.getKey();
-                String value = entry.getValue();
-                if (!returnMap.containsKey(key) && Func.isNotBlank(key) && Func.isNotBlank(value)) {
-                    returnMap.put(key,value);
-                }
-            });
+            Map<String,Object> cloMap = loService.clo2Map(clo);
+            Map<String,Object> cbo2Map = boService.cbo2Map(cbo);
 
-            if(!CollectionUtils.isEmpty(cbo2Map)){
+            /*if(!CollectionUtils.isEmpty(cbo2Map)){
                 cbo2Map.forEach((key,value)->{
                     //TODO: 杩欏効涓哄暐瑕佹嫾鎺ヤ笂parentFieldName锛屽鑷村悗闈reemarker琛ㄨ揪寮忔棤娉曟纭浛鎹�
-                    cloMap.put(/*parentFieldName + "." +*/ key,value);
+                    cloMap.put(/*parentFieldName + "." + key,value);
                 });
-            }
+            }*/
             tree.setOid(getValueByExpressForBOAndLO(cloMap,cbo2Map,valueField));
             tree.setText(getValueByExpressForBOAndLO(cloMap,cbo2Map,textField));
             if(StringUtils.isBlank(parentFieldName)){
@@ -743,7 +745,10 @@
                     tree.setParentId(ObjectTool.getLOAttributeValue(clo,parentFieldName));
                 }
             }
-
+            //TODO锛氳繑鍥炵殑鏁版嵁鏀规垚鎸夐摼鎺ョ被鍨嬪拰涓氬姟绫诲瀷涓簁ey锛氬�间负瀵瑰簲鐨勫睘鎬ч泦鍚堝舰寮忚繑鍥�
+            Map<String, Object> returnMap = new HashMap<>();
+            returnMap.put((String) cloMap.get("linktypename"),cloMap);
+            returnMap.put((String) cbo2Map.get("btmname"),cloMap);
             tree.setAttributes(returnMap);
             tree.setIndex(i[0] + "");
             i[0]++;
@@ -756,7 +761,7 @@
             }
         });
 
-        return Tree.getChildList(rootList,children);
+        return UIDataTree.getChildList(rootList,children);
     }
 
     /**
@@ -788,17 +793,30 @@
      * @param fieldExpress 琛ㄨ揪寮�
      * @return 鏇挎崲鍚庣殑鍊�
      */
-    private String getValueByExpressForBOAndLO(Map<String,String> valueMap,Map<String,String> boValueMap,String fieldExpress){
+    private String getValueByExpressForBOAndLO(Map<String,Object> valueMap,Map<String,Object> boValueMap,String fieldExpress){
         if(fieldExpress.contains("${")){
             //浣跨敤freemarker澶勭悊
-            return VciBaseUtil.replaceByFreeMarker(fieldExpress,valueMap);
+            /*
+            TODO:琛ㄨ揪寮忓瓨鍦═_OID.name杩欑褰㈠紡鏃秄reemarker鏇挎崲瑙勫垯鏄粠T_OID杩欎釜瀵硅薄涓嫑name灞炴�э紝
+                浣嗘槸valueMap鏄竴涓猄tring,String鐨凪ap鎵�浠ラ渶瑕佸皢T_OID.鎴朏_OID.鍘绘帀锛屽洜涓轰笉绠℃槸鏌ヨ鐨�
+                form绔繕鏄痶o绔兘鏄钩鍙版煡濂芥斁鍦ㄤ笟鍔″睘鎬oValueMap闆嗗悎涓殑锛屾墍浠ョ洿鎺ユ浛灏卞彲浠�
+            */
+            if(fieldExpress.contains(".")){
+                //鍘婚櫎t_oid銆乀_OID浠ュ強f_oid銆丗_OID
+                fieldExpress = fieldExpress
+                        .replace("t_oid.","")
+                        .replace("T_OID.","")
+                        .replace("f_oid.","")
+                        .replace("F_OID.","");
+            }
+            return VciBaseUtil.replaceByFreeMarker(fieldExpress,boValueMap);
         }else {
             List<String> fieldList = VciBaseUtil.str2List(fieldExpress);
-            Map<String,String> valueLowMap = new HashMap<>();
+            Map<String,Object> valueLowMap = new HashMap<>();
             valueMap.forEach((key,value)->{
                 valueLowMap.put(key.toLowerCase(),value);
             });
-            Map<String,String> boLowValueMap = new HashMap<>();
+            Map<String,Object> boLowValueMap = new HashMap<>();
             if(!CollectionUtils.isEmpty(boValueMap)){
                 boValueMap.forEach((key,value)->{
                     boLowValueMap.put(key.toLowerCase(),value);
@@ -806,7 +824,7 @@
             }
             StringBuilder sb = new StringBuilder();
             fieldList.stream().forEach(field->{
-                sb.append(valueLowMap.getOrDefault(field,boLowValueMap.getOrDefault(field,""))).append(" ");
+                sb.append(boLowValueMap.getOrDefault(field,valueLowMap.getOrDefault(field,""))).append(" ");
             });
             return sb.toString().trim();
         }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebBoServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebBoServiceImpl.java
index 4fab207..be39cfa 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebBoServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebBoServiceImpl.java
@@ -893,7 +893,7 @@
 	 */
 	@Override
 	public List<BusinessObject> queryCBOByScheme(String queryScheme,
-			Map<String, String> conditionMap, Map<String, String> replaceMap)
+			Map<String, String> conditionMap, Map<String, Object> replaceMap)
 			throws VciBaseException {
 		PageHelper ph = new PageHelper(-1);
 		return queryCBOByScheme(queryScheme,conditionMap,replaceMap,ph);
@@ -911,7 +911,7 @@
 	 */
 	@Override
 	public List<BusinessObject> queryCBOByScheme(String queryScheme,
-			Map<String, String> conditionMap, Map<String, String> replaceMap,
+			Map<String, String> conditionMap, Map<String, Object> replaceMap,
 			PageHelper ph) throws VciBaseException {
 		List<String> clauseList = new ArrayList<String>();
 		clauseList.add("*");
@@ -926,7 +926,7 @@
 	 * @throws VciBaseException 鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
 	 */
 	@Override
-	public QueryTemplate getQtByName(String name, Map<String, String> replaceMap) throws VciBaseException{
+	public QueryTemplate getQtByName(String name, Map<String, Object> replaceMap) throws VciBaseException{
 		QueryTemplate qt = null;
 		try{
 			VciBaseUtil.alertNotNull(name,"鏌ヨ妯℃澘鐨勫悕绉�");
@@ -935,9 +935,10 @@
 			//鍥犱负涔嬪墠骞冲彴鐨凾ool.replaceQTValues 娌℃湁澶勭悊 ${xxx}銆傦紝 涓轰簡蹇界暐澶у皬鍐欙紝鎴戜滑杩欓噷鍗曠嫭澶勭悊 weidy@2021-3-10
 			//鎴戜滑杞崲涓哄皬鍐�
 			Condition condition = qt.getCondition();
-			Map<String,String> replaceLowMap = new HashMap<>();
+			Map<String,Object> replaceLowMap = new HashMap<>();
 			if(condition !=null && condition.getCIMap()!=null){
 				// Map<String, String> systemVarValueMap = VciSystemVarConstants.getSystemVarValueMap();
+				//杞皬鍐�
 				if(!CollectionUtils.isEmpty(replaceMap)){
 					replaceMap.forEach((key,value)->{
 						replaceLowMap.put(key.toLowerCase(),value);
@@ -985,7 +986,7 @@
 	 * @param qt
 	 * @param replaceLowMap
 	 */
-	private void recurReplaceCiMap(QueryTemplate qt, Map<String,String> replaceLowMap){
+	private void recurReplaceCiMap(QueryTemplate qt, Map<String,Object> replaceLowMap){
 		//璺冲嚭閫掑綊
 		if(Func.isEmpty(qt)){
 			return;
@@ -1009,7 +1010,7 @@
 							}
 						}
 					}else if(replaceLowMap.containsKey(value.toLowerCase())){
-						lInfo.getValue().setOrdinaryValue(replaceLowMap.get(value.toLowerCase()));
+						lInfo.getValue().setOrdinaryValue((String) replaceLowMap.get(value.toLowerCase()));
 					}
 				}else {
 					recurReplaceCiMap(lInfo.getValue().getQueryTemplate(),replaceLowMap);
@@ -1030,7 +1031,7 @@
 	 */
 	@Override
 	public List<BusinessObject> queryCBOByScheme(String queryScheme,
-			Map<String, String> conditionMap, Map<String, String> replaceMap,
+			Map<String, String> conditionMap, Map<String, Object> replaceMap,
 			PageHelper ph, List<String> clauseList) throws VciBaseException {
 		QueryTemplate qt = getQtByName(queryScheme,replaceMap);
 		return baseQueryCBO(qt,conditionMap,ph,clauseList);
@@ -1134,7 +1135,7 @@
 	 */
 	@Override
 	public int queryCountByScheme(String queryScheme,
-			Map<String, String> conditionMap, Map<String, String> replaceMap)
+			Map<String, String> conditionMap, Map<String, Object> replaceMap)
 			throws VciBaseException {
 		QueryTemplate qt = getQtByName(queryScheme,replaceMap);
 		return baseQueryCount(qt,conditionMap);
@@ -1482,7 +1483,7 @@
 	@Override
 	public <T> List<T> queryObjectByScheme(String queryScheme, Class<T> c,
 			Map<String, String> conditionMap, PageHelper ph,
-			Map<String, String> replaceMap) throws VciBaseException {
+			Map<String, Object> replaceMap) throws VciBaseException {
 		WebUtil.alertNotNull(queryScheme,"鏌ヨ鏂规");
 		//鐩存帴浠庡璞¢噷鍘绘煡璇笟鍔$被鍨嬬殑鍚嶇О
 		swapConditionMap(c,conditionMap);
@@ -2108,7 +2109,7 @@
      */
 	@Override
 	public DataGrid queryGridByScheme(String queryScheme,
-			Map<String, String> conditionMap, Map<String, String> replaceMap)
+			Map<String, String> conditionMap, Map<String, Object> replaceMap)
 			throws VciBaseException {
 		return queryGridByScheme(queryScheme,conditionMap,replaceMap,new PageHelper(-1,true),null);
 	}
@@ -2124,7 +2125,7 @@
      */
 	@Override
 	public DataGrid queryGridByScheme(String queryScheme,
-			Map<String, String> conditionMap, Map<String, String> replaceMap,
+			Map<String, String> conditionMap, Map<String, Object> replaceMap,
 			PageHelper ph) throws VciBaseException {
 		return queryGridByScheme(queryScheme,conditionMap,replaceMap,ph,null);
 	}
@@ -2141,7 +2142,7 @@
      */
 	@Override
 	public DataGrid queryGridByScheme(String queryScheme,
-			Map<String, String> conditionMap, Map<String, String> replaceMap,
+			Map<String, String> conditionMap, Map<String, Object> replaceMap,
 			PageHelper ph, List<String> clauseList) throws VciBaseException {
 		if(ph == null){
 			ph = new PageHelper(-1,true);
@@ -2212,7 +2213,7 @@
      */
 	@Override
 	public DataGrid queryGridClassByScheme(String queryScheme, Class c,
-			Map<String, String> conditionMap,Map<String,String> replaceMap) throws VciBaseException {
+			Map<String, String> conditionMap,Map<String,Object> replaceMap) throws VciBaseException {
 		return queryGridClassByScheme(queryScheme,c,conditionMap,replaceMap,new PageHelper(-1,true));
 	}
 	
@@ -2227,7 +2228,7 @@
      */
 	@Override
 	public DataGrid queryGridClassByScheme(String queryScheme, Class c,
-			Map<String, String> conditionMap, Map<String,String> replaceMap,PageHelper ph)
+			Map<String, String> conditionMap, Map<String,Object> replaceMap,PageHelper ph)
 			throws VciBaseException {
 		if(ph == null){
 			ph = new PageHelper(-1,true);
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebLoServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebLoServiceImpl.java
index 59d7a9f..3b368ff 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebLoServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebLoServiceImpl.java
@@ -525,7 +525,7 @@
 	@Override
 	public List<com.vci.corba.query.data.BOAndLO> queryCLOAndBOBySchema(UILinkTypeDataQuery linkTypeDataQuery) {
 		VciBaseUtil.alertNotNull(linkTypeDataQuery,"閾炬帴绫诲瀷鏌ヨ瀵硅薄",linkTypeDataQuery.getQueryTemplateName(),"鏌ヨ妯℃澘鐨勫悕绉�");
-		QueryTemplate qt =boService.getQtByName(linkTypeDataQuery.getQueryTemplateName(),linkTypeDataQuery.getReplaceMap());
+		QueryTemplate qt = boService.getQtByName(linkTypeDataQuery.getQueryTemplateName(),linkTypeDataQuery.getReplaceMap());
 		return queryCLOAndBOByQueryTemplate(qt,linkTypeDataQuery);
 	}
 

--
Gitblit v1.9.3