From 889842eb8b64a0b72c449ce23ff21e4e8c935cae Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期五, 26 七月 2024 16:06:49 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java                        |    2 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/OrgDeptQueryServiceImpl.java |  206 ++-
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/OrgDepartmentQueryController.java    |    2 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/OsAttributeDTO.java                                   |   80 +
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsAttributeServiceI.java                          |   65 +
 Source/plt-web/plt-web-parent/plt-web/src/main/resources/properties/usedNames.properties                                  |    2 
 Source/plt-web/plt-web-parent/plt-poi/src/main/java/com/vci/starter/poi/util/ExcelUtil.java                               |    4 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBtmServiceI.java                                |   26 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java  |   10 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBaseServiceI.java                               |    2 
 Source/plt-web/plt-web-ui/src/api/system/menu.js                                                                          |   92 -
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/OrgDeptQueryServiceI.java         |   11 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/properties/UsedNames.java                                 |   38 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLinkTypeServiceI.java                           |   37 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsEnumServiceImpl.java                       |  351 ++++++
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/wrapper/VciQueryWrapperForDO.java            |    9 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/properties/ConfigCorbaReader.java               |    4 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsAttributeServiceImpl.java                  |  722 ++++++++++++++
 Source/plt-web/plt-web-parent/plt-poi/src/main/java/com/vci/starter/poi/bo/WriteExcelData.java                            |   35 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebBtmTypeController.java                      |   28 
 Source/plt-web/plt-web-ui/src/api/treeMyMenu.js                                                                           |    2 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/OsAttributeDO.java                                  |    5 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java                        |   84 +
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/OrgDepartmentVO.java                            |   37 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/OsAttributeVO.java                              |   42 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/SmUserPO.java                                          |    2 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLinkTypeController.java                      |   70 +
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OrgDeptPO.java                                         |   10 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmRoleQueryServiceImpl.java  |   34 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmPwdStrategyQueryController.java    |    3 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsEnumServiceI.java                               |   38 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebEnumController.java                         |  111 ++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsAttributeController.java                     |  205 ++++
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OsEnumPO.java                                          |   81 +
 Source/plt-web/plt-web-ui/src/api/user.js                                                                                 |   91 -
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OsAttributePO.java                                     |  118 ++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLinkTypeServiceImpl.java                   |  162 +++
 37 files changed, 2,467 insertions(+), 354 deletions(-)

diff --git a/Source/plt-web/plt-web-parent/plt-poi/src/main/java/com/vci/starter/poi/bo/WriteExcelData.java b/Source/plt-web/plt-web-parent/plt-poi/src/main/java/com/vci/starter/poi/bo/WriteExcelData.java
index 34ab1ba..f49580e 100644
--- a/Source/plt-web/plt-web-parent/plt-poi/src/main/java/com/vci/starter/poi/bo/WriteExcelData.java
+++ b/Source/plt-web/plt-web-parent/plt-poi/src/main/java/com/vci/starter/poi/bo/WriteExcelData.java
@@ -1,8 +1,5 @@
 package com.vci.starter.poi.bo;
 
-import org.apache.poi.ss.usermodel.CellStyle;
-import org.apache.poi.ss.usermodel.Font;
-
 import java.util.List;
 
 /**
@@ -107,7 +104,6 @@
 	 */
 	private Integer width;
 
-
 	public String getFontColor() {
 		return fontColor;
 	}
@@ -145,6 +141,37 @@
 	}
 
 	/**
+	 * 鏋勯�犳柟娉�-鏄惁灞呬腑
+	 * @param row 琛�
+	 * @param col 鍒�
+	 * @param obj 鍊�
+	 */
+	public WriteExcelData(int row, int col, boolean center, Object obj){
+		this.row = row;
+		this.col = col;
+		this.center = center;
+		this.obj = obj;
+	}
+
+	/**
+	 * 鏋勯�犳柟娉�-鍚堝苟锛屽眳涓弬鏁�
+	 * @param row 琛�
+	 * @param rowTo 鍚堝苟琛�
+	 * @param merged 鏄惁鍚堝苟鍗曞厓鏍�
+	 * @param center 鏄惁灞呬腑
+	 * @param col 鍒�
+	 * @param obj 鍊�
+	 */
+	public WriteExcelData(int row,int rowTo,boolean merged,boolean center, int col, Object obj){
+		this.row = row;
+		this.rowTo = rowTo;
+		this.merged = merged;
+		this.center = center;
+		this.col = col;
+		this.obj = obj;
+	}
+
+	/**
 	 * 鍐欏叕寮�
 	 * @param row 琛屽彿 浠�0 寮�濮�
 	 * @param col 鍒楀彿浠�0寮�濮�
diff --git a/Source/plt-web/plt-web-parent/plt-poi/src/main/java/com/vci/starter/poi/util/ExcelUtil.java b/Source/plt-web/plt-web-parent/plt-poi/src/main/java/com/vci/starter/poi/util/ExcelUtil.java
index aedbcdf..2ed445e 100644
--- a/Source/plt-web/plt-web-parent/plt-poi/src/main/java/com/vci/starter/poi/util/ExcelUtil.java
+++ b/Source/plt-web/plt-web-parent/plt-poi/src/main/java/com/vci/starter/poi/util/ExcelUtil.java
@@ -1,5 +1,6 @@
 package com.vci.starter.poi.util;
 
+import cn.hutool.core.collection.CollUtil;
 import com.vci.starter.poi.annotation.ExcelColumn;
 import com.vci.starter.poi.annotation.ExcelTitle;
 import com.vci.starter.poi.bo.*;
@@ -630,6 +631,8 @@
 					//鍐欏��
 					setCellValue(cell, value);
 				}
+				//璁剧疆鑷�傚簲鍒楀
+				sheet.autoSizeColumn(ed.getCol());
 				if(ed.getWidth()!=null && ed.getWidth()>0){
 					sheet.setColumnWidth(cell.getColumnIndex(),(int)(ed.getWidth() + 0.72)*256);
 				}
@@ -855,6 +858,7 @@
 				if (ed.getColTo() < ed.getCol()) {
 					ed.setColTo(ed.getCol());
 				}
+				List<CellRangeAddress> cellRangeAddressList = sheet.getMergedRegions();
 				sheet.addMergedRegion(new CellRangeAddress(ed.getRow(), ed.getRowTo(), ed.getCol(), ed.getColTo()));
 			});
 		}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/OsAttributeDTO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/OsAttributeDTO.java
index 9f8a1ce..3731204 100644
--- a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/OsAttributeDTO.java
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/OsAttributeDTO.java
@@ -49,7 +49,6 @@
      */
     private String defaultValue;
 
-
     /**
      * 浣跨敤鏋氫妇鑻辨枃鍚嶇О
      */
@@ -71,6 +70,16 @@
     private String btmTypeName;
 
     /**
+     * 鍙傜収鐨勯摼鎺ョ被鍨嬪悕绉�
+     */
+    private String linkTypeName;
+
+    /**
+     * 閫夋嫨浜嗛摼鎺ョ被鍨嬫椂閫夋嫨鐨勭増鏈�
+     */
+    private Integer version;
+
+    /**
      * 灞炴�х殑闀垮害
      */
     private Integer attrLength;
@@ -85,7 +94,6 @@
      */
     private Integer scaleLength;
 
-
     /**
      * 鍙栧�艰寖鍥�
      */
@@ -96,6 +104,74 @@
      */
     private Date ts;
 
+    /**
+     * 鍒涘缓浜�
+     */
+    private String creator;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    private Date createTime;
+
+    /**
+     * 鏈�鍚庝慨鏀逛汉
+     */
+    private String lastModifier;
+
+    /**
+     * 鏈�鍚庝慨鏀规椂闂达紝鏍煎紡鏄痽yyy-MM-dd HH:mm:ss
+     */
+    private Date lastModifyTime;
+
+    public String getLinkTypeName() {
+        return linkTypeName;
+    }
+
+    public void setLinkTypeName(String linkTypeName) {
+        this.linkTypeName = linkTypeName;
+    }
+
+    public void setVersion(Integer version) {
+        this.version = version;
+    }
+
+    public Integer getVersion() {
+        return version;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public void setLastModifier(String lastModifier) {
+        this.lastModifier = lastModifier;
+    }
+
+    public void setLastModifyTime(Date lastModifyTime) {
+        this.lastModifyTime = lastModifyTime;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public String getLastModifier() {
+        return lastModifier;
+    }
+
+    public Date getLastModifyTime() {
+        return lastModifyTime;
+    }
+
     public String getOid() {
         return oid;
     }
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/OsAttributeDO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/OsAttributeDO.java
index 27d1f3e..58a91e4 100644
--- a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/OsAttributeDO.java
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/OsAttributeDO.java
@@ -40,21 +40,25 @@
     /**
      * 鎻忚堪
      */
+    @Column(name = "description")
     private String description;
 
     /**
      * 鏃堕棿鎴�
      */
+    @Column(name = "ts")
     private Date ts;
 
     /**
      * 鍒涘缓浜�
      */
+    @Column(name = "creator")
     private String creator;
 
     /**
      * 鍒涘缓鏃堕棿
      */
+    @Column(name = "createtime")
     private Date createTime;
 
     /**
@@ -73,6 +77,7 @@
      * 鍐呭
      */
     @XmlType
+    @Column(name = "content")
     private String content;
 
     public String getOid() {
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/OrgDepartmentVO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/OrgDepartmentVO.java
index 6040f84..da14c67 100644
--- a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/OrgDepartmentVO.java
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/OrgDepartmentVO.java
@@ -22,7 +22,7 @@
     /**
      * 闄ら儴闂ㄤ富閿鐨勫敮涓�鏍囪瘑锛岄暱搴︿负8浣嶏紝鍙�氳繃璇ュ弬鏁板弽鎺ㄥ洖閮ㄩ棬涓婚敭;涓昏鐢ㄤ簬瀵煎叆閮ㄩ棬鏃朵娇鐢�
      */
-    private String uniqueId;
+    //private String uniqueId;
 
     /**
      * 閮ㄩ棬鍚嶇О
@@ -99,7 +99,34 @@
      */
     private String tel;
 
+    /**
+     * 閮ㄩ棬鍚嶇О缁勬垚鐨勫叏璺緞锛歞ept1/dept2/dept3
+     */
+    private String fullDeptNamePath;
+
+    /**
+     * 閮ㄩ棬灞傜骇
+     */
     private int treelevel;
+
+    public OrgDepartmentVO() {
+    }
+
+    public OrgDepartmentVO(String id, String name, Short status, String fullDeptNamePath, int treelevel) {
+        this.id = id;
+        this.name = name;
+        this.status = status;
+        this.fullDeptNamePath = fullDeptNamePath;
+        this.treelevel = treelevel;
+    }
+
+    public String getFullDeptNamePath() {
+        return fullDeptNamePath;
+    }
+
+    public void setFullDeptNamePath(String fullDeptNamePath) {
+        this.fullDeptNamePath = fullDeptNamePath;
+    }
 
     public String getCode() {
         return code;
@@ -133,13 +160,13 @@
         return statusText;
     }
 
-    public String getUniqueId() {
+    /*public String getUniqueId() {
         return uniqueId;
-    }
+    }*/
 
-    public void setUniqueId(String uniqueId) {
+    /*public void setUniqueId(String uniqueId) {
         this.uniqueId = uniqueId;
-    }
+    }*/
 
     @Override
     public String getId() {
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/OsAttributeVO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/OsAttributeVO.java
index fcaacaa..1cad6e4 100644
--- a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/OsAttributeVO.java
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/OsAttributeVO.java
@@ -64,7 +64,6 @@
      */
     private String enumName;
 
-
     /**
      * 鍙傜収鐨勪笟鍔$被鍨嬬紪鍙�
      */
@@ -74,6 +73,16 @@
      * 鍙傜収鐨勪笟鍔$被鍨嬪悕绉�
      */
     private String btmTypeName;
+
+    /**
+     * 鍙傜収鐨勯摼鎺ョ被鍨嬪悕绉�
+     */
+    private String linkTypeName;
+
+    /**
+     * 閫夋嫨浜嗛摼鎺ョ被鍨嬫椂閫夋嫨鐨勭増鏈�
+     */
+    private Integer version;
 
     /**
      * 灞炴�х殑闀垮害
@@ -96,7 +105,12 @@
     private String range;
 
     /**
-     * 涓氬姟绫诲瀷鍚嶇О,鏄�艰繖鏉℃暟鎹殑涓氬姟绫诲瀷锛屼笉鏄睘鎬ф墍灞炵殑涓氬姟绫诲瀷
+     * 瀛楁涓哄弬鐓ф椂鍙傜収鐨勭浉鍏冲睘鎬�
+     */
+    private String other;
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О,鏄�艰繖鏉℃暟鎹殑涓氬姟绫诲瀷锛屼笉鏄睘鎬ф墍灞炵殑涓氬姟绫诲瀷锛屽簲璇ユ槸涓氬姟绫诲瀷涓哄睘鎬ф睜
      */
     private String btmname;
 
@@ -129,6 +143,14 @@
      * 鏃堕棿鎴筹紝鏍煎紡鏄痽yyy-MM-dd HH:mm:ss.SSS
      */
     private Date ts;
+
+    public String getOther() {
+        return other;
+    }
+
+    public void setOther(String other) {
+        this.other = other;
+    }
 
     public String getOid() {
         return oid;
@@ -226,6 +248,22 @@
         this.btmTypeName = btmTypeName;
     }
 
+    public String getLinkTypeName() {
+        return linkTypeName;
+    }
+
+    public void setLinkTypeName(String linkTypeName) {
+        this.linkTypeName = linkTypeName;
+    }
+
+    public Integer getVersion() {
+        return version;
+    }
+
+    public void setVersion(Integer version) {
+        this.version = version;
+    }
+
     public Integer getAttrLength() {
         return attrLength;
     }
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OrgDeptPO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OrgDeptPO.java
index 7d16413..27c5001 100644
--- a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OrgDeptPO.java
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OrgDeptPO.java
@@ -28,12 +28,6 @@
     private String rowIndex;
 
     /**
-     * 涓婚敭
-     */
-    @ExcelColumn(value="ID")
-    private String id;
-
-    /**
      * 閮ㄩ棬鍚嶇О
      */
     @ExcelColumn(value="鍚嶇О",nullable = false)
@@ -60,8 +54,8 @@
     /**
      * 鐖秈d
      */
-    @ExcelColumn(value="鐖禝D锛堥儴闂ㄥ敮涓�鏍囪瘑ID锛�")
-    private String parentId;
+    @ExcelColumn(value="鐖堕儴闂ㄥ悕绉板叏璺緞锛�/闂撮殧锛�")
+    private String parentFullNamePath;
 
     /**
      * 鎻忚堪
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OsAttributePO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OsAttributePO.java
new file mode 100644
index 0000000..71aa533
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OsAttributePO.java
@@ -0,0 +1,118 @@
+package com.vci.po;
+
+import com.vci.dto.OsEnumItemDTO;
+import com.vci.starter.poi.annotation.ExcelColumn;
+import com.vci.starter.web.pagemodel.BaseModelVO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 灞炴�ф睜瀵煎叆瀵硅薄
+ * @author ludc
+ * @date 2024/7/19 11:11
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class OsAttributePO extends BaseModelVO {
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = -2239512786206928201L;
+
+    /**
+     * 鎵�鍦ㄦ暟鎹
+     */
+    @ExcelColumn(rowIndexColumn = true,value = "")
+    private String rowIndex;
+
+    /**
+     * 灞炴�ц嫳鏂囧悕绉�
+     */
+    @ExcelColumn(value="灞炴�у悕",nullable = false)
+    private String id;
+
+    /**
+     * 鏍囩
+     */
+    @ExcelColumn(value="鏍囩")
+    private String name;
+
+    /**
+     * 鎻忚堪
+     */
+    @ExcelColumn(value="鎻忚堪")
+    private String description;
+
+    /**
+     * 灞炴�х被鍨�
+     */
+    @ExcelColumn(value="灞炴�х被鍨�",nullable = false)
+    private String attributeDataType;
+
+    /**
+     * 鍏佽涓虹┖
+     */
+    @ExcelColumn(value="鍏佽涓虹┖(鏄�/鍚�)")
+    private String nullableFlag;
+
+    /**
+     * 榛樿鍊�
+     */
+    @ExcelColumn(value="榛樿鍊�")
+    private String defaultValue;
+
+    /**
+     * 鏋氫妇鍚�
+     */
+    @ExcelColumn(value="浣跨敤鐨勬灇涓捐嫳鏂囧悕绉�")
+    private String enumId;
+
+    /**
+     * 鍙傜収鐨勪笟鍔$被鍨嬬紪鍙�
+     */
+    @ExcelColumn(value="鍙傜収鐨勪笟鍔$被鍨嬬紪鍙�")
+    private String btmTypeId;
+
+    /**
+     * 鍙傜収鐨勯摼鎺ョ被鍨嬬紪鍙�
+     */
+    @ExcelColumn(value="鍙傜収鐨勯摼鎺ョ被鍨嬬紪鍙�")
+    private String linkTypeName;
+
+    /**
+     * 鐗堟湰
+     */
+    @ExcelColumn(value="鐗堟湰鐗堟")
+    private Integer version;
+
+    /**
+     * 灞炴�ч暱搴�
+     */
+    @ExcelColumn(value="灞炴�ч暱搴�")
+    private Integer attrLength;
+
+    /**
+     * 灏忔暟杩涘害浣嶆暟
+     */
+    @ExcelColumn(value="灏忔暟绮惧害浣嶆暟")
+    private Integer precisionLength;
+
+    /**
+     * 灞炴�ч暱搴�
+     */
+    @ExcelColumn(value="灏忔暟鍒诲害浣嶆暟")
+    private Integer scaleLength;
+
+    /**
+     * 灞炴�ч暱搴�
+     */
+    @ExcelColumn(value="鍙栧�艰寖鍥�")
+    private String range;
+
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OsEnumPO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OsEnumPO.java
new file mode 100644
index 0000000..4bab322
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/OsEnumPO.java
@@ -0,0 +1,81 @@
+package com.vci.po;
+
+import com.vci.dto.OsEnumItemDTO;
+import com.vci.starter.poi.annotation.ExcelColumn;
+import com.vci.starter.web.pagemodel.BaseModelVO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鏋氫妇瀵煎叆瀵硅薄
+ * @author ludc
+ * @date 2024/7/19 11:11
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class OsEnumPO extends BaseModelVO {
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = -2239512786206928201L;
+
+    /**
+     * 鎵�鍦ㄦ暟鎹
+     */
+    @ExcelColumn(rowIndexColumn = true,value = "")
+    private String rowIndex;
+
+    /**
+     * 灞炴�ц嫳鏂囧悕绉�
+     */
+    @ExcelColumn(value="鏋氫妇鍚嶇О",nullable = false)
+    private String id;
+
+    /**
+     * 鏍囩
+     */
+    @ExcelColumn(value="鏍囩")
+    private String name;
+
+    /**
+     * 杩斿洖绫诲瀷
+     */
+    @ExcelColumn(value="杩斿洖绫诲瀷",nullable = false)
+    private String enumValueDataType;
+
+    /**
+     * 闀垮害
+     */
+    @ExcelColumn(value="闀垮害",nullable = false)
+    private Integer length;
+
+    /**
+     * 鏋氫妇椤瑰悕
+     */
+    @ExcelColumn(value="鏋氫妇椤瑰悕绉�(褰撳墠鏋氫妇涓嬫湁鏋氫妇椤规椂蹇呭~)",nullable = false)
+    private String enumItemName;
+
+    /**
+     * 鏋氫妇鍊�
+     */
+    @ExcelColumn(value="鏋氫妇鍊�(褰撳墠鏋氫妇涓嬫湁鏋氫妇椤规椂蹇呭~)",nullable = false)
+    private String value;
+
+    /**
+     * 鎻忚堪
+     */
+    @ExcelColumn(value="鎻忚堪")
+    private String description;
+
+    /**
+     * 鐢ㄤ簬鏁寸悊鎴�1瀵瑰鍏崇郴鏃朵娇鐢紝涓嶉拡瀵瑰鍏ヤ娇鐢�
+     */
+    private List<OsEnumItemDTO> items = new ArrayList<>();
+
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/SmUserPO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/SmUserPO.java
index 192eda0..7376c81 100644
--- a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/SmUserPO.java
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/SmUserPO.java
@@ -7,7 +7,7 @@
 import lombok.NoArgsConstructor;
 
 /**
- * 鐢ㄦ埛鐨勫鍏ュ鍑哄璞�
+ * 鐢ㄦ埛鐨勫鍏ュ璞�
  * @author ludc
  * @date 2024/7/1 16:53
  */
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 6d17c4f..1b3525c 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
@@ -57,7 +57,7 @@
      * @param e
      * @return
      */
-    public static String getExceptionMessage(Exception e){
+    public static String getExceptionMessage(Throwable e){
         String exceptionStr = VciExceptionTool.getExceptionStr(e);
         if(exceptionStr.contains("VciBaseException")){
             return e.getMessage();
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/wrapper/VciQueryWrapperForDO.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/wrapper/VciQueryWrapperForDO.java
index 2d2ce8e..5f8f765 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/wrapper/VciQueryWrapperForDO.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/wrapper/VciQueryWrapperForDO.java
@@ -54,7 +54,6 @@
      */
     public static final String USER_TABLE_COMPATIBILITY_FIELD_SEP = "${vcicomplibitysep}";
 
-
     /**
      * 鏌ヨ鏉′欢
      */
@@ -111,7 +110,7 @@
     private PageHelper pageHelper;
 
     /**
-     * 鎵�鏈夌殑瀛楁鍚嶇О,key鏄璞″睘鎬т腑鐨勫瓧娈碉紝value鏄暟鎹簱閲岀殑瀛楁
+     * 鎵�鏈夌殑瀛楁鍚嶇О,key鏄暟鎹簱閲岀殑瀛楁锛寁alue鏄璞″睘鎬т腑鐨勫瓧娈�
      */
     private Map<String,String> allFieldNameMap;
 
@@ -1428,9 +1427,10 @@
     public Map<String,String> switchConditionMap(){
         Map<String,String> queryMap = new HashMap<>();
         if(!CollectionUtils.isEmpty(this.conditionMap)){
-            this.conditionMap.forEach((key,value)->{
+            //TODO: 杞崲鍓嶇殑瀛楁鍜岃浆鎹㈠悗鐨勫瓧娈典笉搴旇鍚屾椂瀛樺湪锛屽簲璇ラ兘缁熶竴浣跨敤杞崲鍚庣殑瀛楁鍋氭煡璇㈡潯浠�
+            /*this.conditionMap.forEach((key,value)->{
                 queryMap.put(key,value);
-            });
+            });*/
             //鎴戜滑杞崲涓�涓嬶紝鐩存帴set锛屽鏋滆繕鏈夐噸澶嶇殑灏卞彧鑳借嚜琛岃В鍐�
             this.allFieldNameMap.forEach((dbField,field)->{
                 if(conditionMap.containsKey(field)){
@@ -1452,7 +1452,6 @@
     public void setLinkTableSql(String linkTableSql) {
         this.linkTableSql = linkTableSql;
     }
-
 
 
     /**
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/OrgDeptQueryServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/OrgDeptQueryServiceI.java
index ae07c6b..e09c8d2 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/OrgDeptQueryServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/OrgDeptQueryServiceI.java
@@ -27,13 +27,20 @@
     OrgDepartmentVO getDeptByDeptOid(String deptOid) throws VciBaseException;
 
     /**
-     * 鏍规嵁鐖堕儴闂ㄤ富閿幏鍙栧拰閮ㄩ棬鍚嶇О閮ㄩ棬鐨勪俊鎭�
+     * 鏍规嵁鐖堕儴闂ㄤ富閿幏鍙栧拰閮ㄩ棬鍚嶇О閮ㄩ棬鐨勪俊鎭紙涓昏鐢ㄤ簬鏂板鍜屼慨鏀规煡閲嶏級
      * @param parentDeptOid 鐖堕儴闂ㄤ富閿�
      * @param conditionMap 鏌ヨ鏉′欢
      * @return 閮ㄩ棬鐨勬樉绀哄璞★紝濡傛灉閮ㄩ棬涓嶅瓨鍦ㄥ垯杩斿洖null锛屼笉浼氭姏鍑哄紓甯�
      * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮暟鎹簱瀛樺湪闂鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
-    List<OrgDepartmentVO> getDeptByDeptPOidAndCondition(String parentDeptOid,Map<String,String> conditionMap) throws VciBaseException;
+    List<OrgDepartmentVO> getDeptByDeptpOidAndCondition(String parentDeptOid,Map<String,String> conditionMap) throws VciBaseException;
+
+    /**
+     * 鏍规嵁鐖堕儴闂ㄥ悕绉拌矾寰勮幏鍙栧拰閮ㄩ棬鍚嶇О閮ㄩ棬鐨勪俊鎭紙涓昏鐢ㄤ簬瀵煎叆鏃舵牴鎹儴闂ㄥ懡浠ゅ叏璺緞鍜屽悕绉版垨缂栧彿鏌ラ噸锛�
+     * @return 閮ㄩ棬鐨勬樉绀哄璞★紝濡傛灉閮ㄩ棬涓嶅瓨鍦ㄥ垯杩斿洖null锛屼笉浼氭姏鍑哄紓甯�
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮暟鎹簱瀛樺湪闂鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<OrgDepartmentVO> getDeptAllFullName() throws VciBaseException;
 
     /**
      * 鎵归噺鑾峰彇閮ㄩ棬鐨勪俊鎭� 锛堟牴鎹儴闂ㄤ富閿級
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/OrgDeptQueryServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/OrgDeptQueryServiceImpl.java
index edaa600..bbffffa 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/OrgDeptQueryServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/OrgDeptQueryServiceImpl.java
@@ -70,7 +70,7 @@
 	/**
 	 * 蹇呭~鍒�
 	 */
-	private ArrayList<Integer> ColumnNameisRed = new ArrayList<Integer>();
+	private List<Integer> ColumnNameisRed = new ArrayList<Integer>();
 
 	/**
 	 * 鏃ュ織
@@ -99,14 +99,14 @@
 	}
 
 	/**
-	 * 鏍规嵁鐖堕儴闂ㄤ富閿幏鍙栧拰閮ㄩ棬鍚嶇О閮ㄩ棬鐨勪俊鎭�
+	 * 鏍规嵁鐖堕儴闂ㄤ富閿幏鍙栭儴闂ㄥ悕绉伴儴闂ㄧ殑淇℃伅
 	 * @param parentDeptOid 鐖堕儴闂ㄤ富閿�
 	 * @param conditionMap 閮ㄩ棬鍚嶇О
 	 * @return 閮ㄩ棬鐨勬樉绀哄璞★紝濡傛灉閮ㄩ棬涓嶅瓨鍦ㄥ垯杩斿洖null锛屼笉浼氭姏鍑哄紓甯�
 	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮暟鎹簱瀛樺湪闂鐨勬椂鍊欎細鎶涘嚭寮傚父
 	 */
 	@Override
-	public List<OrgDepartmentVO> getDeptByDeptPOidAndCondition(String parentDeptOid,Map<String,String> conditionMap) throws VciBaseException {
+	public List<OrgDepartmentVO> getDeptByDeptpOidAndCondition(String parentDeptOid,Map<String,String> conditionMap) throws VciBaseException {
 		if(Func.isEmpty(conditionMap)){
 			conditionMap = new HashMap();
 		}
@@ -122,6 +122,42 @@
 			return null;
 		}
 		return deptDO2VOs(roleForPlatform1s);
+	}
+
+	/**
+	 * 鏍规嵁鐖堕儴闂ㄥ悕绉拌矾寰勮幏鍙栧拰閮ㄩ棬鍚嶇О閮ㄩ棬鐨勪俊鎭紙涓昏鐢ㄤ簬瀵煎叆鏃舵牴鎹儴闂ㄥ懡浠ゅ叏璺緞鍜屽悕绉版垨缂栧彿鏌ラ噸锛�
+	 * @return 閮ㄩ棬鐨勬樉绀哄璞★紝濡傛灉閮ㄩ棬涓嶅瓨鍦ㄥ垯杩斿洖null锛屼笉浼氭姏鍑哄紓甯�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮暟鎹簱瀛樺湪闂鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<OrgDepartmentVO> getDeptAllFullName() throws VciBaseException {
+		//鏌ヨ閮ㄩ棬淇℃伅锛屼富瑕佹煡璇㈤儴闂ㄥ悕绉扮粍鎴愬叏璺緞
+		String sql = "SELECT  PLUID, PLNAME, PLNUM, PLSTATUS, level, substr(sys_connect_by_path(PLNAME, '/'), 2) AS FULL_NAME_PATH " +
+				"FROM PLDEPT " +
+				"START WITH PLPARENTUID IS NULL " +
+				"CONNECT BY PRIOR PLUID = PLPARENTUID";
+		List<BusinessObject> cbos = boService.queryByOnlySql(sql);
+		List<OrgDepartmentVO> departmentVOList = new ArrayList<>();
+		if(!CollectionUtils.isEmpty(cbos)){
+			cbos.stream().forEach(cbo->{
+				//閮ㄩ棬涓婚敭
+				String deptOid = ObjectTool.getNewBOAttributeValue(cbo,"PLUID");
+				//閮ㄩ棬鍚嶇О
+				String deptName = ObjectTool.getNewBOAttributeValue(cbo, "PLNAME");
+				//閮ㄩ棬缂栧彿
+				String deptNum = ObjectTool.getNewBOAttributeValue(cbo, "PLNUM");
+				//閮ㄩ棬灞傜骇
+				String deptLevel = ObjectTool.getNewBOAttributeValue(cbo, "level");
+				//閮ㄩ棬鍚嶇О鍏ㄨ矾寰�
+				String fullDeptNamePath = ObjectTool.getNewBOAttributeValue(cbo, "FULL_NAME_PATH");
+				//閮ㄩ棬鐘舵��
+				String deptStatus = ObjectTool.getNewBOAttributeValue(cbo, "PLSTATUS");
+				OrgDepartmentVO orgDepartmentVO = new OrgDepartmentVO(deptNum,deptName,Short.valueOf(deptStatus),fullDeptNamePath,Integer.valueOf(deptLevel));
+				orgDepartmentVO.setOid(deptOid);
+				departmentVOList.add(orgDepartmentVO);
+			});
+		}
+		return departmentVOList;
 	}
 
 	/**
@@ -147,7 +183,7 @@
 		if(deptForPlatform1!=null){
 			departmentVO.setOid(deptForPlatform1.getPluid());
 			// 闄ら儴闂ㄤ富閿鐨勫敮涓�鏍囪瘑锛岄暱搴︿负Dept:+8浣嶅彲閫氳繃璇ュ弬鏁板弽鎺ㄥ洖閮ㄩ棬涓婚敭鐨刪ash缂栫爜
-			departmentVO.setUniqueId("Dept:"+Func.oidEnHash(deptForPlatform1.getPluid()));
+			//departmentVO.setUniqueId("Dept:"+Func.oidEnHash(deptForPlatform1.getPluid()));
 			departmentVO.setId(deptForPlatform1.getPlnum());
 			departmentVO.setName(deptForPlatform1.getPlname());
 			departmentVO.setStatus(deptForPlatform1.getPlstatus());
@@ -552,7 +588,7 @@
 	}
 
 	/**
-	 * 淇濆瓨閮ㄩ棬瑙掕壊鍏宠仈淇℃伅锛屽甫鏌ラ噸鍔熻兘
+	 * 淇濆瓨閮ㄩ棬鐢ㄦ埛鍏宠仈淇℃伅锛屽甫鏌ラ噸鍔熻兘
 	 * @param userOIds 鐢ㄦ埛id
 	 * @param deptId 閮ㄩ棬id
 	 * @return
@@ -602,7 +638,7 @@
 		if(Func.isNotBlank(orgDepartmentDTO.getId())){
 			conditionMap.put("plnum",QueryOptionConstant.OR + orgDepartmentDTO.getId());
 		}
-		List<OrgDepartmentVO> departmentVOS = getDeptByDeptPOidAndCondition(orgDepartmentDTO.getPkFatherDepartment(), conditionMap);
+		List<OrgDepartmentVO> departmentVOS = getDeptByDeptpOidAndCondition(orgDepartmentDTO.getPkFatherDepartment(), conditionMap);
 		if(Func.isNotEmpty(departmentVOS)){
 			throw new VciBaseException("鍚屼竴鐖惰妭鐐逛笅璇ラ儴闂ㄥ悕绉版垨缂栧彿宸茬粡瀛樺湪,璇蜂慨鏀�!");
 		}
@@ -647,7 +683,7 @@
 		if(Func.isNotBlank(orgDepartmentDTO.getId())){
 			conditionMap.put("plnum",QueryOptionConstant.OR + orgDepartmentDTO.getId());
 		}
-		List<OrgDepartmentVO> repeatDepartmentVOS = getDeptByDeptPOidAndCondition(orgDepartmentDTO.getPkFatherDepartment(), conditionMap);
+		List<OrgDepartmentVO> repeatDepartmentVOS = getDeptByDeptpOidAndCondition(orgDepartmentDTO.getPkFatherDepartment(), conditionMap);
 		repeatDepartmentVOS = repeatDepartmentVOS.stream().filter(item -> {
 			if((item.getName().equals(orgDepartmentDTO.getName()) || item.getId().equals(orgDepartmentDTO.getId())) &&
 					!item.getOid().equals(orgDepartmentDTO.getOid())){
@@ -703,22 +739,12 @@
 	@Override
 	public boolean deleteDept(String[] ids) throws PLException {
 		VciBaseUtil.alertNotNull(ids,"瑕佸垹闄ょ殑閮ㄩ棬涓婚敭");
-		//TODO: 搴旇鏄笉鍏峰杩炲甫鍒犻櫎鐨勫姛鑳斤紝绛栫暐鍒犻櫎鍚庣敤鎴峰叧鑱旂殑鏃犵敤閮ㄩ棬杩樺湪,鑰冭檻鍚庢湡鏄惁闇�瑕佸仛锛屾暟鎹噺涓嶅ぇ鍙互涓嶅仛杩炲甫鍒犻櫎
+		//TODO:鑰冭檻鏄惁闇�瑕佹坊鍔犲垹闄ゅ墠鍒ゆ柇閮ㄩ棬涓嬫槸鍚﹂厤缃湁鐢ㄦ埛锛岃繖绉嶆儏鍐靛簲璇ヤ笉鍏佽鍒犻櫎
+		//TODO: 搴旇鏄笉鍏峰杩炲甫鍒犻櫎鐨勫姛鑳斤紝閮ㄩ棬鍒犻櫎鍚庣敤鎴峰叧鑱旂殑鏃犵敤閮ㄩ棬杩樺湪,鑰冭檻鍚庢湡鏄惁闇�瑕佸仛锛屾暟鎹噺涓嶅ぇ鍙互涓嶅仛杩炲甫鍒犻櫎
 		return platformClientUtil.getFrameworkService().deleteDepartment(
 				ids,
-				new UserEntityInfo("developer"/*WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId()*/, null)
+				new UserEntityInfo(WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(), null)
 		);
-	}
-
-	/**
-	 * 鑾峰彇鎵�鏈夐儴闂ㄧ殑淇℃伅
-	 * @return key锛氶儴闂ㄧ敱鍚嶇О缁勬垚鐨勮矾寰勶紙/闂撮殧锛夛紝value瀵瑰簲鏈�灏忓眰绾х殑閮ㄩ棬淇℃伅
-	 */
-	@Override
-	public Map<String, OrgDepartmentVO> getDeptAllTreeMap() {
-		List<OrgDepartmentVO> orgDepartmentVOList = listAllLevelChildrenDeptByParentOid(null, null);
-		Map<String, OrgDepartmentVO> stringOrgDepartmentVOMap = convertToMap(orgDepartmentVOList);
-		return stringOrgDepartmentVOMap;
 	}
 
 	/**
@@ -731,10 +757,10 @@
 		//鐣岄潰娌′紶鍚嶇О锛屼娇鐢ㄩ粯璁ゅ悕绉�
 		downloadFileName = Func.isBlank(downloadFileName) ?  "閮ㄩ棬瀵煎叆妯℃澘_" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss"):downloadFileName;
 		// 璁剧疆琛ㄥ崟鍒楀悕
-		List<String> columns = new ArrayList<>(Arrays.asList("ID", "鍚嶇О", "缂栧彿", "浠e彿", "涓撲笟", "鐖禝D锛堥儴闂ㄥ敮涓�鏍囪瘑ID锛�", "鎻忚堪"));
+		List<String> columns = new ArrayList<>(Arrays.asList("鍚嶇О", "缂栧彿", "浠e彿", "涓撲笟", "鐖堕儴闂ㄥ悕绉板叏璺緞锛�/闂撮殧锛�", "鎻忚堪"));
 		//璁剧疆蹇呭~鍒�
 		ColumnNameisRed.clear();
-		//ColumnNameisRed.add(0);
+		ColumnNameisRed.add(0);
 		ColumnNameisRed.add(1);
 		//鍐檈xcel
 		String excelPath = LocalFileUtil.getDefaultTempFolder() + File.separator + downloadFileName +  ".xls";
@@ -784,53 +810,56 @@
 			if(CollectionUtils.isEmpty(poList)){
 				return BaseResult.fail(ExcelLangCodeConstant.IMPORT_CONTENT_NULL,new String[]{});
 			}
-			/*閮ㄩ棬瀵煎叆鍑犱釜姣旇緝閲嶈鐨勬儏鏅細
-				1銆佸綋鍓嶅鍏ョ殑鏁版嵁鏄竴涓儴闂ㄦ爲缁撴瀯(瑕佸垽鏂敤鎴锋墜杈撶殑ID鏄惁瀛樺湪閲嶅锛岃緭浜嗗氨瑕佸垽鏂槸鍚﹀湪褰撳墠琛ㄦ牸涓噸澶嶏紝
-					骞朵笖淇濆瓨鏃朵笉鑳戒娇鐢ㄧ敤鎴锋墜杈撶殑ID锛岃鏍规嵁鎵嬭緭ID鍜屽疄闄呭瓨鍌∣ID鍋氬搴旀槧灏勶紝
-					骞朵笖涓嶇牬鍧忚〃鏍间腑閮ㄩ棬鏍戠粨鏋勶紝濡傛灉娌℃墜杈揑D灏卞彧闇�瑕佸叧娉╬arentId杩欎釜灞炴�э紝
-					骞朵笖闇�瑕佹敞鎰忓鏋滄湁鐨処D鏈夛紝鏈夌殑娌℃湁閭e氨闇�瑕佹敞鎰忥紝鏃㈠瓨鍦ㄥ拰绯荤粺涓紝
-					鍏宠仈鐨勯儴闂ㄦ爲锛屽張瀛樺湪鍜屽綋鍓嶈〃鏍间腑鍏宠仈鐨勯儴闂ㄦ爲)銆�
-				2銆佸綋鍓嶅鍏ョ殑鏁版嵁鐖秈d鍏宠仈浜嗗凡瀛樺湪鐨勯儴闂╫id(瑕佹煡璇㈢埗id杩欎釜閮ㄩ棬鏄惁瀛樺湪锛�)
-			瑙e喅鎬濊矾锛氭渶濂芥槸灏嗚〃鏍间腑鍙兘鏄儴闂ㄦ爲鐨勭粰閬嶅巻鎴愭爲锛岀劧鍚庡啀鍋氭煡閲嶅暐鐨勫鐞�
-			*/
+
 			//2銆佸繀濉垽绌恒�佸垽閲嶏紙鏁版嵁搴撳垽閲嶅拰excel涓垽閲嶏級锛岀粍瑁呮垚淇濆瓨鐢ㄧ殑鏁版嵁瀵硅薄
 			List<DeptInfo> deptInfoList = new ArrayList<>();
-			//2.1銆佺敤浠ュ瓨鍌╡xcel涓噸澶嶇殑鏁版嵁锛屼笁涓笉鍙噸澶嶇殑瀛楁锛夛紙Name涓嶈兘涓虹┖锛孨ame銆丆ode鍚屼竴鐖堕儴闂ㄤ笅鍞竴锛�
-			List<String> repeatIdList = new ArrayList<>();
+			//2.1銆佺敤浠ュ瓨鍌╡xcel涓噸澶嶇殑鏁版嵁锛屼袱涓笉鍙噸澶嶇殑瀛楁锛夛紙Name涓嶈兘涓虹┖锛孨ame銆丆ode鍚屼竴鐖堕儴闂ㄤ笅鍞竴锛�
 			Map<String,String> repeatNameMap = new HashMap<>();
 			Map<String,String> repeatNumMap = new HashMap<>();
 			Map<String,String> indexMap = new HashMap<>();
 			//2.2銆佸瓨鍌ㄧ敤鎴锋墜杈撶殑oid鍜屽疄闄呭瓨鍌╫id鐨勬槧灏勫叧绯�
 			Map<String, String> oidMap = new HashMap<>();
+			//鏌ヨ绯荤粺涓儴闂紝鍏朵腑鍖呭惈浜嗛儴闂ㄥ悕绉版爲灞炴��
+			List<OrgDepartmentVO> dbOrgDepartmentVOList = this.getDeptAllFullName();
+			//閬嶅巻鎴恗ap瀵硅薄锛歬ey涓篋eptName鐨勫叏璺緞锛歷alue涓篋ept瀵硅薄(鐢ㄦ埛澶勭悊閮ㄩ棬鐖剁粍浠�)
+			Map<String, String> dbOrgDepartFullNameOidMap = dbOrgDepartmentVOList.stream().collect(Collectors.toMap(OrgDepartmentVO::getFullDeptNamePath, OrgDepartmentVO::getOid));
+			//鐢ㄦ潵鍒ゆ柇澶刾arentName鏃笉鍦ㄥ簱涓瓨鍦紝鍙堜笉鍦╬oNames瀛樺湪鐨勬儏鍐�
+			List<String> poNames = poList.stream().map(OrgDeptPO::getName).collect(Collectors.toList());
 			poList.stream().forEach(po->{
-				String parentId = Func.isBlank(po.getParentId()) ? "":po.getParentId();
+				String parentFullNamePath = Func.isBlank(po.getParentFullNamePath()) ? "":po.getParentFullNamePath();
 				//閮ㄩ棬鍚嶇О鍒ょ┖锛岄�氬父閫氳繃po涓殑娉ㄨВ灏卞彲瀹炵幇
-				if(Func.isEmpty(po.getName())){
+				if(Func.isBlank(po.getName())){
 					throw new VciBaseException("绗��"+po.getRowIndex()+"銆戣锛宒epterror,Reason:Name cannot be empty");
-				}else if(parentId.equals(repeatNameMap.getOrDefault(po.getName(), null))/*excel涓悓涓�閮ㄩ棬涓婲ame鐩哥瓑*/){
+				}else if(parentFullNamePath.equals(repeatNameMap.getOrDefault(po.getName(), null))/*excel涓悓涓�閮ㄩ棬涓婲ame鐩哥瓑*/){
 					//鍚屼竴閮ㄩ棬涓嬪悕绉板垽閲�
 					throw new VciBaseException("绗��"+po.getRowIndex()+"銆戣锛宒eptnameerror,Reason: Names under the same department cannot be duplicated");
-				}else if(Func.isNotEmpty(po.getId()) && repeatIdList.equals(po.getId())){
-					throw new VciBaseException("绗��"+po.getRowIndex()+"銆戣锛宒eptiderror,Reason: The primary key cannot be duplicated");
-				}else if(Func.isNotEmpty(po.getNum()) && parentId.equals(repeatNumMap.getOrDefault(po.getNum(),null))/*excel涓悓涓�閮ㄩ棬涓嬬紪鍙峰瓨鍦� */){
+				}else if(Func.isNotBlank(po.getNum()) && parentFullNamePath.equals(repeatNumMap.getOrDefault(po.getNum(),null))/*excel涓悓涓�閮ㄩ棬涓嬬紪鍙峰瓨鍦� */){
 					throw new VciBaseException("绗��"+po.getRowIndex()+"銆戣锛宒eptnumerror,Reason: The number cannot be duplicated");
 				}else{
-					//2.2銆佹煡璇㈡暟鎹簱涓殑鏁版嵁锛堟煡閲岻D鍜孨UM锛夛紝姣旇緝楹荤儲闇�瑕佹牴鎹甈arentID鏌ヨ锛堟墍鏈夊彧鑳藉崟鏉℃煡璇㈣繘琛屽垽閲嶏級
-					//缁勮鏌ラ噸鏉′欢:鍚屼竴閮ㄩ棬涓�(parentId鐩哥瓑)锛宯ame鎴栬�卬um鐩哥瓑
-					HashMap<String, String> conditionMap = new HashMap<>();
-					conditionMap.put("plname",QueryOptionConstant.OR + po.getName());
-					conditionMap.put("plnum",QueryOptionConstant.OR + po.getNum());
-					String pId = Func.isBlank(po.getParentId()) ? null:po.getParentId();
-					List<OrgDepartmentVO> repeatOrgDept = this.getDeptByDeptPOidAndCondition(pId, conditionMap);
+					//2.2銆佹煡璇㈡暟鎹簱涓殑鏁版嵁锛堟煡閲岻D鍜孨UM锛夛紝姣旇緝楹荤儲闇�瑕佹牴鎹甈arentName鍏ㄨ矾寰勬煡璇紙鎵�鏈夊彧鑳藉崟鏉℃煡璇㈣繘琛屽垽閲嶏級
+					//鍚屼竴閮ㄩ棬涓�(parentName鐩哥瓑)锛宯ame鎴栬�卬um鐩哥瓑
+					List<OrgDepartmentVO> repeatOrgDept = dbOrgDepartmentVOList.stream().filter(item -> {
+						//鍚屼竴閮ㄩ棬鍚嶇О鍏ㄨ矾寰勪笅锛岄儴闂ㄥ悕绉扮浉绛夈�侀儴闂ㄧ紪鍙蜂笉涓虹┖骞朵笖鍜岀郴缁熶腑瀛樺湪鐩哥瓑鐨勭紪鍙�
+						boolean isNameOrNumRepeat = po.getName().equals(item.getName()) || (Func.isNotBlank(po.getNum()) && po.getNum().equals(item.getId()));
+						/*褰損arentFullNamePath涓�""鏃秈tem.getFullDeptNamePath().contains(parentFullNamePath)姘歌繙涓簍rue锛�
+						鎵�浠ラ渶瑕佺壒娈婂鐞嗙洿鎺ュ垽鏂《灞傜殑閮ㄩ棬鏄惁瀛樺湪閲嶅*/
+						if(((Func.isBlank(parentFullNamePath) && item.getTreelevel() == 1)
+							|| (Func.isNotBlank(parentFullNamePath) && item.getFullDeptNamePath().contains(parentFullNamePath)))
+							&& isNameOrNumRepeat) {
+							return true;
+						}
+						return false;
+					}).collect(Collectors.toList());
 					//鍙涓嶄负绌哄氨璇存槑褰撳墠琛屾暟鎹湪绯荤粺涓噸澶�
 					if(Func.isNotEmpty(repeatOrgDept)){
 						throw new VciBaseException("绗��"+po.getRowIndex()+"銆戣锛宒eptname or deptnum error,Reason: The name or number already exists in the system");
 					}
 				}
 				//瀛樺偍鏍¢獙閫氳繃鐨勬暟鎹紝浠ヤ究鍚庣画excel鏌ラ噸
-				repeatNameMap.put(po.getName(),Func.isBlank(po.getParentId()) ? "":po.getParentId());
-				repeatIdList.add(po.getId());
-				repeatNumMap.put(po.getNum(),po.getParentId());
+				repeatNameMap.put(po.getName(),parentFullNamePath);
+				if(Func.isNotBlank(po.getNum())){
+					repeatNumMap.put(po.getNum(),parentFullNamePath);
+				}
 				indexMap.put(po.getName(),po.getRowIndex());
 				//鏍¢獙鏁版嵁灏辫缁勮鎴怐TO鏁版嵁瀵硅薄浜�
 				OrgDepartmentDTO dto = new OrgDepartmentDTO();
@@ -839,48 +868,51 @@
 				dto.setId(po.getNum());
 				dto.setDescription(po.getDesc());
 				dto.setSpecialties(po.getSpecialties());
-				dto.setPkFatherDepartment(po.getParentId());
 				dto.setCreateTime(new Date());
 				dto.setCreator(loginUserId);
 				dto.setLastModifier(loginUserId);
 				dto.setStatus((short) 0);
-				//2.2銆佽繃绋嬩腑澶勭悊涓婚敭杞崲闂鏈�濂芥槸涓�鏉′竴鏉$殑澶勭悊ID鏄惁瀛樺湪杩樻湁ParentID鏄惁瀛樺湪鐨勯棶棰�
-				//鍏堝垽鏂槸宸插瓨鍦ㄧ殑閮ㄩ棬ID锛岃繕鏄笉瀛樺湪鐨勯儴闂↖D锛屽凡瀛樺湪绯荤粺涓殑ID灏辨槸涓篋ept:寮�澶寸殑
-				String pId = Func.isBlank(dto.getPkFatherDepartment()) ? "":dto.getPkFatherDepartment();
-				//鏄凡瀛樺湪绯荤粺涓殑閮ㄩ棬id
-				if(pId.contains("Dept:")){
-					//瑙f瀽鍑虹湡瀹炵殑oid
-					String deParentId = Func.oidDeHash(pId.replace("Dept:", "").trim());
-					//瑙f瀽鍑烘潵鐨刣eParentId蹇呴』寰楀湪搴撲腑瀛樺湪
-					if(Func.isBlank(deParentId) || Func.isEmpty(this.getDeptByDeptOid(deParentId))){
-						throw new VciBaseException("绗��"+ po.getRowIndex() +"銆戣锛宒eptparentiderror,Reason:Parent ID resolution error or does not exist in the system");
+				//缁欏鍏ョ殑鏁版嵁璁剧疆鐨勪富閿�
+				String oid = VciBaseUtil.getPk().toUpperCase(Locale.ROOT);
+				dto.setOid(oid);
+				/*澶勭悊閮ㄩ棬鍚嶇О鍏ㄨ矾寰勮浆鎹负PkFatherDepartment锛堥儴闂ㄤ富閿級锛�
+				  鎯呭喌1銆佺洿灞炵埗閮ㄩ棬鏄郴缁熶腑宸插瓨鍦紙鍒ゆ柇鏂瑰紡锛氶儴闂ㄥ悕绉板叏璺緞鍦╠bOrgDepartmentVOList涓瓨鍦紝fullDeptNamePath鍏ㄧ瓑浜巔arentFullNamePath锛夈��
+				  鎯呭喌2銆佺洿灞炵埗閮ㄩ棬涓嶆槸绯荤粺涓凡瀛樺湪鐨�,浣嗘槸鐩村睘鐖堕儴闂ㄧ殑鐨勪笂绾ч儴闂ㄦ槸绯荤粺涓凡瀛樺湪鐨�(娑夊強鍒皁id鍜宲arentoid瀵瑰簲鍏崇郴澶勭悊姣旇緝楹荤儲)銆�
+				  鎯呭喌3銆佺洿灞炵埗閮ㄩ棬鍜屽叾涓婄骇閮ㄩ棬閮芥槸excel涓柊鏋勫缓鐨勩��(娑夊強鍒皁id鍜宲arentoid瀵瑰簲鍏崇郴澶勭悊姣旇緝楹荤儲)*/
+				String dbDeptoid = dbOrgDepartFullNameOidMap.getOrDefault(parentFullNamePath, null);
+				//鎯呭喌1鍙互鐩存帴璁剧疆parentOid銆�
+				if(Func.isNotEmpty(dbDeptoid) || "".equals(parentFullNamePath)){
+					//璁剧疆鐖堕儴闂ㄤ富閿�
+					dto.setPkFatherDepartment(dbDeptoid);
+				}else{
+					//澶勭悊鐖惰矾寰勫悕鏃笉瀛樺湪浜庢暟鎹簱鍙堜笉瀛樺湪浜庡綋鍓峞xcel
+					String lastParentFullName = parentFullNamePath.substring(parentFullNamePath.lastIndexOf("/") + 1);//鐖惰矾寰勫悕鐨勬渶鍚庝竴涓儴闂ㄥ悕绉�
+					if(Func.isBlank(dbOrgDepartFullNameOidMap.getOrDefault(parentFullNamePath,null))
+						&& !poNames.contains(lastParentFullName)
+					){
+						throw new VciBaseException("褰撳墠瀵煎叆鐨勯儴闂ㄦ暟鎹腑锛岀銆�" + indexMap.get(po.getName()) + "銆戣锛岀埗閮ㄩ棬璁剧疆瀛樺湪闂锛�");
 					}
-					//鏇挎崲鎺変复鏃朵娇鐢ㄧ殑閮ㄩ棬鍞竴鏍囪瘑锛屼絾鏄负浜嗘柟渚垮悗缁垽鏂紝杩樻槸闇�瑕佸姞涓奃ept:鏍囪瘑
-					dto.setPkFatherDepartment("Dept:"+deParentId);
+					//鎯呭喌2鍜�3闇�瑕侀�氳繃鏄犲皠鍏崇郴璁剧疆parentoid锛屾墍浠ヨ繖閲屽厛鏍囪鍚庣画鍐嶅仛澶勭悊銆�
+					dto.setPkFatherDepartment("Pending:" + parentFullNamePath);
 				}
-				//鐢ㄦ埛鎵嬭緭浜嗛儴闂╫id锛屼絾鏄伩鍏峯id涓嶈鑼冮渶瑕侊紝鐢ㄨ鑼僶id杩涜鏇挎崲锛屽鏋滄病杈撳叆淇濆瓨鏃朵細鑷姩鐢熸垚oid
-				String excelOid = dto.getOid();
-				if(Func.isNotBlank(excelOid)){
-					String pkOid = VciBaseUtil.getPk().toUpperCase(Locale.ROOT);
-					dto.setOid(pkOid);
-					//oid鏄犲皠鍏崇郴锛屽悗缁敤鏉ユ洿鏂皃arentId
-					oidMap.put(excelOid,pkOid);
-				}
+				//瀛樺偍parentOid:oid鏄犲皠鍏崇郴
+				String key = Func.isBlank(parentFullNamePath) ? po.getName():parentFullNamePath + "/"+po.getName();
+				oidMap.put(key,oid);
+
 				DeptInfo deptInfo = this.changeOrgDeptDTOToDeptInfo(dto);
 				deptInfoList.add(deptInfo);
 			});
-			//3銆佸鐞唅d鍜宲arentId鐨勬槧灏勫叧绯�:灏嗙敤鎴锋墜杈撶殑鐖禝D杞崲鎴愬疄闄呭瓨鍌ㄧ殑ID骞朵繚瀛樿繘搴�
+			//3銆佸鐞唎id鍜宲arentOid鐨勬槧灏勫叧绯�:閽堝鏂板姞鐨勬暟鎹槸鐖堕儴闂�
 			deptInfoList.stream().forEach(info -> {
-				//3.1銆佸鏈�缁堝鐞嗗ソ鐨勯儴闂ㄦ暟鎹繚瀛�
 				try {
-					//parentId涓嶄负绌哄苟涓旀病鏈塂ept:鐩稿叧鐨勫瓧绗︿覆,璇存槑鏄敤鎴锋墜杈撶殑ParentId(瀵煎叆鐨勬暟鎹氨鏄竴涓爲缁撴瀯)
-					if (Func.isNotBlank(info.parentId) && !info.parentId.contains("Dept:")) {
-						//杞崲ParentId涓哄疄闄呰瀛樺偍鐨勯儴闂↖D
-						info.parentId = oidMap.get(info.parentId);
-					}else if(info.parentId.contains("Dept:")){
+					//parentId涓嶄负绌哄苟涓旀病鏈塒ending:鐩稿叧鐨勫瓧绗︿覆,璇存槑鏄渶瑕佸鐞唎id鏄犲皠parentOid鐨�
+					if (info.parentId.contains("Pending:")){
 						//绯荤粺涓凡瀛樺湪鐨勭埗閮ㄩ棬OID锛岄渶瑕佺Щ闄ゆ帀Dept:鏍囪瘑
-						info.parentId = info.parentId.replace("Dept:","");
+						String key = info.parentId.replace("Pending:","");
+						String parentId = oidMap.get(key);
+						info.parentId = parentId;
 					}
+					//4銆佷繚瀛樻搷浣�
 					platformClientUtil.getFrameworkService().saveDepartment(
 							info,
 							userEntityInfo
@@ -900,7 +932,23 @@
 		return BaseResult.success("閮ㄩ棬瀵煎叆鎴愬姛锛�");
 	}
 
-	public Map<String, OrgDepartmentVO> convertToMap(List<OrgDepartmentVO> orgDepartmentVOList) {
+	/**
+	 * 鑾峰彇鎵�鏈夐儴闂ㄧ殑淇℃伅
+	 * @return key锛氶儴闂ㄧ敱鍚嶇О缁勬垚鐨勮矾寰勶紙/闂撮殧锛夛紝value瀵瑰簲鏈�灏忓眰绾х殑閮ㄩ棬淇℃伅
+	 */
+	@Override
+	public Map<String, OrgDepartmentVO> getDeptAllTreeMap() {
+		List<OrgDepartmentVO> orgDepartmentVOList = listAllLevelChildrenDeptByParentOid(null, null);
+		Map<String, OrgDepartmentVO> stringOrgDepartmentVOMap = convertToMap(orgDepartmentVOList);
+		return stringOrgDepartmentVOMap;
+	}
+
+	/**
+	 * 鑾峰彇閮ㄩ棬鐢卞悕绉扮粍鎴愮殑璺緞锛�/闂撮殧锛夛紝value瀵瑰簲鏈�灏忓眰绾х殑閮ㄩ棬淇℃伅
+	 * @param orgDepartmentVOList
+	 * @return
+	 */
+	private Map<String, OrgDepartmentVO> convertToMap(List<OrgDepartmentVO> orgDepartmentVOList) {
 		Map<String, OrgDepartmentVO> map = new HashMap<>();
 		for (OrgDepartmentVO orgDepartmentVO : orgDepartmentVOList) {
 			String key = buildKey(orgDepartmentVO, orgDepartmentVOList);
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmRoleQueryServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmRoleQueryServiceImpl.java
index 2320280..1c44f0d 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmRoleQueryServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmRoleQueryServiceImpl.java
@@ -8,9 +8,11 @@
 import com.vci.frameworkcore.compatibility.SmRoleQueryServiceI;
 import com.vci.constant.FrameWorkBtmTypeConstant;
 import com.vci.dto.SmRoleDTO;
+import com.vci.frameworkcore.compatibility.SmUserQueryServiceI;
 import com.vci.frameworkcore.enumpck.RoleClassifyEnum;
 import com.vci.frameworkcore.enumpck.RoleControlAreaEnum;
 import com.vci.model.SmRoleForPlatform1;
+import com.vci.pagemodel.SmUserVO;
 import com.vci.po.SmRolePO;
 import com.vci.pagemodel.SmRoleVO;
 import com.vci.omd.utils.ObjectTool;
@@ -34,6 +36,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
@@ -56,6 +59,13 @@
 	 */
 	@Autowired
 	private WebBoServiceI boService;
+
+	/**
+	 * 鐢ㄦ埛鏌ヨ鏈嶅姟
+	 */
+	@Autowired
+	@Lazy
+	private SmUserQueryServiceI smUserQueryServiceI;
 
 	/**
 	 * 骞冲彴璋冪敤瀹㈡埛绔�
@@ -679,11 +689,31 @@
 	@Override
 	public boolean deleteRole(String[] ids) throws PLException {
 		VciBaseUtil.alertNotNull(ids,"瑕佸垹闄ょ殑瑙掕壊涓婚敭");
+		//浣跨敤涓婚敭鍒ゆ柇瑙掕壊鏄惁琚敤鎴峰紩鐢�
+		for (int i = 0; i < ids.length; i++) {
+			String roleName = this.checkIsUsed(ids[i]);
+			if(Func.isNotBlank(roleName)){
+				throw new PLException("500",new String[]{"褰撳墠閫変腑瑕佸垹闄ょ殑瑙掕壊涓瓨鍦ㄣ��"+roleName+"銆戣寮曠敤!"});
+			}
+		}
 		//鍏峰杩炲甫鍒犻櫎鐨勫姛鑳斤紝濡傝鑹茶彍鍗曟巿鏉冭〃閲岄潰鐨勬巿鏉冧俊鎭�
 		return platformClientUtil.getFrameworkService().deleteRole(
 				ids,
 				new UserEntityInfo(WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(), null)
 		);
+	}
+
+	/**
+	 * 妫�鏌ヨ鑹叉槸鍚︽湁鍦ㄥ紩鐢�
+	 * @param roleOid
+	 * @return
+	 */
+	private String checkIsUsed(String roleOid){
+		List<SmUserVO> smUserVOS = smUserQueryServiceI.listUserByRoleOid(roleOid, null);
+		if (Func.isNotEmpty(smUserVOS)) {
+			return this.getRoleNameByRoleOid(roleOid);
+		}
+		return null;
 	}
 
 	/**
@@ -733,8 +763,8 @@
 				try {
 					SmRoleDTO smRoleDTO = new SmRoleDTO();
 					BeanUtil.copy(smRolePO,smRoleDTO);
-					//SessionInfo loginUser = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
-					String userId = "developer";//loginUser.getUserId();
+					SessionInfo loginUser = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
+					String userId = loginUser.getUserId();
 					//瑙掕壊绫诲瀷锛岃繖閲岃缃簡浼氬湪changeRoleObjectToRoleInfo涓浆鎹�
 					if(UserTypeEnum.SUPPER_ADMIN.getValue().equals("0")){
 						smRoleDTO.setRoleClassify(RoleClassifyEnum.MANAGE.getValue());
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 e56db37..d08bcbb 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
@@ -16,7 +16,7 @@
 import com.vci.pagemodel.OrgDepartmentVO;
 import com.vci.pagemodel.SmPasswordStrategyVO;
 import com.vci.pagemodel.SmRoleVO;
-import com.vci.frameworkcore.properties.ConfigReader;
+import com.vci.frameworkcore.properties.ConfigCorbaReader;
 import com.vci.omd.utils.ObjectTool;
 import com.vci.starter.poi.bo.ReadExcelOption;
 import com.vci.starter.poi.bo.WriteExcelData;
@@ -1322,7 +1322,7 @@
 		// 璁剧疆琛ㄥ崟鍒楀悕
 		List<String> columns = new ArrayList<>(Arrays.asList("璐﹀彿", "瀵嗙爜", "濮撳悕", "鐢靛瓙閭", "涓撲笟", "鎻忚堪", "閮ㄩ棬(涓婁笅绾ч儴闂ㄤ箣闂翠互鍙嶆枩鏉犻殧寮�(/))"));
 		//鑾峰彇鏄惁瀵煎嚭瀵嗙骇閰嶇疆椤�
-		String flag = ConfigReader.getConfigValue("exportSecretGrade");
+		String flag = ConfigCorbaReader.getConfigValue("exportSecretGrade");
 		if (flag != null && flag.equalsIgnoreCase("true")) {
 			columns = new ArrayList<>(Arrays.asList("璐﹀彿", "瀵嗙爜", "濮撳悕", "鐢靛瓙閭", "涓撲笟", "鎻忚堪", "閮ㄩ棬(涓婁笅绾ч儴闂ㄤ箣闂翠互鍙嶆枩鏉犻殧寮�(/))" ,"瀵嗙骇"));
 		}
@@ -1374,7 +1374,7 @@
 			String loginUserId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
 			UserEntityInfo userEntityInfo = new UserEntityInfo(loginUserId,null);
 			//鏄惁瀵煎叆瀵嗙骇閰嶇疆
-			boolean exportSecretGrade = Boolean.parseBoolean(ConfigReader.getConfigValue("exportSecretGrade"));
+			boolean exportSecretGrade = Boolean.parseBoolean(ConfigCorbaReader.getConfigValue("exportSecretGrade"));
 			List<SmUserPO> poList = ExcelUtil.readDataObjectFromExcel(file, SmUserPO.class,excelOption,(value, po, fieldName)->{
 				Integer secretValue = UserSecretEnum.getSecretValueByText(po.getSecretGradeText());
 				//鏄惁蹇呴』瀵煎叆瀵嗙骇
@@ -1398,7 +1398,9 @@
 			//褰撳墠excel涓槸鍚﹂噸澶嶇敤鐨勫垽閲峂ap:锛坘ey锛氳处鍙凤紝value锛氳鍙凤級
 			Map<String, String> excelReapeat = new HashMap<>();
 			//鍏堣幏鍙栧叏閮ㄩ儴闂ㄥ悕绉扮殑鐖跺瓙瀵瑰簲鍏崇郴锛歬ey涓洪儴闂ㄥ瓙鐖剁骇鍚嶇О璺緞锛寁alue涓洪儴闂ㄤ俊鎭�
-			Map<String,OrgDepartmentVO> deptVOMap = orgDeptQueryService.getDeptAllTreeMap();
+			List<OrgDepartmentVO> orgDepartmentVOList = orgDeptQueryService.getDeptAllFullName();
+			Map<String, OrgDepartmentVO> deptVOMap = orgDepartmentVOList.stream().collect(Collectors.toMap(OrgDepartmentVO::getFullDeptNamePath, s->s));
+			//Map<String,OrgDepartmentVO> deptVOMap = orgDeptQueryService.getDeptAllTreeMap();
 			//鍒ゆ柇蹇呭~灞炴�ф槸鍚︿负绌猴紝鐢ㄦ埛鏄惁宸插瓨鍦紝浠ュ強閮ㄩ棬鏄惁濉敊绛夋牎楠岄�昏緫
 			List<String> finalRepeatUserId = repeatUserId;
 			poList.stream().forEach(smUserPO -> {
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/OrgDepartmentQueryController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/OrgDepartmentQueryController.java
index 05821b2..cbb2b54 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/OrgDepartmentQueryController.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/OrgDepartmentQueryController.java
@@ -4,6 +4,7 @@
 import com.vci.frameworkcore.compatibility.OrgDeptQueryServiceI;
 import com.vci.constant.FrameWorkLangCodeConstant;
 import com.vci.pagemodel.OrgDepartmentVO;
+import com.vci.starter.web.annotation.controller.VciUnCheckRight;
 import com.vci.starter.web.exception.VciBaseException;
 import com.vci.starter.web.pagemodel.*;
 import com.vci.starter.web.util.ControllerUtil;
@@ -177,6 +178,7 @@
      * @return
      */
     @RequestMapping(value = "/importDept",method = RequestMethod.POST)
+    @VciUnCheckRight
     public BaseResult importUser(MultipartFile file){
         String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + LocalFileUtil.getFileNameForIE(file.getOriginalFilename());
         File file1 = new File(excelFileName);
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmPwdStrategyQueryController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmPwdStrategyQueryController.java
index f0b45cc..df34042 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmPwdStrategyQueryController.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmPwdStrategyQueryController.java
@@ -46,7 +46,6 @@
      * @throws VciBaseException 鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父锛屽鏋滄槸鑰佺殑椤圭洰閲屼笉鎶涘嚭寮傚父
      */
     @RequestMapping(value = "/refDataGrid",method = RequestMethod.GET)
-    @VciUnCheckRight
     public BaseResult<SmPasswordStrategyVO> refDataGrid(BaseQueryObject queryObject) throws VciBaseException {
         try {
             DataGrid<SmPasswordStrategyVO> pwdStrategyVODataGrid = pwdStrategyQueryService.refDataGrid(queryObject.getConditionMap(),queryObject.getPageHelper());
@@ -66,7 +65,6 @@
      * @throws VciBaseException
      */
     @RequestMapping(value = "/selectPwdStrategyMap",method = RequestMethod.GET)
-    @VciUnCheckRight
     public BaseResult<List<Map<String,String>>> selectPwdStrategyMap(BaseQueryObject queryObject) throws VciBaseException {
         try {
             List<Map<String,String>> pwdStrategyVODataGrid = pwdStrategyQueryService.selectPwdStrategyMap(queryObject.getConditionMap());
@@ -140,7 +138,6 @@
      * @return
      */
     @RequestMapping(value = "/delPasswordStrateg",method = RequestMethod.DELETE)
-    @VciUnCheckRight
     public BaseResult delPasswordStrateg(String[] pwdIds){
         try {
             return pwdStrategyQueryService.delPasswordStrateg(pwdIds)
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/properties/ConfigReader.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/properties/ConfigCorbaReader.java
similarity index 80%
rename from Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/properties/ConfigReader.java
rename to Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/properties/ConfigCorbaReader.java
index f5c2186..ac08739 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/properties/ConfigReader.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/properties/ConfigCorbaReader.java
@@ -9,13 +9,13 @@
  * @author ludc
  * @date 2024/6/28 23:11
  */
-public class ConfigReader {
+public class ConfigCorbaReader {
 
     private static Properties properties;
 
     static {
         properties = new Properties();
-        try (InputStream input = ConfigReader.class.getClassLoader().getResourceAsStream("properties/corba.properties")) {
+        try (InputStream input = ConfigCorbaReader.class.getClassLoader().getResourceAsStream("properties/corba.properties")) {
             if (input == null) {
                 System.err.println("Unable to find corba.properties");
             } else {
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsAttributeController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsAttributeController.java
index 5a65bfe..f33a04a 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsAttributeController.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsAttributeController.java
@@ -1,13 +1,30 @@
 package com.vci.web.controller;
 
+import com.vci.constant.FrameWorkLangCodeConstant;
+import com.vci.dto.OsAttributeDTO;
+import com.vci.starter.web.annotation.controller.VciUnCheckRight;
+import com.vci.starter.web.annotation.log.VciBusinessLog;
+import com.vci.starter.web.exception.VciBaseException;
 import com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.BaseResult;
 import com.vci.pagemodel.OsAttributeVO;
+import com.vci.starter.web.util.ControllerUtil;
+import com.vci.starter.web.util.LocalFileUtil;
+import com.vci.starter.web.util.VciBaseUtil;
 import com.vci.web.service.OsAttributeServiceI;
+import com.vci.web.util.Func;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.util.Date;
+import java.util.List;
 
 /**
  * 灞炴�ф帶鍒跺櫒
@@ -25,12 +42,188 @@
     private OsAttributeServiceI attributeService;
 
     /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
      * 灞炴�у垪琛�
      * @param baseQueryObject 鏌ヨ瀵硅薄
      * @return 灞炴�х殑鏄剧ず瀵硅薄
      */
     @GetMapping("/gridAttribute")
-    public DataGrid<OsAttributeVO> gridAttribute(BaseQueryObject baseQueryObject){
-       return attributeService.gridAttribute(baseQueryObject);
+    @VciUnCheckRight
+    public BaseResult<OsAttributeVO> gridAttribute(BaseQueryObject baseQueryObject){
+        try {
+            return BaseResult.dataGrid(attributeService.gridAttribute(baseQueryObject));
+        }catch (Exception e) {
+            e.printStackTrace();
+            String exceptionMessage = "灞炴�х鐞嗗垪琛ㄦ煡璇㈡椂鍑虹幇閿欒锛屽師鍥狅細" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
     }
+
+    /**
+     * 鏍规嵁澶氫釜灞炴�у悕绉版煡璇㈠睘鎬�
+     * @param attrNames
+     * @return
+     */
+    @GetMapping("/getByAttributeNames")
+    @VciBusinessLog(operateName = "鏍规嵁澶氫釜灞炴�у悕绉版煡璇㈠睘鎬�")
+    public BaseResult getByAttributeNames(String[] attrNames){
+        try {
+            return BaseResult.dataList(attributeService.getByAttributeNames(attrNames));
+        }catch (Exception e) {
+            e.printStackTrace();
+            String exceptionMessage = "灞炴�у悕鏌ヨ灞炴�ф椂鍑虹幇閿欒锛屽師鍥狅細" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 娣诲姞鍗曟潯灞炴�у埌灞炴�ф睜
+     * @param osAttributeDTO
+     * @return 鍒楄〃鐨勫唴瀹�
+     */
+    @PostMapping( "/addAttribute")
+    @VciBusinessLog(operateName = "娣诲姞灞炴��")
+    public BaseResult addAttribute(@RequestBody OsAttributeDTO osAttributeDTO) {
+        try {
+            return attributeService.addAttribute(osAttributeDTO) ? BaseResult.success("灞炴�ф坊鍔犳垚鍔燂紒"):BaseResult.fail("灞炴�ф坊鍔犲け璐ワ紒");
+        }catch (Exception e) {
+            e.printStackTrace();
+            String exceptionMessage = "澧炲姞灞炴�ф椂鍑虹幇閿欒锛屽師鍥狅細" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 淇敼鍗曟潯灞炴��
+     * @param osAttributeDTO
+     * @return 鍒楄〃鐨勫唴瀹�
+     */
+    @PutMapping( "/updateAttribute")
+    @VciBusinessLog(operateName = "淇敼灞炴��")
+    @VciUnCheckRight
+    public BaseResult updateAttribute(@RequestBody OsAttributeDTO osAttributeDTO) {
+        try {
+            return attributeService.updateAttribute(osAttributeDTO) ? BaseResult.success("灞炴�т慨鏀规垚鍔燂紒"):BaseResult.fail("灞炴�т慨鏀瑰け璐ワ紒");
+        }catch (Exception e) {
+            e.printStackTrace();
+            String exceptionMessage = "淇敼灞炴�ф椂鍑虹幇閿欒锛屽師鍥狅細" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 鍒犻櫎灞炴��
+     * @param osAttributeDTOS
+     * @return 鍒楄〃鐨勫唴瀹�
+     */
+    @DeleteMapping( "/deleteAttributes")
+    @VciBusinessLog(operateName = "鍒犻櫎灞炴��")
+    public BaseResult deleteAttributes(@RequestBody List<OsAttributeDTO> osAttributeDTOS) {
+        try {
+            return attributeService.deleteAttributes(osAttributeDTOS) ? BaseResult.success("灞炴�у垹闄ゆ垚鍔燂紒"):BaseResult.fail("灞炴�у垹闄ゅけ璐ワ紒");
+        }catch (Exception e) {
+            e.printStackTrace();
+            String exceptionMessage = "鍒犻櫎灞炴�ф椂鍑虹幇閿欒锛屽師鍥狅細" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 鏌ョ湅灞炴�х殑浣跨敤鑼冨洿
+     * @param attributeName 灞炴�у悕绉�
+     * @return map瀵硅薄
+     */
+    @GetMapping( "/getUsedAttributeList")
+    @VciBusinessLog(operateName = "鏌ョ湅灞炴�х殑浣跨敤鑼冨洿")
+    public BaseResult getUsedAttributeList(String attributeName) {
+        try {
+            return BaseResult.dataList(attributeService.getUsedAttributeList(attributeName));
+        }catch (Exception e) {
+            e.printStackTrace();
+            String exceptionMessage = "鑾峰彇灞炴�х殑浣跨敤鑼冨洿鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 瀵煎嚭閫変腑鐨勫睘鎬�
+     * @param exportFileName 瀵煎嚭鐨勬枃浠跺悕
+     * @param attrNames 闇�瑕佸鍑虹殑灞炴�ц嫳鏂囧悕绉�
+     * @param response
+     */
+    @GetMapping( "/exportAttributes")
+    @VciBusinessLog(operateName = "瀵煎嚭灞炴��")
+    public void exportAttributes(String exportFileName,String attrNames, HttpServletResponse response){
+        try {
+            String excelPath = attributeService.exportAttributes(exportFileName,attrNames);
+            ControllerUtil.writeFileToResponse(response,excelPath);
+        } catch (Exception e) {
+            String msg = "瀵煎嚭鏋氫妇鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            try {
+                //鍑洪敊鏃�
+                e.printStackTrace();
+                ControllerUtil.writeDataToResponse(response,"error_" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss") + ".txt", StringUtils.isNotBlank(msg)?msg.getBytes():new byte[0],null);
+            } catch (IOException ioException) {
+                ioException.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * 涓嬭浇灞炴�у鍏ユā鏉�
+     * @param exportFileName
+     * @param response
+     */
+    @GetMapping( "/downloadAttributeTemplate")
+    @VciBusinessLog(operateName = "瀵煎嚭灞炴��")
+    public void downloadAttributeTemplate(String exportFileName, HttpServletResponse response){
+        try {
+            String excelPath = attributeService.downloadAttributeTemplate(exportFileName);
+            ControllerUtil.writeFileToResponse(response,excelPath);
+        } catch (Exception e) {
+            String msg = "涓嬭浇鏋氫妇瀵煎叆妯℃澘鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            try {
+                //鍑洪敊鏃�
+                e.printStackTrace();
+                ControllerUtil.writeDataToResponse(response,"error_" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss") + ".txt", StringUtils.isNotBlank(msg)?msg.getBytes():new byte[0],null);
+            } catch (IOException ioException) {
+                ioException.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * 瀵煎叆灞炴��
+     * @param file
+     * @return
+     */
+    @PostMapping("/importAttributes")
+    @VciUnCheckRight
+    public BaseResult importAttributes(MultipartFile file){
+        String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + LocalFileUtil.getFileNameForIE(file.getOriginalFilename());
+        File file1 = new File(excelFileName);
+        try {
+            file.transferTo(new File(excelFileName));
+            if (file != null) {
+                return attributeService.importAttributes(file1);
+            } else {
+                return BaseResult.fail(FrameWorkLangCodeConstant.IMPORT_FAIL, new String[]{"鏃犲鍏ョ殑鏂囦欢"});
+            }
+        }catch (Throwable e) {
+            throw new VciBaseException(VciBaseUtil.getExceptionMessage(e),new String[0],e);
+        }finally {
+            file1.delete();
+        }
+    }
+
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLinkTypeController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLinkTypeController.java
index 9308325..8b592a7 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLinkTypeController.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLinkTypeController.java
@@ -1,20 +1,24 @@
 package com.vci.web.controller;
 
+import com.vci.corba.common.PLException;
+import com.vci.corba.omd.ltm.LinkType;
 import com.vci.pagemodel.OsBtmTypeAttributeVO;
 import com.vci.pagemodel.OsLinkTypeAttributeVO;
 import com.vci.pagemodel.OsLinkTypeVO;
+import com.vci.starter.web.annotation.controller.VciUnCheckRight;
 import com.vci.starter.web.pagemodel.BaseQueryObject;
 import com.vci.starter.web.pagemodel.BaseResult;
 import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.VciBaseUtil;
 import com.vci.web.service.OsLinkTypeServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -34,6 +38,11 @@
     private OsLinkTypeServiceI linkTypeService;
 
     /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
      * 閾炬帴绫诲瀷鐨勫垪琛�
      * @param baseQueryObject 鏌ヨ瀵硅薄
      * @return 閾炬帴绫诲瀷鐨勬樉绀哄璞�
@@ -41,6 +50,23 @@
     @GetMapping("/gridLinkType")
     public DataGrid<OsLinkTypeVO> gridLinkType(BaseQueryObject baseQueryObject){
         return linkTypeService.gridLinkType(baseQueryObject);
+    }
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑閾炬帴绫诲瀷鍚嶇О锛屽彲鐢ㄤ簬灞炴�ф睜鐨勮繛鎺ョ被鍨嬮�夋嫨鏃剁殑瀵硅瘽妗�
+     * @return 閾炬帴绫诲瀷鐨勬樉绀哄璞�
+     */
+    @GetMapping("/getAllLtName")
+    @VciUnCheckRight
+    public BaseResult getAllLtName(){
+        try {
+            return BaseResult.dataList(linkTypeService.getAllLtName());
+        }catch (Exception e) {
+            e.printStackTrace();
+            String exceptionMessage = "閾炬帴绫诲瀷鍒楄〃鏌ヨ鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
     }
 
     /**
@@ -93,4 +119,40 @@
             return BaseResult.success();
         }
     }
+
+
+    /**
+     * 閾炬帴绫诲瀷鐨勫垪琛�
+     *
+     * @return 閾炬帴绫诲瀷鐨勬樉绀哄璞�
+     */
+    @GetMapping("/gridLink")
+    public BaseResult<List<LinkType>> gridLink(){
+        try {
+            return linkTypeService.gridLink();
+        } catch (PLException e) {
+            BaseResult objectBaseResult = new BaseResult<>();
+            objectBaseResult.setCode(Integer.parseInt(e.code));
+            objectBaseResult.setMsg(Arrays.toString(e.messages));
+            return objectBaseResult;
+        }
+    }
+
+    /**
+     * 閾炬帴绫诲瀷淇濆瓨
+     * linkType 閾炬帴绫诲瀷鐨勪繚瀛樺璞�
+     * addFlag 鏄惁涓烘柊澧� true鏂板锛宖alse淇敼
+     * @return 淇濆瓨缁撴灉
+     */
+    @GetMapping("/addAndEditLink")
+    public BaseResult addAndEditLink(@RequestBody LinkType linkType, Boolean addFlag){
+        try {
+            return linkTypeService.addAndEditLink(linkType, addFlag);
+        } catch (PLException e) {
+            BaseResult objectBaseResult = new BaseResult<>();
+            objectBaseResult.setCode(Integer.parseInt(e.code));
+            objectBaseResult.setMsg(Arrays.toString(e.messages));
+            return objectBaseResult;
+        }
+    }
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebBtmTypeController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebBtmTypeController.java
index 81d0ddd..e460f8f 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebBtmTypeController.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebBtmTypeController.java
@@ -1,5 +1,7 @@
 package com.vci.web.controller;
 
+import com.vci.corba.common.PLException;
+import com.vci.starter.web.annotation.controller.VciUnCheckRight;
 import com.vci.starter.web.annotation.log.VciBusinessLog;
 import com.vci.starter.web.enumpck.BooleanEnum;
 import com.vci.starter.web.exception.VciBaseException;
@@ -17,6 +19,8 @@
 import com.vci.web.service.OsBtmServiceI;
 import com.vci.web.service.WebBtmIOServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.web.bind.annotation.*;
@@ -26,6 +30,7 @@
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -40,6 +45,11 @@
 @VciBusinessLog(modelName="涓氬姟绫诲瀷")
 @RestController
 public class WebBtmTypeController {
+
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
 
     /**
      * 涓氬姟绫诲瀷鐨勬湇鍔�
@@ -71,6 +81,24 @@
         return btmService.referDataGrid(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
     }
 
+    /**
+     * 鑾峰彇鍚嶅瓧浠ilter寮�濮嬬殑涓氬姟绫诲瀷(for 鏌ヨ)锛屼富瑕佺敤浜庡睘鎬ф睜鐨勪笟鍔$被鍨嬮�夋嫨瀵硅瘽妗�
+     * @param btmName 鏌ヨ鏉′欢
+     * @return 鍒楄〃鐨勫唴瀹�
+     */
+    @GetMapping( "/getBizTypes")
+    @VciBusinessLog(operateName = "涓氬姟绫诲瀷鍒楄〃(涓昏鐢ㄤ簬瀵硅瘽妗嗕娇鐢�)")
+    @VciUnCheckRight
+    public BaseResult getBizTypes(String btmName){
+        try {
+            return BaseResult.dataList(Arrays.asList(btmService.getBizTypes(btmName)));
+        }catch (Exception e) {
+            e.printStackTrace();
+            String exceptionMessage = "鑾峰彇涓氬姟绫诲瀷鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
 
     /**
      * 鍙傜収鐨勪笟鍔$被鍨�
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebEnumController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebEnumController.java
index e8beb3e..a8048f4 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebEnumController.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebEnumController.java
@@ -1,22 +1,35 @@
 package com.vci.web.controller;
 
+import com.vci.constant.FrameWorkLangCodeConstant;
 import com.vci.dto.OsEnumDTO;
 import com.vci.starter.web.annotation.controller.VciUnCheckRight;
 import com.vci.starter.web.annotation.log.VciBusinessLog;
+import com.vci.starter.web.exception.VciBaseException;
 import com.vci.starter.web.pagemodel.BaseQueryObject;
 import com.vci.starter.web.pagemodel.BaseResult;
 import com.vci.starter.web.pagemodel.DataGrid;
 import com.vci.pagemodel.KeyValue;
 import com.vci.pagemodel.OsEnumItemVO;
 import com.vci.pagemodel.OsEnumVO;
+import com.vci.starter.web.util.ControllerUtil;
+import com.vci.starter.web.util.LangBaseUtil;
+import com.vci.starter.web.util.LocalFileUtil;
 import com.vci.starter.web.util.VciBaseUtil;
 import com.vci.web.service.OsEnumServiceI;
+import com.vci.web.util.Func;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -46,7 +59,6 @@
 	 * @return 鏋氫妇鐨勪笅鎷夊��
 	 */
 	@VciBusinessLog(notStore=true,operateName="鑾峰彇鏋氫妇")
-	@VciUnCheckRight
 	@GetMapping("/getEnum")
 	public BaseResult<List<KeyValue>> getEnum(String comboxKey){
 		return BaseResult.success(enumService.getEnum(comboxKey));
@@ -87,13 +99,30 @@
 	}
 
 	/**
+	 * 鏍规嵁鏋氫妇绫诲瀷鑾峰彇鏋氫妇
+	 * @param enumType 鏌ヨ鏉′欢name
+	 * @return 鍒楄〃鐨勫唴瀹�
+	 */
+	@GetMapping( "/getEnumMapByType")
+	@VciBusinessLog(operateName = "鏋氫妇鍒楄〃")
+	public BaseResult getEnumMapByType(String enumType) {
+		try {
+			return BaseResult.dataList(enumService.getEnumMapByType(enumType));
+		}catch (Exception e) {
+			e.printStackTrace();
+			String exceptionMessage = "鏋氫妇绠$悊鍒楄〃鏌ヨ鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+			logger.error(exceptionMessage);
+			return BaseResult.fail(exceptionMessage);
+		}
+	}
+
+	/**
 	 * 鏋氫妇鍒楄〃
 	 * @param enumName 鏌ヨ鏉′欢name
 	 * @return 鍒楄〃鐨勫唴瀹�
 	 */
 	@GetMapping( "/getEnumTypeList")
 	@VciBusinessLog(operateName = "鏋氫妇鍒楄〃")
-	@VciUnCheckRight
 	public BaseResult<List<OsEnumVO>> getEnumTypeList(String enumName) {
 		try {
 			return BaseResult.dataList(enumService.getEnumTypeList(enumName));
@@ -112,7 +141,6 @@
 	 */
 	@PostMapping( "/addEnumType")
 	@VciBusinessLog(operateName = "娣诲姞鏋氫妇")
-	@VciUnCheckRight
 	public BaseResult addEnumType(@RequestBody OsEnumDTO osEnumDTO) {
 		try {
 			return enumService.addEnumType(osEnumDTO) ? BaseResult.success("鏋氫妇绫诲瀷娣诲姞鎴愬姛锛�"):BaseResult.fail("鏋氫妇绫诲瀷娣诲姞澶辫触锛�");
@@ -131,7 +159,6 @@
 	 */
 	@PutMapping( "/updateEnumType")
 	@VciBusinessLog(operateName = "淇敼鏋氫妇")
-	@VciUnCheckRight
 	public BaseResult updateEnumType(@RequestBody OsEnumDTO osEnumDTO) {
 		try {
 			return enumService.updateEnumType(osEnumDTO) ? BaseResult.success("鏋氫妇绫诲瀷淇敼鎴愬姛锛�"):BaseResult.fail("鏋氫妇绫诲瀷淇敼澶辫触锛�");
@@ -150,7 +177,6 @@
 	 */
 	@DeleteMapping( "/deleteEnumTypes")
 	@VciBusinessLog(operateName = "鍒犻櫎鏋氫妇")
-	@VciUnCheckRight
 	public BaseResult deleteEnumTypes(@RequestBody List<OsEnumDTO> osEnumDTOS) {
 		try {
 			return enumService.deleteEnumTypes(osEnumDTOS) ? BaseResult.success("鏋氫妇绫诲瀷鍒犻櫎鎴愬姛锛�"):BaseResult.fail("鏋氫妇绫诲瀷鍒犻櫎澶辫触锛�");
@@ -164,12 +190,11 @@
 
 	/**
 	 * 鏌ョ湅鏋氫妇鐨勪娇鐢ㄨ寖鍥�
-	 * @param enumName
-	 * @return 鍒楄〃鐨勫唴瀹�
+	 * @param enumName 鏋氫妇鍚嶇О
+	 * @return map瀵硅薄
 	 */
 	@GetMapping( "/getUsedEnumList")
 	@VciBusinessLog(operateName = "鏌ョ湅鏋氫妇鐨勪娇鐢ㄨ寖鍥�")
-	@VciUnCheckRight
 	public BaseResult getUsedEnumList(String enumName) {
 		try {
 			return BaseResult.dataList(enumService.getUsedEnumList(enumName));
@@ -181,4 +206,74 @@
 		}
 	}
 
+	/**
+	 * 瀵煎嚭閫変腑鐨勬灇涓剧被鍨�
+	 * @param exportFileName 瀵煎嚭鐨勬枃浠跺悕
+	 * @param enumNames 闇�瑕佸鍑虹殑鏋氫妇鍚嶇О
+	 * @param response
+	 */
+	@GetMapping( "/exportEnumTypes")
+	@VciBusinessLog(operateName = "瀵煎嚭鏋氫妇绫诲瀷")
+	public void exportEnumTypes(String exportFileName,String enumNames, HttpServletResponse response){
+		try {
+			String excelPath = enumService.exportEnumTypes(exportFileName,enumNames);
+			ControllerUtil.writeFileToResponse(response,excelPath);
+		} catch (Exception e) {
+			String msg = "瀵煎嚭鏋氫妇鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+			try {
+				//鍑洪敊鏃�
+				e.printStackTrace();
+				ControllerUtil.writeDataToResponse(response,"error_" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss") + ".txt", StringUtils.isNotBlank(msg)?msg.getBytes():new byte[0],null);
+			} catch (IOException ioException) {
+				ioException.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * 涓嬭浇瀵煎叆妯℃澘
+	 * @param exportFileName
+	 * @param response
+	 */
+	@GetMapping( "/downloadEnumTemplate")
+	@VciBusinessLog(operateName = "瀵煎嚭鏋氫妇绫诲瀷")
+	public void downloadEnumTemplate(String exportFileName, HttpServletResponse response){
+		try {
+			String excelPath = enumService.downloadEnumTemplate(exportFileName);
+			ControllerUtil.writeFileToResponse(response,excelPath);
+		} catch (Exception e) {
+			String msg = "涓嬭浇鏋氫妇瀵煎叆妯℃澘鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+			try {
+				//鍑洪敊鏃�
+				e.printStackTrace();
+				ControllerUtil.writeDataToResponse(response,"error_" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss") + ".txt", StringUtils.isNotBlank(msg)?msg.getBytes():new byte[0],null);
+			} catch (IOException ioException) {
+				ioException.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * 瀵煎叆鏋氫妇
+	 * @param file
+	 * @return
+	 */
+	@RequestMapping(value = "/importEnumTypes",method = RequestMethod.POST)
+	public BaseResult importEnumTypes(MultipartFile file){
+		String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + LocalFileUtil.getFileNameForIE(file.getOriginalFilename());
+		File file1 = new File(excelFileName);
+		try {
+			file.transferTo(new File(excelFileName));
+			if (file != null) {
+				return enumService.importEnumTypes(file1);
+			} else {
+				return BaseResult.fail(FrameWorkLangCodeConstant.IMPORT_FAIL, new String[]{"鏃犲鍏ョ殑鏂囦欢"});
+			}
+		}catch (Throwable e) {
+			throw new VciBaseException(VciBaseUtil.getExceptionMessage(e),new String[0],e);
+		}finally {
+			file1.delete();
+		}
+	}
+
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/properties/UsedNames.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/properties/UsedNames.java
new file mode 100644
index 0000000..bda0410
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/properties/UsedNames.java
@@ -0,0 +1,38 @@
+package com.vci.web.properties;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.PropertyResourceBundle;
+
+import com.vci.client.common.ClientLog4j;
+
+public class UsedNames {
+	private static PropertyResourceBundle resourceBundle = null;
+
+	static{
+		try{
+			if(resourceBundle == null){
+				InputStream ins = UsedNames.class.getClassLoader().getResourceAsStream("properties/usedNames.properties");
+				if(ins != null){
+					resourceBundle = new PropertyResourceBundle(ins);
+				}
+			}
+		}catch(IOException e){
+			//e.printStackTrace();
+			ClientLog4j.logger.error(e);
+		}catch(Exception e){
+			//e.printStackTrace();
+			ClientLog4j.logger.error(e);
+		}
+	}
+	
+	public static String getProperty(String strKey){
+		try{
+			return resourceBundle.getString(strKey);
+		}catch(Exception e){
+			//e.printStackTrace();
+			ClientLog4j.logger.error(e);
+			return "";
+		}
+	}
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsAttributeServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsAttributeServiceI.java
index 5326c44..b1e782f 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsAttributeServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsAttributeServiceI.java
@@ -1,10 +1,15 @@
 package com.vci.web.service;
 
+import com.vci.corba.common.PLException;
 import com.vci.corba.omd.atm.AttributeDef;
+import com.vci.dto.OsAttributeDTO;
 import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
 import com.vci.starter.web.pagemodel.DataGrid;
 import com.vci.pagemodel.OsAttributeVO;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -15,6 +20,7 @@
  * @date 2021-2-15
  */
 public interface OsAttributeServiceI extends OsBaseServiceI{
+
 	/**
 	 * 鑾峰彇榛樿鐨勫睘鎬�
 	 * @return 榛樿鐨勫睘鎬у垪琛�
@@ -32,6 +38,7 @@
 	 * @return 榛樿鐨勫睘鎬ф槧灏�
 	 */
 	Map<String, OsAttributeVO> getDefaultAttributeVOMap();
+
 	/**
 	 * 璁剧疆榛樿鐨勫睘鎬х殑鏄犲皠
 	 * @param defaultAttributeVOMap 榛樿鐨勫睘鎬ф槧灏�
@@ -49,6 +56,13 @@
 	 * @return key鏄睘鎬х殑鑻辨枃鍚嶇О灏忓啓锛寁alue鏄睘鎬х殑鏄剧ず瀵硅薄
 	 */
 	Map<String,OsAttributeVO> selectAllAttributeMap();
+
+	/**
+	 * 鏍规嵁澶氫釜灞炴�у悕绉版煡璇㈠睘鎬�
+	 * @param attrNames
+	 * @return
+	 */
+	List<OsAttributeVO> getByAttributeNames(String[] attrNames) throws PLException;
 
 	/**
 	 * 灞炴�х殑鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
@@ -104,6 +118,56 @@
 	 */
     DataGrid<OsAttributeVO> gridAttribute(BaseQueryObject baseQueryObject);
 
+	/**
+	 * 娣诲姞鍗曟潯灞炴��
+	 * @param osAttributeDTO
+	 * @return true鎴愬姛锛宖alse澶辫触
+	 */
+	boolean addAttribute(OsAttributeDTO osAttributeDTO) throws PLException;
+
+	/**
+	 * 淇敼鍗曟潯灞炴��
+	 * @param osAttributeDTO
+	 * @return true鎴愬姛锛宖alse澶辫触
+	 */
+	boolean updateAttribute(OsAttributeDTO osAttributeDTO) throws PLException;
+
+	/**
+	 * 鍒犻櫎灞炴��
+	 * @param osAttributeDTOS
+	 * @return true鎴愬姛锛宖alse澶辫触
+	 */
+	boolean deleteAttributes(List<OsAttributeDTO> osAttributeDTOS) throws PLException;
+
+	/**
+	 * 鏌ョ湅灞炴�х殑浣跨敤鑼冨洿
+	 * @param attributeName
+	 * @return key:灞炴�� 锛寁alue浣跨敤璇ュ睘鎬х殑涓氬姟绫诲瀷
+	 */
+	List<Map<String,String>> getUsedAttributeList(String attributeName) throws PLException;
+
+	/**
+	 * 瀵煎嚭閫変腑鐨勫睘鎬�
+	 * @param exportFileName 瀵煎嚭鐨勬枃浠跺悕
+	 * @param attrNames 闇�瑕佸鍑虹殑灞炴�у悕绉�
+	 * @return
+	 */
+	String exportAttributes(String exportFileName,String attrNames) throws PLException;
+
+	/**
+	 * 涓嬭浇灞炴�у鍏ユā鏉�
+	 * @param exportFileName
+	 * @return
+	 * @throws PLException
+	 */
+	String downloadAttributeTemplate(String exportFileName) throws Exception;
+
+	/**
+	 * 瀵煎叆灞炴��
+	 * @param file
+	 * @return
+	 */
+	BaseResult importAttributes(File file) throws Exception;
 
 	/**
 	 * 鏄惁榛樿鐨勫睘鎬�
@@ -111,4 +175,5 @@
 	 * @return true琛ㄧず鏄粯璁ゅ睘鎬�
 	 */
 	boolean isDefaultAttr(String attr);
+
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBaseServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBaseServiceI.java
index 4fbf26c..841f993 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBaseServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBaseServiceI.java
@@ -1,5 +1,6 @@
 package com.vci.web.service;
 
+import com.vci.corba.common.PLException;
 import com.vci.corba.omd.data.BusinessObject;
 import com.vci.starter.web.pagemodel.BaseQueryObject;
 import com.vci.starter.web.pagemodel.DataGrid;
@@ -142,6 +143,5 @@
         }
         return dataGrid;
     }
-
 
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBtmServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBtmServiceI.java
index 85b5146..141ddf0 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBtmServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBtmServiceI.java
@@ -1,5 +1,6 @@
 package com.vci.web.service;
 
+import com.vci.corba.common.PLException;
 import com.vci.corba.omd.btm.BizType;
 import com.vci.pagemodel.OsBtmTypeAttributeVO;
 import com.vci.pagemodel.OsBtmTypeVO;
@@ -20,12 +21,37 @@
 public interface OsBtmServiceI extends OsBaseServiceI{
 
     /**
+     * 淇敼涓氬姟绫诲瀷涓搴斿睘鎬у悕鐨勫睘鎬�
+     * @param apName
+     * @return
+     * @throws PLException
+     */
+    boolean alterAp(String apName) throws PLException;
+
+    /**
+     * 鍒ゆ柇璇ュ睘鎬ф槸鍚﹀凡缁忓湪涓氬姟绫诲瀷涓骇鐢熶簡鏁版嵁
+     * @param abName
+     * @return
+     * @throws PLException
+     */
+    boolean hasInstance(String abName) throws PLException;
+
+    /**
      * 鏌ヨ鎵�鏈夌殑涓氬姟绫诲瀷
      * @return 涓氬姟绫诲瀷瀵硅薄
      */
     List<OsBtmTypeVO> selectAllBtm();
 
     /**
+     * 鑾峰彇鍚嶅瓧浠ilter寮�濮嬬殑涓氬姟绫诲瀷(for 鏌ヨ)锛屼富瑕佺敤浜庡睘鎬ф睜鐨勪笟鍔$被鍨嬮�夋嫨瀵硅瘽妗�
+     * 鑾峰彇鍏ㄩ儴涓氬姟绫诲瀷锛屼紶鍙俧ilter涓�""
+     * @param btmName
+     * @return
+     * @throws PLException
+     */
+    BizType[] getBizTypes(String btmName) throws PLException;
+
+    /**
      * 鏌ヨ鎵�鏈夌殑涓氬姟绫诲瀷鏄犲皠
      * @return key 鏄笟鍔$殑鑻辨枃鍚嶇О鐨勫皬鍐�
      */
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsEnumServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsEnumServiceI.java
index 21881ba..7d53a23 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsEnumServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsEnumServiceI.java
@@ -3,12 +3,15 @@
 import com.vci.corba.omd.etm.EnumType;
 import com.vci.dto.OsEnumDTO;
 import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
 import com.vci.starter.web.pagemodel.DataGrid;
 import com.vci.starter.web.pagemodel.PageHelper;
 import com.vci.pagemodel.KeyValue;
 import com.vci.pagemodel.OsEnumItemVO;
 import com.vci.pagemodel.OsEnumVO;
 
+import java.io.File;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -69,11 +72,11 @@
 
 	/**
 	 * 鏌ョ湅鏋氫妇鐨勪娇鐢ㄨ寖鍥�
-	 * @param enumName
+	 * @param enumName 鏋氫妇鍚嶇О
 	 * @return
 	 * @throws PLException
 	 */
-	List<OsEnumVO> getUsedEnumList(String enumName) throws PLException;
+	List<Map<String,String>> getUsedEnumList(String enumName) throws PLException;
 
 	/**
 	 * 鏍规嵁鏋氫妇鑻辨枃鍚嶇О鑾峰彇鏋氫妇绫诲瀷
@@ -102,6 +105,29 @@
 	 * @return
 	 */
 	boolean deleteEnumTypes(List<OsEnumDTO> osEnumDTOS) throws PLException;
+
+	/**
+	 * 瀵煎嚭鏋氫妇绫诲瀷
+	 * @param exportFileName 瀵煎嚭鐨勬枃浠跺悕
+	 * @param enumNames 闇�瑕佸鍑虹殑鏋氫妇鍚嶇О
+	 * @return
+	 */
+	String exportEnumTypes(String exportFileName,String enumNames) throws PLException;
+
+	/**
+	 * 瀵煎叆鏋氫妇
+	 * @param file
+	 * @return
+	 * @throws Exception
+	 */
+	BaseResult importEnumTypes(File file) throws Exception;
+
+	/**
+	 * 涓嬭浇瀵煎叆妯℃澘
+	 * @param exportFileName
+	 * @return
+	 */
+	String downloadEnumTemplate(String exportFileName);
 
 	/**
 	 * 鏌ヨ鎵�鏈夌殑鏋氫妇鏄犲皠
@@ -178,4 +204,12 @@
 	 * @return 鏋氫妇閫夐」
 	 */
 	DataGrid<OsEnumItemVO> gridEnumItemByOid(String pkEnum);
+
+	/**
+	 * 鏍规嵁鏋氫妇绫诲瀷鏌ヨ鏋氫妇锛氭灇涓惧悕 , 鏋氫妇
+	 * @param enumType锛歋tring, Integer
+	 * @return
+	 */
+	List<Map<String,List<String>>> getEnumMapByType(String enumType);
+
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLinkTypeServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLinkTypeServiceI.java
index 3c8d7ca..fd64b1b 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLinkTypeServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLinkTypeServiceI.java
@@ -1,7 +1,9 @@
 package com.vci.web.service;
 
+import com.vci.corba.common.PLException;
 import com.vci.corba.omd.ltm.LinkType;
 import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
 import com.vci.starter.web.pagemodel.DataGrid;
 import com.vci.pagemodel.OsBtmTypeAttributeVO;
 import com.vci.pagemodel.OsLinkTypeAttributeVO;
@@ -17,6 +19,28 @@
  * @date 2021-2-15
  */
 public interface OsLinkTypeServiceI extends OsBaseServiceI{
+
+    /**
+     * 淇敼涓氬姟绫诲瀷涓搴斿睘鎬у悕鐨勫睘鎬�
+     * @param apName
+     * @return
+     * @throws PLException
+     */
+    boolean alterAp(String apName) throws PLException;
+
+    /**
+     * 鍒ゆ柇璇ュ睘鎬ф槸鍚﹀凡缁忓湪閾炬帴绫诲瀷涓骇鐢熶簡鏁版嵁
+     * @param abName
+     * @return
+     * @throws PLException
+     */
+    boolean hasInstance(String abName) throws PLException;
+
+    /**
+     * 鑾峰彇杩炴帴绫诲瀷鍚嶇О闆嗗悎
+     * @return
+     */
+    List<String> getAllLtName() throws PLException;
 
     /**
      * 鏌ヨ鎵�鏈夌殑閾炬帴绫诲瀷
@@ -85,4 +109,17 @@
      * @return 鏈夐敊璇殑灞炴��
      */
     List<OsBtmTypeAttributeVO> checkAttributeTypeDifferent(String linkTypeOid);
+    /**
+     * 閾炬帴绫诲瀷鐨勫垪琛�
+     *
+     * @return 閾炬帴绫诲瀷鐨勬樉绀哄璞�
+     */
+    BaseResult<List<LinkType>> gridLink() throws PLException;
+    /**
+     * 閾炬帴绫诲瀷淇濆瓨
+     * linkType 閾炬帴绫诲瀷鐨勪繚瀛樺璞�
+     * addFlag 鏄惁涓烘柊澧� true鏂板锛宖alse淇敼
+     * @return 淇濆瓨缁撴灉
+     */
+    BaseResult addAndEditLink(LinkType linkType, Boolean addFlag) throws PLException;
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsAttributeServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsAttributeServiceImpl.java
index 6f33a37..2d0e461 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsAttributeServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsAttributeServiceImpl.java
@@ -1,27 +1,57 @@
 package com.vci.web.service.impl;
 
+import com.vci.client.common.datatype.VTDouble;
+import com.vci.client.common.datatype.VTInteger;
+import com.vci.client.common.datatype.VTLong;
+import com.vci.client.common.datatype.VTString;
+import com.vci.client.mw.ClientSessionUtility;
 import com.vci.corba.common.PLException;
 import com.vci.corba.omd.atm.AttributeDef;
+import com.vci.dto.OsAttributeDTO;
+import com.vci.dto.OsEnumDTO;
+import com.vci.dto.OsEnumItemDTO;
+import com.vci.omd.dataType.VTDataType;
+import com.vci.pagemodel.OsEnumItemVO;
+import com.vci.pagemodel.OsEnumVO;
+import com.vci.pagemodel.OsUsedAttributeVO;
+import com.vci.po.OsAttributePO;
+import com.vci.po.OsEnumPO;
+import com.vci.starter.poi.bo.ReadExcelOption;
+import com.vci.starter.poi.bo.WriteExcelData;
+import com.vci.starter.poi.bo.WriteExcelOption;
+import com.vci.starter.poi.constant.ExcelLangCodeConstant;
+import com.vci.starter.poi.util.ExcelUtil;
 import com.vci.starter.web.annotation.log.VciUnLog;
 import com.vci.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.starter.web.exception.VciBaseException;
 import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
 import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.util.VciDateUtil;
+import com.vci.starter.web.util.*;
 import com.vci.model.OsAttributeDO;
 import com.vci.pagemodel.OsAttributeVO;
+import com.vci.web.properties.UsedNames;
 import com.vci.web.service.OsAttributeServiceI;
+import com.vci.web.service.OsBaseServiceI;
+import com.vci.web.service.OsLinkTypeServiceI;
+import com.vci.web.util.Func;
 import com.vci.web.util.PlatformClientUtil;
 import com.vci.web.util.WebUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.util.HSSFColor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.swing.*;
+import java.awt.*;
+import java.io.File;
 import java.util.*;
+import java.util.List;
 import java.util.stream.Collectors;
 
 //import static com.vci.client.omd.attribpool.ui.VTDataTypePanel.*;
@@ -52,6 +82,40 @@
 	@Autowired(required = false)
 	@Lazy
 	private OsAttributeServiceI self;
+
+	/**
+	 * 灞炴�у悕绉版渶澶ч暱搴�
+	 */
+	private Integer NAME_MAX_LENGTH = 28;
+
+	/**
+	 * 绯荤粺涓彉閲忛厤缃枃浠朵腑閰嶇疆鐨刱ey
+	 */
+	private final String SYSUSEDNAMES = "sysUsedNames";
+
+	/**
+	 * 鏁版嵁搴撲腑鍏抽敭瀛楅厤缃枃浠朵腑閰嶇疆鐨刱ey
+	 */
+	private final String DATABASEUSEDNAMES = "dataBaseUsedNames";
+
+	/**
+	 * 閾炬帴绫诲瀷鏈嶅姟
+	 */
+	@Autowired(required = false)
+	@Lazy
+	private OsLinkTypeServiceI osLinkTypeServiceI;
+
+	/**
+	 * 涓氬姟绫诲瀷鏈嶅姟
+	 */
+	@Autowired(required = false)
+	@Lazy
+	private OsBtmServiceImpl osBtmService;
+
+	/**
+	 *  蹇呭~鍒�
+	 */
+	private List<Integer> ColumnNameisRed = new ArrayList<Integer>();
 
 	/**
 	 * 榛樿鐨勫睘鎬�
@@ -126,6 +190,26 @@
 	}
 
 	/**
+	 * 鏍规嵁澶氫釜灞炴�у悕绉版煡璇㈠睘鎬�
+	 * @param attrNames
+	 * @return
+	 */
+	@Override
+	public List<OsAttributeVO> getByAttributeNames(String[] attrNames) throws PLException {
+		VciBaseUtil.alertNotNull(attrNames,"灞炴�у悕");
+		List<OsAttributeVO> osAttributeVOS = new ArrayList<>();
+		for (int i = 0; i < attrNames.length; i++) {
+			AttributeDef[] attributeDefs = platformClientUtil.getAttributeService().getAttributeDefs(attrNames[i].toLowerCase(Locale.ROOT),1,1);
+			if(Func.isNotEmpty(attributeDefs)){
+				Arrays.stream(attributeDefs).forEach(attributeDef -> {
+					osAttributeVOS.add(attributeDO2VO(attributeDef));
+				});
+			}
+		}
+		return osAttributeVOS;
+	}
+
+	/**
 	 * 灞炴�х殑鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
 	 *
 	 * @param attribItems 鏁版嵁瀵硅薄
@@ -154,8 +238,8 @@
 			attributeVO.setId(attribItem.name);
 			attributeVO.setCreator(attribItem.creator);
 			try {
-				attributeVO.setCreateTime(VciDateUtil.str2Date(String.valueOf(attribItem.createTime),VciDateUtil.DateTimeFormat));
-				attributeVO.setLastModifyTime(VciDateUtil.str2Date(String.valueOf(attribItem.modifyTime),VciDateUtil.DateTimeFormat));
+				attributeVO.setCreateTime(new Date(attribItem.createTime));
+				attributeVO.setLastModifyTime(new Date(attribItem.modifyTime));
 				attributeVO.setTs(VciDateUtil.str2Date(attribItem.ts,VciDateUtil.DateTimeMillFormat));
 			}catch (Throwable e){
 
@@ -166,7 +250,13 @@
 			attributeVO.setAttributeDataType(attribItem.vtDataType);
 			attributeVO.setAttributeDataTypeText(VciFieldTypeEnum.getTextByValue(attribItem.vtDataType));
 			attributeVO.setDefaultValue(attribItem.defValue);
-			attributeVO.setRange(attribItem.rage);
+			if(Func.isNotBlank(attribItem.rage)){
+				attributeVO.setRange(attribItem.rage.replace("&lt;","<"));
+			}else{
+				attributeVO.setRange(attribItem.rage);
+			}
+			attributeVO.setOther(attribItem.other);
+			//澶勭悊鍙傜収鐩稿叧灞炴��
 			if(StringUtils.isNotBlank(attribItem.other)) {
 				if (isReferAttr(attribItem.other)) {
 					//璇存槑杩欎釜鐨勭‘鏄弬鐓у瓧娈�
@@ -176,6 +266,12 @@
 							attributeVO.setBtmTypeId(s.split("=")[1].trim());
 						}
 						//閾炬帴绫诲瀷涓嶆敮鎸�
+						if (s.toLowerCase().contains("link") && s.split("=").length > 1) {//蹇呴』瑕佸垽鏂暱搴︼紝鍥犱负鏋氫妇鐨勬椂鍊欎篃鏄寘鍚繖涓猙tm鐨�
+							attributeVO.setLinkTypeName(s.split("=")[1].trim());
+						}
+						if (s.toLowerCase().contains("version") && s.split("=").length > 1) {//蹇呴』瑕佸垽鏂暱搴︼紝鍥犱负鏋氫妇鐨勬椂鍊欎篃鏄寘鍚繖涓猙tm鐨�
+							attributeVO.setVersion(WebUtil.getInt(s.split("=")[1].trim()));
+						}
 					}
 				}
 				//蹇呰緭鍜岄暱搴�
@@ -364,6 +460,605 @@
 	}
 
 	/**
+	 * 娣诲姞鍗曟潯灞炴��
+	 * @param osAttributeDTO
+	 * @return true鎴愬姛锛宖alse澶辫触
+	 */
+	@Override
+	public boolean addAttribute(OsAttributeDTO osAttributeDTO) throws PLException {
+		//鍒ょ┖
+		VciBaseUtil.alertNotNull(
+		osAttributeDTO,"鍒涘缓鐨勫睘鎬у璞�",
+			osAttributeDTO.getId(),"灞炴�у悕绉�",
+			osAttributeDTO.getAttributeDataType(),"灞炴�х被鍨�"
+		);
+		//灞炴�ц嫳鏂囧悕绉版牎楠岋紙鍒ょ┖銆佺郴缁熶腑鍒ら噸銆佹槸鍚﹀叧閿瓧銆佹槸鍚﹀悎瑙勭瓑锛�
+		checkName(osAttributeDTO.getId());
+		//妫�鏌ラ粯璁ゅ�间笌灞炴�х被鍨嬫槸鍚﹀尮閰�
+		checkDefValue(osAttributeDTO);
+		//dto瀵硅薄杞崲涓哄瓨鍌ㄦ墍闇�瀵硅薄
+		osAttributeDTO.setOid(VciBaseUtil.getPk().toUpperCase(Locale.ROOT));
+		AttributeDef attributeDef = this.osAttributeDTO2AttributeDef(osAttributeDTO);
+		return platformClientUtil.getAttributeService().addAttributeDef(attributeDef);
+	}
+
+	/**
+	 * 淇敼鍗曟潯灞炴��
+	 * @param osAttributeDTO
+	 * @return true鎴愬姛锛宖alse澶辫触
+	 */
+	@Override
+	public boolean updateAttribute(OsAttributeDTO osAttributeDTO) throws PLException {
+		//鍒ょ┖
+		VciBaseUtil.alertNotNull(
+				osAttributeDTO,"淇敼鐨勫睘鎬у璞�",
+				osAttributeDTO.getId(),"灞炴�у悕绉�",
+				osAttributeDTO.getTs(),"浜嬪姟TS",
+				osAttributeDTO.getAttributeDataType(),"灞炴�х被鍨�"
+		);
+
+		//鍚嶇О涓嶅厑璁镐慨鏀规墍浠ヤ笉鐢ㄦ煡閲�
+		//浣嗘槸闇�瑕佹鏌ュ睘鎬ф槸鍚﹀瓨鍦�
+		OsAttributeVO osAttributeVO = getByAttributeNames(new String[]{osAttributeDTO.getId()}).get(0);
+		if(Func.isEmpty(osAttributeVO) || Func.isBlank(osAttributeVO.getOid())){
+			throw new PLException("500",new String[]{"灞炴�у湪绯荤粺涓笉瀛樺湪锛岃鍒锋柊鍚庨噸璇曪紒"});
+		}
+		//妫�鏌ラ粯璁ゅ�间笌灞炴�х被鍨嬫槸鍚﹀尮閰�
+		checkDefValue(osAttributeDTO);
+		boolean compatible = isCompatible(osAttributeVO,osAttributeDTO);
+		boolean hasInstance = hasInstance(osAttributeDTO.getName());
+		//浜х敓鏁版嵁, 骞朵笖涓嶅吋瀹�
+		if(hasInstance && !compatible){
+			throw new PLException("500",new String[]{"鏃犳晥鍙樻洿, 涓嶅吋瀹瑰凡浜х敓鐨勬暟鎹紒"});
+		}
+		String userId = "developer";//WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
+		osAttributeDTO.setLastModifier(userId);
+		osAttributeDTO.setCreator(osAttributeVO.getCreator());
+		osAttributeDTO.setCreateTime(osAttributeVO.getCreateTime());
+		osAttributeDTO.setLastModifyTime(new Date());
+
+		try {
+			AttributeDef attributeDef = this.osAttributeDTO2AttributeDef(osAttributeDTO);
+			boolean mdSuccess = platformClientUtil.getAttributeService().modifyAttributeDef(attributeDef);
+			if(!mdSuccess){
+				return false;
+			}
+
+			//灞炴�т慨鏀规垚鍔�,淇敼涓氬姟绫诲瀷, 閾炬帴绫诲瀷涓灞炴�у瓧娈�
+			boolean alterApBoolean = this.alterAp(attributeDef.name);
+			if(!alterApBoolean){
+				logger.error("灞炴�т慨鏀瑰畬鎴愶紝浣嗗湪璋冩暣涓氬姟绫诲瀷鎴栭摼鎺ョ被鍨嬩腑瀵瑰簲灞炴�у悕鐨勫睘鎬ф椂鍑虹幇閿欒锛�");
+				throw new PLException("500",new String[]{"灞炴�т慨鏀瑰畬鎴愶紝浣嗗湪璋冩暣涓氬姟绫诲瀷鎴栭摼鎺ョ被鍨嬩腑瀵瑰簲灞炴�у悕鐨勫睘鎬ф椂鍑虹幇閿欒锛�"});
+			}
+			return true;
+		} catch (PLException e1) {
+			e1.printStackTrace();
+		}
+		return false;
+	}
+
+	/**
+	 * DTO瀵硅薄杞疄闄呭瓨鍌ㄦ墍闇�鐨凙ttributeDef瀵硅薄
+	 * @param osAttributeDTO
+	 * @return
+	 */
+	private AttributeDef osAttributeDTO2AttributeDef(OsAttributeDTO osAttributeDTO) {
+		AttributeDef attributeDef = new AttributeDef();
+		attributeDef.oid = osAttributeDTO.getOid();
+		attributeDef.name = osAttributeDTO.getId().toLowerCase().replaceAll(" ", "");
+		attributeDef.label = osAttributeDTO.getName();
+		attributeDef.description = osAttributeDTO.getDescription();
+		attributeDef.vtDataType = (String)osAttributeDTO.getAttributeDataType();
+		attributeDef.defValue = Func.isBlank(osAttributeDTO.getDefaultValue()) ? "" : osAttributeDTO.getDefaultValue();
+		if(Func.isBlank(osAttributeDTO.getRange())){
+			attributeDef.rage = "";
+		}else{
+			//鐗规畩瀛楃澶勭悊锛岀洿鎺ュ瓨鍌�<浼氭姤閿�
+			attributeDef.rage = osAttributeDTO.getRange().replace("<","&lt;");
+		}
+		attributeDef.ts = Func.format((Func.isNotEmpty(osAttributeDTO.getTs()) ? osAttributeDTO.getTs():new Date()),VciDateUtil.DateTimeMillFormat);
+		attributeDef.creator = "developer";//Func.isBlank(osAttributeDTO.getCreator()) ? WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId():osAttributeDTO.getCreator();
+		attributeDef.createTime = Func.isEmpty(osAttributeDTO.getCreateTime()) ? System.currentTimeMillis():osAttributeDTO.getCreateTime().getTime();
+		attributeDef.modifier = "developer";//Func.isBlank(osAttributeDTO.getLastModifier()) ? WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId():osAttributeDTO.getLastModifier();
+		attributeDef.modifyTime = System.currentTimeMillis();
+		//other闇�瑕佽嚜琛屽鐞�
+		StringBuffer sb = new StringBuffer();
+		sb.append(ALLOWNULL).append(" = ").append(osAttributeDTO.isNullableFlag() ? "yes" : "no").append(";");
+		VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.valueOf(osAttributeDTO.getAttributeDataType());
+		String[] otherInfos = attributeDef.other.split(";");
+		int length = 0;
+		if(otherInfos!=null&& otherInfos.length > 0){
+			for(String s : otherInfos){
+				if(s.contains(LENGTH+" =") || s.contains(LENGTH+"=")){
+					length = VciBaseUtil.getInt(s.split("=")[1]);
+					break;
+				}
+			}
+		}
+		switch (fieldTypeEnum) {
+			case VTDouble:
+				if(osAttributeDTO.getAttrLength() == null){
+					osAttributeDTO.setAttrLength(20);
+				}
+				if(osAttributeDTO.getPrecisionLength() == null){
+					osAttributeDTO.setPrecisionLength(2);
+				}
+				sb.append(ACCURACY).append(" = ").append(osAttributeDTO.getPrecisionLength()).append(";");
+				sb.append(LENGTH).append(" = ").append(length > osAttributeDTO.getAttrLength()?length:osAttributeDTO.getAttrLength()).append(";");
+
+				break;
+			case VTInteger:
+				if (StringUtils.isNotBlank(osAttributeDTO.getEnumId())) {
+					sb.append(ENUMNAME).append(" = ").append(osAttributeDTO.getEnumId()).append(";");
+				}
+				break;
+			case VTString:
+				if (StringUtils.isNotBlank(osAttributeDTO.getBtmTypeId())) {
+					//鍙傜収涓氬姟绫诲瀷
+					sb.append(BTM).append(" = ").append(osAttributeDTO.getBtmTypeId()).append(";");
+				}
+				if(StringUtils.isNotBlank(osAttributeDTO.getLinkTypeName())){
+					//鍙傜収閾炬帴绫诲瀷
+					sb.append(LINKTYPENAME).append(" = ").append(osAttributeDTO.getLinkTypeName()).append(";");
+				}
+				sb.append(LENGTH).append(" = ").append(length > osAttributeDTO.getAttrLength()?length:osAttributeDTO.getAttrLength()).append(";");
+				if (StringUtils.isNotBlank(osAttributeDTO.getEnumId())) {
+					sb.append(ENUMNAME).append(" = ").append(osAttributeDTO.getEnumId()).append(";");
+				}
+				break;
+			default:
+				//涓嶉渶瑕佸鐞�
+				break;
+		}
+		attributeDef.other = sb.toString();
+		if (attributeDef.other.endsWith(";")) {
+			attributeDef.other = attributeDef.other.substring(0, attributeDef.other.length() - 1);
+		}
+		return attributeDef;
+	}
+
+	/**
+	 * 淇敼灞炴�ф椂, 鍒ゆ柇褰撳墠杈撳叆鐨勫睘鎬ф槸鍚﹁兘鍏煎涔嬪墠鐨勫睘鎬�
+	 * @param osAttributeVO 鏁版嵁搴撲腑瀛樺偍鐨�
+	 * @param osAttributeDTO 淇敼鍚庣殑鍐呭
+	 * @return
+	 */
+	private boolean isCompatible(OsAttributeVO osAttributeVO/*鏁版嵁搴撲腑瀛樺偍鐨�*/,OsAttributeDTO osAttributeDTO/*淇敼鍚庣殑鍐呭*/){
+		String dataType = osAttributeVO.getAttributeDataType();
+		//String other = osAttributeVO.getOther();
+		//String newOther = abItem.other == null ? "" : abItem.other;
+		String newType = osAttributeDTO.getAttributeDataType();
+		if(newType.equals(VTDataType.VTSTRING)){
+			if(dataType.equals(VTDataType.VTINTEGER) || dataType.equals(VTDataType.VTLONG)){
+				return true;
+			}
+			if(dataType.equals(VTDataType.VTSTRING)){
+				int length = osAttributeVO.getAttrLength();//Integer.valueOf(getOtherValueByType(other, "length"));
+				int newLen = osAttributeDTO.getAttrLength();//Integer.valueOf(getOtherValueByType(newOther, "length"));
+				if(length <= newLen){
+					return true;
+				}else{
+					return false;
+				}
+			}
+		}
+
+		if(newType.equals(dataType)){
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * 鍒ゆ柇璇ュ睘鎬ф槸鍚﹀凡缁忓湪涓氬姟绫诲瀷涓�, 鎴栬�呴摼鎺ョ被鍨嬩腑浜х敓浜嗘暟鎹�
+	 * @param abName
+	 * @return
+	 */
+	private boolean hasInstance(String abName) throws PLException {
+		return osBtmService.hasInstance(abName) && osLinkTypeServiceI.hasInstance(abName);
+	}
+
+	/**
+	 * 妫�鏌ュ睘鎬у悕绉版槸鍚︾鍚堣鑼�
+	 * @param attributeName
+	 * @return 娌℃湁杩斿洖鍊硷紝瀛樺湪闂鐩存帴鎶涘嚭閿欒
+	 */
+	private void checkName(String attributeName) throws PLException {
+		if(attributeName.equals("")){
+			throw new PLException("500",new String[]{"娉ㄦ剰,灞炴�у悕涓嶈兘涓虹┖!"});
+		}
+
+		if(!attributeName.matches("[a-z A-Z]*")){
+			throw new PLException("500",new String[]{"娉ㄦ剰锛氬睘鎬у悕鍙兘涓鸿嫳鏂囧瓧姣�!"});
+		}
+
+		int length = attributeName.length();
+		if(length > NAME_MAX_LENGTH){
+			throw new PLException("500",new String[]{"灞炴�у悕杩囬暱,灞炴�у悕闀垮害涓嶈兘瓒呰繃"+ NAME_MAX_LENGTH});
+		}
+
+		String abName = attributeName.toLowerCase();
+		//妫�鏌ュ睘鎬у悕鏄惁鏄负绯荤粺鍩虹灞炴�э紝濡俢reateTime,ts,oid绛�
+		if(usedBySystem(abName)){
+			throw new PLException("500",new String[]{"灞炴�у悕鏃犳晥,鍘熷洜锛氬睘鎬у悕宸茶绯荤粺灞炴�т娇鐢�!"});
+		}
+		//妫�鏌ュ睘鎬у悕鏄惁鏄叧閿瓧
+		if(usedByDataBase(abName)){
+			throw new PLException("500",new String[]{"灞炴�у悕鏃犳晥,鍘熷洜锛氬睘鎬у悕鏄暟鎹簱鍏抽敭瀛�!"});
+		}
+		//妫�鏌ュ睘鎬у悕鏄惁宸插瓨鍦ㄤ笌绯荤粺涓�
+		if(platformClientUtil.getAttributeService().checkRowIsExists(abName)){
+			throw new PLException("500",new String[]{"灞炴�у悕绉板湪绯荤粺涓凡瀛樺湪!"});
+		}
+	}
+
+	/**
+	 * 妫�鏌ラ粯璁ゅ�间笌灞炴�х被鍨嬫槸鍚﹀尮閰�
+	 * @param osAttributeDTO
+	 * @return
+	 */
+	private void checkDefValue(OsAttributeDTO osAttributeDTO) throws PLException {
+		String defValue = osAttributeDTO.getDefaultValue();
+		String vtType = osAttributeDTO.getAttributeDataType();
+		String rages = osAttributeDTO.getRange();
+		if(defValue != null && !defValue.equals("")){
+			if(vtType.equals(VTDataType.VTSTRING)){
+				try{
+					String.valueOf(defValue);
+				}catch(Exception e){
+					throw new PLException("500",new String[]{"璇疯緭鍏tring绫诲瀷鐨勯粯璁ゅ�硷紒"});
+				}
+				if(rages == null || rages.equals("")){
+					return;
+				}
+				VTString obj = new VTString(String.valueOf(defValue));
+				boolean flag = obj.checkRageValueByRage(rages);
+				if(!flag){
+					throw new PLException("500",new String[]{"榛樿鍊间笌鍊煎煙鍐茬獊锛�"});
+				}
+			}else if(vtType.equals(VTDataType.VTINTEGER)){
+				try{
+					Integer.valueOf(defValue);
+				}catch(Exception e){
+					throw new PLException("500",new String[]{"璇疯緭鍏nteger绫诲瀷鐨勯粯璁ゅ�硷紒"});
+				}
+				if(rages == null || rages.equals("")){
+					return;
+				}
+				VTInteger obj = new VTInteger(Integer.valueOf(defValue));
+				boolean flag = obj.checkRageValueByRage(rages);
+				if(!flag){
+					throw new PLException("500",new String[]{"榛樿鍊间笌鍊煎煙鍐茬獊锛�"});
+				}
+			}else if(vtType.equals(VTDataType.VTLONG)){
+				try{
+					Long.valueOf(defValue);
+				}catch(Exception e){
+					throw new PLException("500",new String[]{"璇疯緭鍏ong绫诲瀷鐨勯粯璁ゅ�硷紒"});
+				}
+				if(rages == null || rages.equals("")){
+					return;
+				}
+				VTLong obj = new VTLong(Long.valueOf(defValue));
+				boolean flag = obj.checkRageValueByRage(rages);
+				if(!flag){
+					throw new PLException("500",new String[]{"榛樿鍊间笌鍊煎煙鍐茬獊锛�"});
+				}
+			}else if(vtType.equals(VTDataType.VTDOUBLE)){
+				try{
+					Double.valueOf(defValue);
+				}catch(Exception e){
+					throw new PLException("500",new String[]{"璇疯緭鍏ouble绫诲瀷鐨勯粯璁ゅ�硷紒"});
+				}
+				if(rages == null || rages.equals("")){
+					return;
+				}
+				VTDouble obj = new VTDouble(Double.valueOf(defValue));
+				boolean flag = obj.checkRageValueByRage(rages);
+				if(!flag){
+					throw new PLException("500",new String[]{"榛樿鍊间笌鍊煎煙鍐茬獊锛�"});
+				}
+			}
+		}
+	}
+
+	/**
+	 * 妫�鏌ヨ灞炴�у悕鏄惁琚郴缁熷睘鎬т娇鐢�
+	 * @param abName
+	 * @return
+	 */
+	private boolean usedBySystem(String abName) {
+		boolean flag = false;
+		String[] names = UsedNames.getProperty(SYSUSEDNAMES).toUpperCase().split(",");
+		List<String> nameList = Arrays.asList(names);
+		if(nameList.contains(abName.toUpperCase())){
+			flag = true;
+		}
+		return flag;
+	}
+
+	/**
+	 * 妫�鏌ヨ灞炴�у悕鏄惁灞炰簬鏁版嵁搴撳叧閿瓧
+	 * @param abName
+	 * @return
+	 */
+	private boolean usedByDataBase(String abName){
+		boolean flag = false;
+		String[] names = UsedNames.getProperty(DATABASEUSEDNAMES).toUpperCase().split(",");
+		List<String> nameList = Arrays.asList(names);
+		if(nameList.contains(abName.toUpperCase())){
+			flag = true;
+		}
+		return flag;
+	}
+
+	/**
+	 * 鍒犻櫎灞炴��
+	 * @param osAttributeDTOS
+	 * @return true鎴愬姛锛宖alse澶辫触
+	 */
+	@Override
+	public boolean deleteAttributes(List<OsAttributeDTO> osAttributeDTOS) throws PLException {
+		VciBaseUtil.alertNotNull(osAttributeDTOS,"寰呭垹闄ょ殑灞炴�у垪琛�");
+		//骞冲彴鐨刣eleteEnumTypes鏂规硶蹇呬紶涓変釜鍙傛暟锛宱id銆乶ame鍜宼s
+		List<AttributeDef> attributeDefs = new ArrayList<>();
+		for(OsAttributeDTO osAttributeDTO : osAttributeDTOS){
+			//oid鍜宼s鍒ょ┖
+			String oid = osAttributeDTO.getOid();
+			//name涓昏鐢ㄦ潵瀵圭紦瀛樻暟鎹垹闄�
+			String name = osAttributeDTO.getName();
+			Date ts = osAttributeDTO.getTs();
+			if(Func.isBlank(oid) || Func.isBlank(name) || Func.isEmpty(ts)){
+				throw new PLException("500",new String[]{"寰呭垹闄ょ殑灞炴�у垪琛ㄤ腑涓婚敭銆恛id銆戙�佽皟鏁存椂闂淬�恡s銆戙�佸睘鎬у悕銆恘ame銆戜笉鑳戒负绌猴紒"});
+			}
+			//鍒ゆ柇鏋氫妇鏄惁鏈夎寮曠敤
+			List<Map<String, String>> usedAttrList = this.getUsedAttributeList(name);
+			if(Func.isNotEmpty(usedAttrList)){
+				throw new PLException("500",new String[]{"鍒犻櫎鐨勫睘鎬т腑锛屽睘鎬у悕绉颁负锛氥��" + name + "銆�,宸茶寮曠敤锛�"});
+			}
+			AttributeDef attributeDef = new AttributeDef();
+			attributeDef.oid = oid;
+			attributeDef.name = name;
+			attributeDef.ts = Func.format(ts,VciDateUtil.DateTimeMillFormat);
+			attributeDefs.add(attributeDef);
+		}
+		if(Func.isEmpty(attributeDefs)){
+			return false;
+		}
+		return platformClientUtil.getAttributeService().deleteAttributeDefs(attributeDefs.toArray(new AttributeDef[attributeDefs.size()]));
+	}
+
+	/**
+	 * 鏌ョ湅灞炴�х殑浣跨敤鑼冨洿
+	 * @param attributeName
+	 * @return key:灞炴�� 锛寁alue浣跨敤璇ュ睘鎬х殑涓氬姟绫诲瀷
+	 */
+	@Override
+	public List<Map<String, String>> getUsedAttributeList(String attributeName) throws PLException {
+		if(Func.isBlank(attributeName)){
+			throw new PLException("500",new String[]{"璇烽�夋嫨瑕佹煡璇㈠簲鐢ㄨ寖鍥寸殑灞炴��!"});
+		}
+		String[] btNames = platformClientUtil.getBtmService().getBTNamesByAPName(attributeName);
+		if(Func.isEmpty(btNames)){
+			return new ArrayList<>();
+		}
+		List<Map<String,String>> btmNameMapList = new ArrayList<>();
+		Arrays.stream(btNames).forEach(btName->{
+			Map<String, String> itemMap = new HashMap<>();
+			itemMap.put("attributeName",attributeName);
+			itemMap.put("source",btName);
+			btmNameMapList.add(itemMap);
+		});
+		return btmNameMapList;
+	}
+
+	/**
+	 * 瀵煎嚭閫変腑鐨勫睘鎬�
+	 * @param exportFileName 瀵煎嚭鐨勬枃浠跺悕
+	 * @param attrNames 闇�瑕佸鍑虹殑灞炴�у悕绉�
+	 * @return
+	 */
+	@Override
+	public String exportAttributes(String exportFileName, String attrNames) throws PLException {
+		if(Func.isBlank(attrNames)){
+			throw new PLException("500",new String[]{"璇峰嬀閫夎瀵煎嚭鐨勫睘鎬�!"});
+		}
+		//鐣岄潰娌′紶鍚嶇О锛屼娇鐢ㄩ粯璁ゅ鍑哄悕绉�
+		exportFileName = Func.isBlank(exportFileName) ?  "灞炴�ф睜涓睘鎬у鍑篲" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss"):exportFileName;
+		//璁剧疆鍒楀悕
+		List<String> columns = new ArrayList<>(
+				Arrays.asList("灞炴�у悕", "鏍囩", "鎻忚堪",
+						"灞炴�х被鍨�", "鍏佽涓虹┖", "榛樿鍊�", "浣跨敤鐨勬灇涓捐嫳鏂囧悕绉�(鏋氫妇鍚�)",
+						"浣跨敤鐨勬灇涓句腑鏂囧悕绉�(鏍囩)", "鍙傜収鐨勪笟鍔$被鍨嬬紪鍙�", "鍙傜収鐨勪笟鍔$被鍨嬪悕绉�",
+						"鍙傜収鐨勯摼鎺ョ被鍨嬪悕绉�","鐗堟湰鐗堟","灞炴�ч暱搴�", "灏忔暟绮惧害浣嶆暟","灏忔暟鍒诲害浣嶆暟","鍙栧�艰寖鍥�","鍒涘缓鏃堕棿")
+		);
+
+		//鍐檈xcel
+		String excelPath = LocalFileUtil.getDefaultTempFolder() + File.separator + exportFileName +  ".xls";
+		try {
+			new File(excelPath).createNewFile();
+		} catch (Throwable e) {
+			throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelPath}, e);
+		}
+		//璁剧疆鍒�
+		List<WriteExcelData> excelDataList = new ArrayList<>();
+		//璁剧疆鍒楀ご
+		for (int index = 0; index < columns.size(); index++) {
+			excelDataList.add(new WriteExcelData(0,index, columns.get(index)));
+		}
+		//鎸夌収灞炴�у悕鏌ヨ灞炴�э紝鐒跺悗澶勭悊灞炴�у鍑�
+		List<String> enumNameList = Func.toStrList(attrNames);
+		List<OsAttributeVO> osAttributeVOS = this.listAttrByIds(enumNameList);
+		if(Func.isEmpty(osAttributeVOS)){
+			excelDataList.add(new WriteExcelData(1,1, "鏍规嵁灞炴�у悕绉版湭鏌ヨ鍒板睘鎬т俊鎭紝璇峰埛鏂板悗灏濊瘯閲嶆柊瀵煎嚭锛�"));
+		}else{
+			//鍏堟寜鐓у睘鎬х被鍨嬫帓搴忥紝涓嶅悓灞炴�х被鍨嬪鍑虹殑鏁版嵁涔辩殑鏁堟灉
+			osAttributeVOS.sort(Comparator.comparing(OsAttributeVO::getAttributeDataType));
+			for (int i = 0; i < osAttributeVOS.size(); i++) {
+				OsAttributeVO osAttributeVO = osAttributeVOS.get(i);
+				excelDataList.add(new WriteExcelData(i+1,0, osAttributeVO.getId()));
+				excelDataList.add(new WriteExcelData(i+1,1, osAttributeVO.getName()));
+				excelDataList.add(new WriteExcelData(i+1,2, osAttributeVO.getDescription()));
+				excelDataList.add(new WriteExcelData(i+1,3, osAttributeVO.getAttributeDataTypeText()+"("+osAttributeVO.getAttributeDataType()+")"));
+				excelDataList.add(new WriteExcelData(i+1,4, osAttributeVO.isNullableFlag()));
+				excelDataList.add(new WriteExcelData(i+1,5, osAttributeVO.getDefaultValue()));
+				excelDataList.add(new WriteExcelData(i+1,6, osAttributeVO.getEnumId()));
+				excelDataList.add(new WriteExcelData(i+1,7, osAttributeVO.getEnumName()));
+				excelDataList.add(new WriteExcelData(i+1,8, osAttributeVO.getBtmTypeId()));
+				excelDataList.add(new WriteExcelData(i+1,9, osAttributeVO.getBtmTypeName()));
+				excelDataList.add(new WriteExcelData(i+1,10, osAttributeVO.getAttrLength()));
+				excelDataList.add(new WriteExcelData(i+1,11, osAttributeVO.getLinkTypeName()));
+				excelDataList.add(new WriteExcelData(i+1,12, osAttributeVO.getVersion()));
+				excelDataList.add(new WriteExcelData(i+1,13, osAttributeVO.getPrecisionLength()));
+				excelDataList.add(new WriteExcelData(i+1,14, osAttributeVO.getScaleLength()));
+				excelDataList.add(new WriteExcelData(i+1,15, osAttributeVO.getRange()));
+				excelDataList.add(new WriteExcelData(i+1,16, osAttributeVO.getCreateTime()));
+			}
+		}
+		WriteExcelOption excelOption = new WriteExcelOption(excelDataList);
+		ExcelUtil.writeDataToFile(excelPath, excelOption);
+		return excelPath;
+	}
+
+	/**
+	 * 涓嬭浇灞炴�у鍏ユā鏉�
+	 * @param exportFileName
+	 * @return
+	 * @throws PLException
+	 */
+	@Override
+	public String downloadAttributeTemplate(String exportFileName) throws Exception {
+		//鐣岄潰娌′紶鍚嶇О锛屼娇鐢ㄩ粯璁ゅ鍑哄悕绉�
+		exportFileName = Func.isBlank(exportFileName) ?  "灞炴�ф睜瀵煎叆妯℃澘_" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss"):exportFileName;
+		//璁剧疆鍒楀悕
+		List<String> columns = new ArrayList<>(
+				Arrays.asList("灞炴�у悕", "鏍囩", "鎻忚堪",
+						"灞炴�х被鍨�", "鍏佽涓虹┖(鏄�/鍚�)", "榛樿鍊�", "浣跨敤鐨勬灇涓捐嫳鏂囧悕绉�", "鍙傜収鐨勪笟鍔$被鍨嬬紪鍙�",
+						"鍙傜収鐨勯摼鎺ョ被鍨嬬紪鍙�","鐗堟湰鐗堟","灞炴�ч暱搴�", "灏忔暟绮惧害浣嶆暟","灏忔暟鍒诲害浣嶆暟","鍙栧�艰寖鍥�")
+		);
+		//璁剧疆蹇呭~鍒�
+		ColumnNameisRed.clear();
+		ColumnNameisRed.add(0);
+		ColumnNameisRed.add(3);
+		ColumnNameisRed.add(10);
+
+		//鍐檈xcel
+		String excelPath = LocalFileUtil.getDefaultTempFolder() + File.separator + exportFileName +  ".xls";
+		try {
+			new File(excelPath).createNewFile();
+		} catch (Throwable e) {
+			throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelPath}, e);
+		}
+		//璁剧疆鍒�
+		List<WriteExcelData> excelDataList = new ArrayList<>();
+		//璁剧疆鍒楀ご
+		for (int index = 0; index < columns.size(); index++) {
+			//鍒ゆ柇鏄惁涓哄繀濉垪锛岀粰蹇呭~鍒楄缃鑹�
+			if(ColumnNameisRed.contains(index)){
+				WriteExcelData excelData = new WriteExcelData(0, index, columns.get(index));
+				excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
+				excelDataList.add(excelData);
+			}else{
+				excelDataList.add(new WriteExcelData(0,index, columns.get(index)));
+			}
+		}
+		WriteExcelOption excelOption = new WriteExcelOption(excelDataList);
+		ExcelUtil.writeDataToFile(excelPath, excelOption);
+		return excelPath;
+	}
+
+	/**
+	 * 瀵煎叆灞炴��
+	 * @param file
+	 * @return
+	 */
+	@Override
+	public BaseResult importAttributes(File file) throws Exception{
+		VciBaseUtil.alertNotNull(file,"excel鏂囦欢");
+		if(!file.exists()){
+			throw new VciBaseException("瀵煎叆鐨別xcel鏂囦欢涓嶅瓨鍦�,{0}",new String[]{file.getPath()});
+		}
+		try{
+			//1銆佽鍙杄xcel涓殑鏁版嵁锛岀粍鎴愬璞�
+			ReadExcelOption excelOption = new ReadExcelOption();
+			List<OsAttributePO> poList = ExcelUtil.readDataObjectFromExcel(file, OsAttributePO.class,excelOption,(value, po, fieldName)->{});
+			//鍘婚櫎閮芥槸绌虹殑鎯呭喌
+			if(CollectionUtils.isEmpty(poList)){
+				return BaseResult.fail(ExcelLangCodeConstant.IMPORT_CONTENT_NULL,new String[]{});
+			}
+			//excel鍒ら噸锛屾暟鎹牎楠岋紝dto瀵硅薄杞崲锛屽瓨鍌ㄥ璞¤浆鎹紝鎵ц淇濆瓨
+			List<OsAttributeDTO> dtoList = new ArrayList<>();
+			//褰撳墠excel涓槸鍚﹂噸澶嶇敤鐨勫垽閲峂ap:锛坘ey锛氬垽閲嶅睘鎬э紝value锛氳鍙凤級
+			Map<String, String> excelReapeat = new HashMap<>();
+			//鍒ゆ柇蹇呭~灞炴�ф槸鍚︿负绌猴紝鐢ㄦ埛鏄惁宸插瓨鍦紝浠ュ強閮ㄩ棬鏄惁濉敊绛夋牎楠岄�昏緫
+			poList.stream().forEach(osAttributePO -> {
+				if(Func.isBlank(osAttributePO.getId())){//灞炴�у悕鍒ょ┖
+					throw new VciBaseException("绗��"+osAttributePO.getRowIndex()+"銆戣锛宔numnameerror");
+				}else if(Func.isBlank(osAttributePO.getAttributeDataType())){
+					throw new VciBaseException("绗��"+osAttributePO.getRowIndex()+"銆戣锛宼ypeerror");
+				}else if(excelReapeat.containsKey(osAttributePO.getId())){//灞炴�у悕琛ㄦ牸涓垽閲�
+					throw new VciBaseException("绗��"+excelReapeat.get(osAttributePO.getId())+"銆戣鍜岀銆�"+osAttributePO.getRowIndex()+"銆戣鏁版嵁锛屽睘鎬у悕閲嶅");
+				}
+				//灞炴�у悕鏍¢獙
+				try {
+					checkName(osAttributePO.getId());
+				} catch (PLException e) {
+					e.printStackTrace();
+					throw new VciBaseException(VciBaseUtil.getExceptionMessage(e));
+				}
+				//灞炴�у悕excel涓垽閲嶅鐞�
+				excelReapeat.put(osAttributePO.getId(),osAttributePO.getRowIndex());
+				OsAttributeDTO osAttributeDTO = new OsAttributeDTO();
+				osAttributeDTO.setOid(VciBaseUtil.getPk().toUpperCase(Locale.ROOT));
+				osAttributeDTO.setId(osAttributePO.getId());
+				osAttributeDTO.setName(osAttributePO.getName());
+				osAttributeDTO.setDescription(osAttributePO.getDescription());
+				osAttributeDTO.setDefaultValue(osAttributePO.getDefaultValue());
+				osAttributeDTO.setAttrLength(osAttributePO.getAttrLength());
+				osAttributeDTO.setAttributeDataType(osAttributePO.getAttributeDataType());
+				osAttributeDTO.setBtmTypeId(osAttributePO.getBtmTypeId());
+				//osAttributeDTO.setBtmTypeName(osAttributePO.getBtmname());
+				osAttributeDTO.setLinkTypeName(osAttributePO.getLinkTypeName());
+				osAttributeDTO.setVersion(osAttributePO.getVersion());
+				osAttributeDTO.setEnumId(osAttributePO.getEnumId());
+				//osAttributeDTO.setEnumName(osAttributePO.getEnumId());
+				osAttributeDTO.setPrecisionLength(osAttributePO.getPrecisionLength());
+				osAttributeDTO.setScaleLength(osAttributePO.getScaleLength());
+				osAttributeDTO.setRange(osAttributePO.getRange());
+				osAttributeDTO.setNullableFlag("鏄�".equals(osAttributePO.getNullableFlag()) ? true:false);
+				try {
+					//妫�鏌ラ粯璁ゅ�间笌灞炴�х被鍨嬫槸鍚﹀尮閰�
+					checkDefValue(osAttributeDTO);
+				} catch (PLException e) {
+					e.printStackTrace();
+					throw new VciBaseException(e.getMessage());
+				}
+				dtoList.add(osAttributeDTO);
+			});
+			//鎵ц淇濆瓨鎿嶄綔
+			dtoList.stream().forEach(dto->{
+				try {
+					boolean b = platformClientUtil.getAttributeService().addAttributeDef(osAttributeDTO2AttributeDef(dto));
+					if(!b){
+						throw new VciBaseException("save and return false");
+					}
+				} catch (PLException e) {
+					e.printStackTrace();
+					throw new VciBaseException("鎵ц淇濆瓨鏃跺嚭鐜伴敊璇紝閿欒灞炴�у璞″悕涓猴細銆�" + dto.getId() + "銆戯紝鍘熷洜锛�"+e.getMessage());
+				}
+			});
+		}catch (Exception e){
+			if(logger.isErrorEnabled()){
+				logger.error("璇诲彇excel鍐呭鏃舵垨淇濆瓨鐢ㄦ埛淇℃伅鏃跺嚭鐜颁簡閿欒锛屽叿浣撳師鍥狅細",VciBaseUtil.getExceptionMessage(e));
+			}
+			e.printStackTrace();
+			return BaseResult.fail(VciBaseUtil.getExceptionMessage(e),new String[]{},e);
+		}
+		return BaseResult.success("鏋氫妇瀵煎叆鎴愬姛锛�");
+	}
+
+	/**
 	 * 鏄惁榛樿鐨勫睘鎬�
 	 *
 	 * @param attr 灞炴�х紪鍙�
@@ -384,18 +1079,17 @@
 	 */
 	private boolean isReferAttr(String other){
 		if(StringUtils.isNotBlank(other)
-				&& (other.toLowerCase().contains("btm") || other.toLowerCase().contains("ltm"))){
+				&& (other.toLowerCase().contains("btm") || other.toLowerCase().contains("link"))){
 			//杩樹笉鑳界‘瀹氾紝鍥犱负鏋氫妇鐨勬椂鍊欎篃浼氳缃産tm
 			String[] temp = other.split(";");
 			for(String s : temp){
-				if((s.contains("btm") || s.contains("ltm")) && s.split("=").length>1){
+				if((s.contains("btm") || s.contains("link")) && s.split("=").length>1){
 					return true;
 				}
 			}
 		}
 		return false;
 	}
-
 
 	/**
 	 * 鏄惁涓烘灇涓剧殑灞炴��
@@ -416,7 +1110,6 @@
 		return false;
 	}
 
-
 	/**
 	 * 娓呴櫎缂撳瓨
 	 */
@@ -424,4 +1117,15 @@
 	public void clearCache() {
 
 	}
+
+	/**
+	 * 璋冪敤淇敼涓氬姟绫诲瀷鍜岃繛鎺ョ被鍨嬩腑瀵瑰簲灞炴�у悕鐨勫睘鎬�
+	 * @param apName
+	 * @return
+	 * @throws PLException
+	 */
+	private boolean alterAp(String apName) throws PLException {
+		return osBtmService.alterAp(apName) && osLinkTypeServiceI.alterAp(apName);
+	}
+
 }
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 66cdd49..ef49c4b 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
@@ -1,7 +1,9 @@
 package com.vci.web.service.impl;
 
 import com.vci.corba.common.PLException;
+import com.vci.corba.omd.atm.AttributeDef;
 import com.vci.corba.omd.btm.BizType;
+import com.vci.corba.omd.ltm.LinkType;
 import com.vci.pagemodel.*;
 import com.vci.starter.web.annotation.log.VciUnLog;
 import com.vci.starter.web.enumpck.BooleanEnum;
@@ -336,6 +338,88 @@
     }
 
     /**
+     * 淇敼涓氬姟绫诲瀷涓搴斿睘鎬у悕鐨勫睘鎬�
+     * @param apName
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public boolean alterAp(String apName) throws PLException {
+        String[] btmNames = null;
+        List<String> btmNameList = new ArrayList<String>();
+        AttributeDef abItem = null;
+        try {
+            abItem = platformClientUtil.getAttributeService().getAttributeDefByName(apName);
+        } catch (PLException e1) {
+            e1.printStackTrace();
+        }
+        if(abItem == null || abItem.equals("")){
+            return true;
+        }
+        try {
+            btmNames = platformClientUtil.getBtmService().getBTNamesByAPName(apName);
+        } catch (PLException e) {
+            e.printStackTrace();
+        }
+        if(btmNames == null || btmNames.length <= 0){
+            return true;
+        }
+
+        btmNameList = Arrays.asList(btmNames);
+        for(Iterator<String> i = btmNameList.iterator(); i.hasNext();){
+            String btmName = i.next();
+            try {
+                platformClientUtil.getBtmService().modifyBTAttribute(btmName, apName);
+            } catch (PLException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+                String erreMsg = "璋冩暣涓氬姟绫诲瀷涓��"+apName+"銆戝睘鎬ф椂鍑虹幇閿欒锛屽師鍥狅細"+e.getMessage();
+                logger.error(erreMsg);
+                throw new PLException("500",new String[]{erreMsg});
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 鍒ゆ柇璇ュ睘鎬ф槸鍚﹀凡缁忓湪涓氬姟绫诲瀷涓骇鐢熶簡鏁版嵁
+     * @param abName
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public boolean hasInstance(String abName) throws PLException {
+        String[] btmNames = platformClientUtil.getBtmService().getBTNamesByAPName(abName);
+        if(btmNames == null || btmNames.length == 0){
+            return false;
+        }
+        for(int i = 0; i < btmNames.length; i++){
+            String btmName = btmNames[i];
+            boolean flag;
+            flag = platformClientUtil.getBtmService().hasData(btmName);
+            if(flag){
+                return flag;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 鑾峰彇鍚嶅瓧浠ilter寮�濮嬬殑涓氬姟绫诲瀷(for 鏌ヨ)锛屼富瑕佺敤浜庡睘鎬ф睜鐨勪笟鍔$被鍨嬮�夋嫨瀵硅瘽妗�
+     * 鑾峰彇鍏ㄩ儴涓氬姟绫诲瀷锛屼紶鍙俧ilter涓�""
+     * @param btmName
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public BizType[] getBizTypes(String btmName) throws PLException {
+        if(null == btmName){
+            btmName = "";
+        }
+        return platformClientUtil.getBtmService().getBizTypes(btmName);
+    }
+
+    /**
      * 鍙傜収涓氬姟绫诲瀷
      *
      * @param conditionMap 鏌ヨ鏉′欢
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsEnumServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsEnumServiceImpl.java
index 2173b0a..97f5267 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsEnumServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsEnumServiceImpl.java
@@ -1,5 +1,6 @@
 package com.vci.web.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.vci.corba.common.PLException;
 import com.vci.corba.omd.data.BusinessObject;
 import com.vci.corba.omd.etm.EnumItem;
@@ -7,19 +8,21 @@
 import com.vci.dto.OsEnumDTO;
 import com.vci.dto.OsEnumItemDTO;
 import com.vci.omd.utils.ObjectTool;
+import com.vci.pagemodel.*;
+import com.vci.po.OsEnumPO;
+import com.vci.starter.poi.bo.ReadExcelOption;
+import com.vci.starter.poi.bo.WriteExcelData;
+import com.vci.starter.poi.bo.WriteExcelOption;
+import com.vci.starter.poi.constant.ExcelLangCodeConstant;
+import com.vci.starter.poi.util.ExcelUtil;
 import com.vci.starter.web.annotation.log.VciUnLog;
 import com.vci.starter.web.enumpck.UserSecretEnum;
 import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
 import com.vci.starter.web.pagemodel.DataGrid;
 import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.util.VciDateUtil;
+import com.vci.starter.web.util.*;
 import com.vci.constant.EnumIdConstant;
-import com.vci.pagemodel.KeyValue;
-import com.vci.pagemodel.OsEnumItemVO;
-import com.vci.pagemodel.OsEnumVO;
-import com.vci.pagemodel.OsStatusVO;
-import com.vci.starter.web.util.WebThreadLocalUtil;
 import com.vci.web.service.OsEnumServiceI;
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
@@ -27,6 +30,7 @@
 import com.vci.web.util.PlatformClientUtil;
 import com.vci.web.util.WebUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.util.HSSFColor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,6 +39,7 @@
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.util.HtmlUtils;
 
+import java.io.File;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -72,16 +77,21 @@
 	private WebBoServiceI boService;
 
 	/**
-	 * 鏃ュ織
-	 */
-	private Logger logger = LoggerFactory.getLogger(getClass());
-
-	/**
 	 * 鍔犺浇鑷韩
 	 */
 	@Autowired(required = false)
 	@Lazy
 	private OsEnumServiceI self;
+
+	/**
+	 * 蹇呭~鍒�
+	 */
+	private List<Integer> ColumnNameisRed = new ArrayList<Integer>();
+
+	/**
+	 * 鏃ュ織
+	 */
+	private Logger logger = LoggerFactory.getLogger(getClass());
 
 	/**
 	 * 浣跨敤缂栧彿鑾峰彇鏋氫妇鏄庣粏
@@ -231,13 +241,27 @@
 
 	/**
 	 * 鏌ョ湅鏋氫妇鐨勪娇鐢ㄨ寖鍥�
-	 * @param enumName
+	 * @param enumName 鏋氫妇鍚嶇О
 	 * @return
 	 * @throws PLException
 	 */
 	@Override
-	public List<OsEnumVO> getUsedEnumList(String enumName) throws PLException {
-		return null;
+	public List<Map<String,String>> getUsedEnumList(String enumName) throws PLException {
+		if(Func.isBlank(enumName)){
+			throw new PLException("500",new String[]{"璇烽�夋嫨瑕佹煡璇㈠簲鐢ㄨ寖鍥寸殑鏋氫妇!"});
+		}
+		String[] attrubuteNames = platformClientUtil.getAttributeService().getAttrubyteNamesByEMName(enumName);
+		if(Func.isEmpty(attrubuteNames)){
+			return new ArrayList<>();
+		}
+		List<Map<String,String>> attrubuteMapList = new ArrayList<>();
+		Arrays.stream(attrubuteNames).forEach(attrName->{
+			Map<String, String> itemMap = new HashMap<>();
+			itemMap.put("enumName",enumName);
+			itemMap.put("source",attrName);
+			attrubuteMapList.add(itemMap);
+		});
+		return attrubuteMapList;
 	}
 
 	/**
@@ -279,8 +303,10 @@
 		//鏋氫妇椤瑰悕绉板垽閲嶇瓑鎿嶄綔
 		checkOsEnumItem(osEnumDTO);
 		//榛樿鍊煎鐞�
-		String userId = "developer";//WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
+		String userId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
 		osEnumDTO.setCreator(userId);
+		//鎵嬪姩璁剧疆涓婚敭锛屽惁鍒欏钩鍙扮洿鎺ョ敤娌℃湁涓婚敭鐨勬灇涓炬斁杩涗簡缂撳瓨涓紝瀵艰嚧鍚庣画鏌ヨ鐨勬暟鎹病鏈塷id
+		osEnumDTO.setOid(VciBaseUtil.getPk().toUpperCase(Locale.ROOT));
 		osEnumDTO.setLastModifier(userId);
 		return platformClientUtil.getEnumService().addEnumType(this.osEnumDTO2EnumType(osEnumDTO));
 	}
@@ -308,7 +334,7 @@
 		//3銆佹灇涓鹃」鍒ら噸锛屽拰闀垮害绛夋牎楠�
 		checkOsEnumItem(osEnumDTO);
 		//灏唎sEnumVO涓殑榛樿鍊艰祴鍊肩粰osEnumDTO瀵硅薄
-		String userId = "developer";//WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
+		String userId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
 		osEnumDTO.setLastModifier(userId);
 		osEnumDTO.setCreator(osEnumVO.getCreator());
 		osEnumDTO.setCreateTime(osEnumVO.getCreateTime());
@@ -333,7 +359,12 @@
 			String name = osEnumDTO.getName();
 			Date ts = osEnumDTO.getTs();
 			if(Func.isBlank(oid) || Func.isBlank(name) || Func.isEmpty(ts)){
-				throw new PLException("500",new String[]{"寰呭垹闄ょ殑鏋氫妇鍒楄〃涓富閿�恛id銆戝拰璋冩暣鏃堕棿銆恡s銆戜笉鑳戒负绌猴紒"});
+				throw new PLException("500",new String[]{"寰呭垹闄ょ殑鏋氫妇鍒楄〃涓富閿�恛id銆戙�佽皟鏁存椂闂淬�恡s銆戙�佸睘鎬у悕銆恘ame銆戜笉鑳戒负绌猴紒"});
+			}
+			//鍒ゆ柇鏋氫妇鏄惁鏈夎寮曠敤
+			List<Map<String, String>> usedEnumList = this.getUsedEnumList(name);
+			if(Func.isNotEmpty(usedEnumList)){
+				throw new PLException("500",new String[]{"鍒犻櫎鐨勬灇涓句腑锛屾灇涓惧悕绉颁负锛氥��" + name + "銆�,宸茶寮曠敤锛�"});
 			}
 			EnumType enumType = new EnumType();
 			enumType.oid = oid;
@@ -348,6 +379,252 @@
 	}
 
 	/**
+	 * 瀵煎嚭鏋氫妇绫诲瀷
+	 * @param exportFileName 瀵煎嚭鐨勬枃浠跺悕
+	 * @param enumNames 闇�瑕佸鍑虹殑鏋氫妇鍚嶇О
+	 * @return
+	 */
+	@Override
+	public String exportEnumTypes(String exportFileName,String enumNames) throws PLException {
+		if(Func.isBlank(enumNames)){
+			throw new PLException("500",new String[]{"璇峰嬀閫夎瀵煎嚭鐨勬灇涓�!"});
+		}
+		//鐣岄潰娌′紶鍚嶇О锛屼娇鐢ㄩ粯璁ゅ鍑哄悕绉�
+		exportFileName = Func.isBlank(exportFileName) ?  "鏋氫妇绫诲瀷瀵煎嚭_" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss"):exportFileName;
+		//璁剧疆鍒楀悕
+		List<String> columns = new ArrayList<>(Arrays.asList("鏋氫妇鍚嶇О", "鏍囩", "杩斿洖绫诲瀷", "闀垮害", "鏋氫妇椤瑰悕绉�", "鏋氫妇鍊�", "鎻忚堪"));
+
+		//鍐檈xcel
+		String excelPath = LocalFileUtil.getDefaultTempFolder() + File.separator + exportFileName +  ".xls";
+		try {
+			new File(excelPath).createNewFile();
+		} catch (Throwable e) {
+			throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelPath}, e);
+		}
+		//璁剧疆鍒�
+		List<WriteExcelData> excelDataList = new ArrayList<>();
+		//璁剧疆鍒楀ご
+		for (int index = 0; index < columns.size(); index++) {
+			excelDataList.add(new WriteExcelData(0,index, columns.get(index)));
+		}
+		//鎸夌収鏋氫妇鍚嶆煡璇㈡灇涓撅紝鐒跺悗澶勭悊鏋氫妇瀵煎嚭
+		List<String> enumNameList = Func.toStrList(enumNames);
+		int startRow = 1;
+		for (int i = 0; i < enumNameList.size(); i++) {
+			//鏍规嵁鏋氫妇鍚嶇О鏌ヨ鏋氫妇鍜屾灇涓鹃」
+			OsEnumVO osEnumVO = this.getEnumTypeById(enumNameList.get(i));
+			//OsEnumVO osEnumVO = getTestJson(i);
+			//鏌ヨ缁撴灉涓嶅簲璇ヤ负绌�
+			if(Func.isEmpty(osEnumVO) && Func.isBlank(osEnumVO.getOid())){
+				throw new PLException("500",new String[]{"鏈煡璇㈠埌鏋氫妇鍚嶄负銆�" + enumNameList.get(i) + "銆戠殑鏋氫妇锛岃鍒锋柊鍚庨噸鏂板鍑�!"});
+			}
+			//鏋氫妇椤逛笉涓虹┖鏃堕渶瑕佽�冭檻鍚堝苟琛岄棶棰�
+			List<OsEnumItemVO> enumVOItems = osEnumVO.getItems();
+			//鏋氫妇椤逛笉涓虹┖鏃堕渶瑕佽繘琛屽悎骞惰澶勭悊
+			if(Func.isNotEmpty(enumVOItems) || enumVOItems.size() > 1){
+				//excelDataList.add(new WriteExcelData(startRow,(enumVOItems.size()+startRow)-1,true,true,0, osEnumVO.getOid()));
+				excelDataList.add(new WriteExcelData(startRow,(enumVOItems.size()+startRow)-1,true,true,0, osEnumVO.getId()));
+				excelDataList.add(new WriteExcelData(startRow,(enumVOItems.size()+startRow)-1,true,true,1, osEnumVO.getName()));
+				excelDataList.add(new WriteExcelData(startRow,(enumVOItems.size()+startRow)-1,true,true,2, osEnumVO.getEnumValueDataType()+"("+osEnumVO.getEnumValueDataTypeText()+")"));
+				excelDataList.add(new WriteExcelData(startRow,(enumVOItems.size()+startRow)-1,true,true,3, osEnumVO.getLength()));
+				//excelDataList.add(new WriteExcelData(startRow,(enumVOItems.size()+startRow)-1,true,true,5, osEnumVO.getCreator()));
+				excelDataList.add(new WriteExcelData(startRow,(enumVOItems.size()+startRow)-1,true,true,4, Func.format(osEnumVO.getCreateTime(),"yyyy骞碝M鏈坉d鏃� hh:mm:ss")));
+
+				//澶勭悊鏋氫妇椤瑰啓鍏�
+				for (int j = 0; j < enumVOItems.size(); j++) {
+					OsEnumItemVO osEnumItemVO = enumVOItems.get(j);
+					excelDataList.add(new WriteExcelData(startRow+j,7, true,osEnumItemVO.getName()));
+					excelDataList.add(new WriteExcelData(startRow+j,8, true, osEnumItemVO.getValue()));
+					excelDataList.add(new WriteExcelData(startRow+j,9, true, osEnumItemVO.getDescription()));
+				}
+
+				startRow += enumVOItems.size();
+			}else{
+				//鏋氫妇椤逛负绌烘椂灏变笉闇�瑕佸悎骞惰
+				//excelDataList.add(new WriteExcelData(startRow,0, true,osEnumVO.getOid()));
+				excelDataList.add(new WriteExcelData(startRow,0, true, osEnumVO.getId()));
+				excelDataList.add(new WriteExcelData(startRow,1, true, osEnumVO.getName()));
+				excelDataList.add(new WriteExcelData(startRow,1, true, osEnumVO.getEnumValueDataType()+"("+osEnumVO.getEnumValueDataTypeText()+")"));
+				excelDataList.add(new WriteExcelData(startRow,3, true, osEnumVO.getLength()));
+				//excelDataList.add(new WriteExcelData(startRow,5, true, osEnumVO.getCreator()));
+				excelDataList.add(new WriteExcelData(startRow,4, true, Func.format(osEnumVO.getCreateTime(),"yyyy骞碝M鏈坉d鏃� hh:mm:ss")));
+			}
+			//璁板綍涓嬩笂涓�缁勬暟鎹粨鏉熸椂鐨勮鍙凤紝鏂逛究鐢ㄥ仛鍚堝苟琛岀殑璧峰琛�
+			startRow += 1;
+		}
+		WriteExcelOption excelOption = new WriteExcelOption(excelDataList);
+		ExcelUtil.writeDataToFile(excelPath, excelOption);
+		return excelPath;
+	}
+
+	/**
+	 * 涓嬭浇瀵煎叆妯℃澘
+	 * @param exportFileName
+	 * @return
+	 */
+	@Override
+	public String downloadEnumTemplate(String exportFileName) {
+		//鐣岄潰娌′紶鍚嶇О锛屼娇鐢ㄩ粯璁ゅ鍑哄悕绉�
+		exportFileName = Func.isBlank(exportFileName) ?  "鏋氫妇瀵煎叆妯℃澘_" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss"):exportFileName;
+		//璁剧疆鍒楀悕
+		List<String> columns = new ArrayList<>(Arrays.asList("鏋氫妇鍚嶇О", "鏍囩", "杩斿洖绫诲瀷", "闀垮害", "鏋氫妇椤瑰悕绉�(褰撳墠鏋氫妇涓嬫湁鏋氫妇椤规椂蹇呭~)", "鏋氫妇鍊�(褰撳墠鏋氫妇涓嬫湁鏋氫妇椤规椂蹇呭~)", "鎻忚堪","*娉ㄦ剰*:绗簩琛屽紑濮嬬殑鏁版嵁涓虹ず渚嬫暟鎹紝瀵煎叆鍓嶈灏嗗叾鍒犻櫎锛屽綋瀵煎叆鐨勬灇涓句笅鍏峰澶氫釜鏋氫妇椤规椂锛屽簲鎸夌収绀轰緥enum2鐨勫啓娉�"));
+		//鍐檈xcel
+		String excelPath = LocalFileUtil.getDefaultTempFolder() + File.separator + exportFileName +  ".xls";
+		//璁剧疆蹇呭~鍒�
+		ColumnNameisRed.clear();
+		ColumnNameisRed.add(0);
+		ColumnNameisRed.add(2);
+		ColumnNameisRed.add(3);
+		ColumnNameisRed.add(4);
+		ColumnNameisRed.add(5);
+		try {
+			new File(excelPath).createNewFile();
+		} catch (Throwable e) {
+			throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelPath}, e);
+		}
+		//璁剧疆鍒�
+		List<WriteExcelData> excelDataList = new ArrayList<>();
+		//璁剧疆鍒楀ご
+		for (int index = 0; index < columns.size(); index++) {
+			//鍒ゆ柇鏄惁涓哄繀濉垪锛岀粰蹇呭~鍒楄缃鑹�
+			if(ColumnNameisRed.contains(index)){
+				WriteExcelData excelData = new WriteExcelData(0, index, columns.get(index));
+				excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
+				excelDataList.add(excelData);
+			}else{
+				excelDataList.add(new WriteExcelData(0,index, columns.get(index)));
+			}
+		}
+		List<OsEnumVO> exportEnumTempExample = this.getExportEnumTempExample();
+		for (int i = 0; i < exportEnumTempExample.size(); i++) {
+			OsEnumVO osEnumVO = exportEnumTempExample.get(i);
+			List<OsEnumItemVO> enumVOItems = osEnumVO.getItems();
+			for (int j = 0; j < enumVOItems.size(); j++) {
+				OsEnumItemVO osEnumItemVO = enumVOItems.get(j);
+				excelDataList.add(new WriteExcelData(i+j+1,0, osEnumVO.getId()));
+				excelDataList.add(new WriteExcelData(i+j+1,1, osEnumVO.getName()));
+				excelDataList.add(new WriteExcelData(i+j+1,2, osEnumVO.getEnumValueDataType()));
+				excelDataList.add(new WriteExcelData(i+j+1,3, osEnumVO.getLength()));
+
+				excelDataList.add(new WriteExcelData(i+j+1,4,osEnumItemVO.getName()));
+				excelDataList.add(new WriteExcelData(i+j+1,5, osEnumItemVO.getValue()));
+				excelDataList.add(new WriteExcelData(i+j+1,6, osEnumItemVO.getDescription()));
+			}
+		}
+		WriteExcelOption excelOption = new WriteExcelOption(excelDataList);
+		ExcelUtil.writeDataToFile(excelPath, excelOption);
+		return excelPath;
+	}
+
+	/**
+	 * 瀵煎叆鏋氫妇
+	 * @param file
+	 * @return
+	 * @throws Exception
+	 */
+	@Override
+	public BaseResult importEnumTypes(File file) throws Exception {
+		VciBaseUtil.alertNotNull(file,"excel鏂囦欢");
+		if(!file.exists()){
+			throw new VciBaseException("瀵煎叆鐨別xcel鏂囦欢涓嶅瓨鍦�,{0}",new String[]{file.getPath()});
+		}
+		try{
+			//1銆佽鍙杄xcel涓殑鏁版嵁锛岀粍鎴愬璞�
+			ReadExcelOption excelOption = new ReadExcelOption();
+			List<OsEnumPO> poList = ExcelUtil.readDataObjectFromExcel(file, OsEnumPO.class,excelOption,(value, po, fieldName)->{});
+			//鍘婚櫎閮芥槸绌虹殑鎯呭喌
+			if(CollectionUtils.isEmpty(poList)){
+				return BaseResult.fail(ExcelLangCodeConstant.IMPORT_CONTENT_NULL,new String[]{});
+			}
+			//灏嗘灇涓惧拰鏋氫妇椤瑰鐞嗘垚涓�瀵瑰鍏崇郴鐨勫璞�
+			Map<String, OsEnumPO> groupPOMap = new HashMap<>();
+			for (OsEnumPO po : poList) {
+				//鎷兼帴鐢ㄦ潵浣滀负鍒嗙粍鐨刱ey
+				String key = po.getId() + "_" + po.getName() + "_" + po.getEnumValueDataType() + "_" + po.getLength();
+				OsEnumPO group = groupPOMap.get(key);
+				if (group == null) {
+					group = new OsEnumPO();
+					//鎷垮嚭鐜扮殑棣栬鍋氬悗缁殑鎻愮ず琛�
+					group.setRowIndex(po.getRowIndex());
+					group.setId(po.getId());
+					group.setName(po.getName());
+					group.setEnumValueDataType(po.getEnumValueDataType());
+					group.setLength(po.getLength());
+					groupPOMap.put(key, group);
+				}
+
+				OsEnumItemDTO itemDTO = new OsEnumItemDTO();
+				itemDTO.setName(po.getEnumItemName());
+				itemDTO.setValue(po.getValue());
+				itemDTO.setDescription(po.getDescription());
+
+				group.getItems().add(itemDTO);
+			}
+			Collection<OsEnumPO> newPOList = groupPOMap.values();
+			//鏁版嵁搴撴煡璇㈡槸鍚︽湁宸插瓨鍦ㄧ殑鏋氫妇鍚嶏紝鏂逛究鍚庣画鍋氬垽閲嶅鐞�
+			List<OsEnumVO> osEnumVOList = this.listEnumByIdCollection(poList.stream().map(OsEnumPO::getId).collect(Collectors.toSet()));
+			List<String> repeatEnumId = new ArrayList<>();
+			if(Func.isNotEmpty(osEnumVOList)){
+				repeatEnumId = osEnumVOList.stream().map(OsEnumVO::getId).collect(Collectors.toList());
+			}
+			//褰撳墠excel涓槸鍚﹂噸澶嶇敤鐨勫垽閲峂ap:锛坘ey锛氬垽閲嶅睘鎬э紝value锛氳鍙凤級
+			Map<String, String> excelReapeat = new HashMap<>();
+			//鍒ゆ柇蹇呭~灞炴�ф槸鍚︿负绌猴紝鐢ㄦ埛鏄惁宸插瓨鍦紝浠ュ強閮ㄩ棬鏄惁濉敊绛夋牎楠岄�昏緫
+			List<String> finalRepeatEnumId = repeatEnumId;
+			newPOList.stream().forEach(osEnumPO -> {
+				if(Func.isBlank(osEnumPO.getId())){//鏋氫妇鍚�
+					throw new VciBaseException("绗��"+osEnumPO.getRowIndex()+"銆戣锛宔numnameerror");
+				}else if(Func.isBlank(osEnumPO.getEnumValueDataType())){
+					throw new VciBaseException("绗��"+osEnumPO.getRowIndex()+"銆戣锛宼ypeerror");
+				}else if(Func.isEmpty(osEnumPO.getLength())){
+					throw new VciBaseException("绗��"+osEnumPO.getRowIndex()+"銆戣锛宭engtherror");
+				}else if(!osEnumPO.getId().matches("^[A-Za-z]+$")){
+					throw new VciBaseException("绗��"+osEnumPO.getRowIndex()+"銆戣鏁版嵁锛屾灇涓惧悕绉板彧鑳戒负鑻辨枃瀛楁瘝");
+				}else if(excelReapeat.containsKey(osEnumPO.getId())){//鏋氫妇鍚嶈〃鏍间腑鍒ら噸
+					throw new VciBaseException("绗��"+excelReapeat.get(osEnumPO.getId())+"銆戣鍜岀銆�"+osEnumPO.getRowIndex()+"銆戣鏁版嵁锛屾灇涓惧悕閲嶅");
+				}else if (Func.isNotEmpty(osEnumVOList) && finalRepeatEnumId.contains(osEnumPO.getId())){//2銆佸垽鏂灇涓惧悕鏄惁涓庣郴缁熶腑閲嶅
+					throw new VciBaseException("绗��"+osEnumPO.getRowIndex()+"銆戣锛屾灇涓惧悕鍦ㄧ郴缁熶腑宸茬粡瀛樺湪,璇蜂慨鏀�!");
+				}
+				//鍏堝鏋氫妇鍚峞xcel涓渶瑕佸垽閲嶅鐞�
+				excelReapeat.put(osEnumPO.getId(),osEnumPO.getRowIndex());
+			});
+			//淇濆瓨閫昏緫
+			for (OsEnumPO osEnumPO : newPOList) {
+				OsEnumDTO osEnumDTO = new OsEnumDTO();
+				//鐢熸垚瀛樺偍鐨凞TO瀵硅薄
+				osEnumDTO.setId(osEnumPO.getId());
+				osEnumDTO.setName(osEnumPO.getName());
+				osEnumDTO.setEnumValueDataType(osEnumPO.getEnumValueDataType());
+				osEnumDTO.setLength(osEnumPO.getLength());
+				osEnumDTO.setItems(osEnumPO.getItems());
+
+				//璋冪敤鏂板鏋氫妇鏂规硶
+				boolean addBoolean = this.addEnumType(osEnumDTO);
+				if(!addBoolean){
+					throw new PLException("500",new String[]{"淇濆瓨鏋氫妇鍚嶄负銆�" + osEnumDTO.getId() + "銆戠殑鏁版嵁鏃跺嚭鐜伴敊璇�!"});
+				}
+			}
+		}catch (Exception e){
+			if(logger.isErrorEnabled()){
+				logger.error("璇诲彇excel鍐呭鏃舵垨淇濆瓨鐢ㄦ埛淇℃伅鏃跺嚭鐜颁簡閿欒锛屽叿浣撳師鍥狅細",VciBaseUtil.getExceptionMessage(e));
+			}
+			e.printStackTrace();
+			return BaseResult.fail(VciBaseUtil.getExceptionMessage(e),new String[]{},e);
+		}
+		return BaseResult.success("鏋氫妇瀵煎叆鎴愬姛锛�");
+	}
+
+	/**
+	 * 鑾峰彇瀵煎叆妯℃澘鐨勭ず渚嬫暟鎹�
+	 * @return
+	 */
+	private List<OsEnumVO> getExportEnumTempExample(){
+		String testJosn = "[{\"enumValueDataType\":\"String\",\"id\":\"enum1\",\"items\":[{\"description\":\"enumitem1.1\",\"name\":\"enumitem1.1\",\"value\":\"1\"},{\"description\":\"enumitem1.2\",\"name\":\"enumitem1.2\",\"value\":\"2\"}],\"length\":2,\"name\":\"enum1\"},{\"enumValueDataType\":\"String\",\"id\":\"enum2\",\"items\":[{\"description\":\"enumitem2.1\",\"name\":\"enumitem2.1\",\"value\":\"1\"},{\"description\":\"enumitem2.2\",\"name\":\"enumitem2.2\",\"value\":\"2\"},{\"description\":\"enumitem2.3\",\"name\":\"enumitem2.3\",\"value\":\"3\"}],\"length\":6,\"name\":\"enum2\"}]";
+		List<OsEnumVO> OsEnumVOs = JSON.parseArray(testJosn,OsEnumVO.class);
+		return OsEnumVOs;
+	}
+
+	/**
 	 * 鏋氫妇椤规牎楠�
 	 * @param osEnumDTO
 	 * @return 鏍¢獙澶辫触鐩存帴鎶涘嚭寮傚父锛屽惁鍒欎笉浼氬仛浠讳綍杩斿洖
@@ -356,7 +633,7 @@
 		List<OsEnumItemDTO> items = osEnumDTO.getItems();
 		if (Func.isNotEmpty(items)) {
 			//鑾峰彇姝e垯锛屼富瑕佹槸閽堝Integer绫诲瀷鐨勬椂鍊�
-			String regular = "Integer".equals(osEnumDTO.getEnumValueDataType()) ? "^[0-9]+$" : "";
+			String regular = "Integer".equals(osEnumDTO.getEnumValueDataType()) ? "^-?\\d+$" : "";
 			//鍒╃敤set鐨刟dd杩斿洖鍊艰繘琛宯ame鍒ら噸
 			Set<String> uniqueNames = new HashSet<>();
 			for (OsEnumItemDTO item : items) {
@@ -385,7 +662,8 @@
 	private EnumType osEnumDTO2EnumType(OsEnumDTO osEnumDTO){
 		EnumType enumType = new EnumType();
 		enumType.oid = osEnumDTO.getOid();
-		enumType.name = osEnumDTO.getId();
+		//鏋氫妇鍚嶇粺涓�杞垚灏忓啓锛岄伩鍏嶅悗鏈熷嚭鐜板叾浠栭棶棰�
+		enumType.name = osEnumDTO.getId().toLowerCase(Locale.ROOT);
 		enumType.label = osEnumDTO.getName();
 		enumType.length = osEnumDTO.getLength();
 		enumType.creator = osEnumDTO.getCreator();
@@ -651,6 +929,39 @@
 	}
 
 	/**
+	 * 鏍规嵁鏋氫妇绫诲瀷鏌ヨ鏋氫妇锛氭灇涓惧悕 , 鏋氫妇
+	 * @param enumType锛歋tring, Integer
+	 * @return
+	 */
+	public List<Map<String,List<String>>> getEnumMapByType(String enumType){
+		List<Map<String,List<String>>> enumMapList = new ArrayList<>();
+		EnumType[] emArray = null;
+		try {
+			emArray = platformClientUtil.getEnumService().getEnumTypesByType(enumType);
+		} catch (PLException e) {
+			e.printStackTrace();
+		}
+		if(emArray == null || emArray.length == 0){
+			return null;
+		}
+		EnumType emItem;
+		for(int i = 0; i < emArray.length; i++){
+			emItem = emArray[i];
+			EnumItem[] emChildren = emItem.items;
+			ArrayList<String> valueList = new ArrayList<String>();
+			for(int k = 0; k < emChildren.length; k++){
+				EnumItem emChild = emChildren[k];
+				String value = emChild.value;
+				valueList.add(value);
+			}
+			Map<String, List<String>> enumMap = new HashMap<>();
+			enumMap.put(emItem.name, valueList);
+			enumMapList.add(enumMap);
+		}
+		return enumMapList;
+	}
+
+	/**
 	 * 娓呴櫎缂撳瓨
 	 */
 	@Override
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLinkTypeServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLinkTypeServiceImpl.java
index 7065900..d785735 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLinkTypeServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLinkTypeServiceImpl.java
@@ -1,6 +1,7 @@
 package com.vci.web.service.impl;
 
 import com.vci.corba.common.PLException;
+import com.vci.corba.omd.atm.AttributeDef;
 import com.vci.corba.omd.data.BusinessObject;
 import com.vci.corba.omd.ltm.LinkType;
 import com.vci.omd.utils.ObjectTool;
@@ -8,6 +9,7 @@
 import com.vci.starter.web.annotation.log.VciUnLog;
 import com.vci.starter.web.enumpck.VciFieldTypeEnum;
 import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
 import com.vci.starter.web.pagemodel.DataGrid;
 import com.vci.starter.web.util.BeanUtil;
 import com.vci.starter.web.util.VciBaseUtil;
@@ -321,10 +323,170 @@
     }
 
     /**
+     * 閾炬帴绫诲瀷鐨勫垪琛�
+     *
+     * @return 閾炬帴绫诲瀷鐨勬樉绀哄璞�
+     */
+    @Override
+    public BaseResult<List<LinkType>> gridLink() throws PLException {
+
+        LinkType[] linkTypes = platformClientUtil.getLinkTypeService().getLinkTypes();
+        return BaseResult.dataList(Arrays.asList(linkTypes));
+    }
+    /**
+     * 閾炬帴绫诲瀷淇濆瓨
+     * linkType 閾炬帴绫诲瀷鐨勪繚瀛樺璞�
+     * addFlag 鏄惁涓烘柊澧� true鏂板锛宖alse淇敼
+     * @return 淇濆瓨缁撴灉
+     */
+    @Override
+    public BaseResult addAndEditLink(LinkType linkType, Boolean addFlag) throws PLException {
+        VciBaseUtil.alertNotNull(linkType.name,"璇疯緭鍏ラ摼鎺ョ被鍨嬪悕绉�",linkType.btmItemsFrom,"From绔笟鍔$被鍨嬩笉鑳戒负绌�!",
+                linkType.btmItemsTo,"To绔被鍨嬪潎涓嶈兘涓虹┖!");
+        int maxLength = platformClientUtil.getLinkTypeService().getLTNameMaxLength();
+        if(linkType.name.length() > maxLength){
+            throw new PLException("500",new String[] {"閾炬帴绫诲瀷鍚嶉暱搴︿笉鑳借秴杩�" + maxLength});
+        }
+        if(!linkType.name.matches("^[A-Za-z]+$")){
+            throw new PLException("500",new String[] {"閾炬帴绫诲瀷鍚嶇О鍙兘涓鸿嫳鏂囧瓧姣�"});
+        }
+        LinkType historyLink = platformClientUtil.getLinkTypeService().getLinkType(linkType.name);
+        if(historyLink != null && !historyLink.name.equals("") && addFlag){
+            throw new PLException("500",new String[] {"璇ラ摼鎺ョ被鍨嬪悕绉板凡缁忓瓨鍦�"});
+        }
+        linkType.modifier = WebUtil.getCurrentUserId();
+        if(addFlag){
+            linkType.creator = WebUtil.getCurrentUserId();
+            platformClientUtil.getLinkTypeService().addLinkType(linkType);
+            return BaseResult.success(null,"淇濆瓨鎴愬姛锛�");
+        }
+        ArrayList<String> removeAbList = getRemovedApList(historyLink, linkType);
+        if(removeAbList.size() > 0 && platformClientUtil.getLinkTypeService().hasData(linkType.name)){
+            linkType.attributes = historyLink.attributes;
+            platformClientUtil.getLinkTypeService().modifyLinkType(linkType);
+            throw new PLException("500",new String[] {"绫诲瀷宸叉湁瀹炰緥, 涓嶈繘琛岀Щ闄ゆ搷浣�"});
+        }
+        platformClientUtil.getLinkTypeService().modifyLinkType(linkType);
+        return BaseResult.success(null,"淇濆瓨鎴愬姛锛�");
+    }
+
+
+    /**
+     * 鑾峰彇淇敼閾炬帴绫诲瀷鏃� 鍑忓皯鐨勫睘鎬�
+     * @param oldLt
+     * @param newLt
+     * @return
+     */
+    private ArrayList<String> getRemovedApList(LinkType oldLt,
+                                               LinkType newLt) {
+        String[] oldAbInfo = oldLt.attributes;
+        ArrayList<String> oldNameList = new ArrayList<String>();
+        for(int i = 0; i < oldAbInfo.length; i++){
+            oldNameList.add(oldAbInfo[i]);
+        }
+        String[] newAbInfo = newLt.attributes;
+        ArrayList<String> newNameList = new ArrayList<String>();
+        for(int i = 0; i < newAbInfo.length; i++){
+            newNameList.add(newAbInfo[i]);
+        }
+
+        ArrayList<String> removedApList = new ArrayList<String>();
+
+        for(Iterator<String> iterator = oldNameList.iterator(); iterator.hasNext();){
+            String oldName = iterator.next();
+            if(!newNameList.contains(oldName)){
+                removedApList.add(oldName);
+            }
+        }
+        return removedApList;
+    }
+
+    /**
      * 娓呴櫎缂撳瓨
      */
     @Override
     public void clearCache() {
 
     }
+
+    /**
+     * 淇敼閾炬帴绫诲瀷涓搴斿睘鎬у悕鐨勫睘鎬�
+     * @param apName
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public boolean alterAp(String apName) throws PLException {
+        String[] linkNames = null;
+        List<String> linkNameList = new ArrayList<String>();
+        AttributeDef abItem = null;
+        try {
+            abItem = platformClientUtil.getAttributeService().getAttributeDefByName(apName);
+        } catch (PLException e1) {
+            e1.printStackTrace();
+        }
+        if(abItem == null || abItem.equals("")){
+            return true;
+        }
+        try {
+            linkNames = platformClientUtil.getLinkTypeService().getLTNamesByAPName(apName);
+        } catch (PLException e) {
+            e.printStackTrace();
+        }
+        if(linkNames == null || linkNames.length <= 0){
+            return true;
+        }
+
+        linkNameList = Arrays.asList(linkNames);
+        for(Iterator<String> i = linkNameList.iterator(); i.hasNext();){
+            String linkName = i.next();
+            try {
+                platformClientUtil.getLinkTypeService().modifyLTAttribute(linkName, apName);
+            } catch (PLException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+                String erreMsg = "璋冩暣閾炬帴绫诲瀷涓��"+apName+"銆戝睘鎬ф椂鍑虹幇閿欒锛屽師鍥狅細"+e.getMessage();
+                logger.error(erreMsg);
+                throw new PLException("500",new String[]{erreMsg});
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 鍒ゆ柇璇ュ睘鎬ф槸鍚﹀凡缁忓湪閾炬帴绫诲瀷涓骇鐢熶簡鏁版嵁
+     * @param abName
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public boolean hasInstance(String abName) throws PLException {
+        String[] btmNames = platformClientUtil.getLinkTypeService().getLTNamesByAPName(abName);
+        if(btmNames == null || btmNames.length == 0){
+            return false;
+        }
+        for(int i = 0; i < btmNames.length; i++){
+            String btmName = btmNames[i];
+            boolean flag;
+            flag = platformClientUtil.getLinkTypeService().hasData(btmName);
+            if(flag){
+                return flag;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 鑾峰彇杩炴帴绫诲瀷鍚嶇О闆嗗悎
+     * @return
+     */
+    @Override
+    public List<String> getAllLtName() throws PLException {
+        LinkType[] linkTypes = platformClientUtil.getLinkTypeService().getLinkTypes();
+        if(null != linkTypes && linkTypes.length > 0){
+            return Arrays.stream(linkTypes).map(linkType -> linkType.name).collect(Collectors.toList());
+        }
+        return null;
+    }
+
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/resources/properties/usedNames.properties b/Source/plt-web/plt-web-parent/plt-web/src/main/resources/properties/usedNames.properties
new file mode 100644
index 0000000..222da11
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/resources/properties/usedNames.properties
@@ -0,0 +1,2 @@
+sysUsedNames = OID,REVISIONOID,NAMEOID,BtmName,ISLastR,ISFirstR,ISLastV,ISFirstV,Creator,CreateTime,LastModifier,LastModifyTime,RevisionRule,VersionRule,RevisionSeq,RevisionValue,VersionSeq,VersionValue,LCTID,LCStatus,TS,ID,NAME,DESCRIPTION,OWNER,CHECKINBY,CHECKINTIME,CHECKOUTBY,CHECKOUTTIME,COPYFROMVERSION,NEWOID,NEWREVISIONOID
+dataBaseUsedNames = ACCESS,ADD,ALL,ALTER,AND,ANY,AS,ASC,AUDIT,BETWEEN,BY,CHAR,CHECK,CLUSTER,COLUMN,COMMENT,COMPRESS,CONNECT,CREATE,CURRENT,DATE,DECIMAL,DEFAULT,DELETE,DESC,DISTINCT,DROP,ELSE,EXCLUSIVE,EXISTS,FILE,FLOAT,FOR,FROM,GRANT,GROUP,HAVING,IDENTIFIED,IMMEDIATE,IN,INCREMENT,INDEX,INITIAL,INSERT,INTEGER,INTERSECT,INTO,IS,LEVEL,LIKE,LOCK,LONG,MAXEXTENTS,MINUS,MLSLABEL,MODE,MODIFY,NOAUDIT,NOCOMPRESS,NOT,NOWAIT,NULL,NUMBER,OF,OFFLINE,ON,ONLINE,OPTION,OR,ORDER,P,CTFREE,PRIOR,PRIVILEGES,PUBLIC,RAW,RENAME,RESOURCE,REVOKE,ROW,ROWID,ROWNUM,ROWS,SELECT,SESSION,SET,SHARE,SIZE,SMALLINT,START,SUCCESSFUL,SYNONYM,SYSDATE,TABLE,THEN,TO,TRIGGER,UID,UNION,UNIQUE,UPDATE,USER,VALIDATE,VALUES,VARCHAR,VARCHAR2,VIEW,WHENEVER,WHERE,WITH 
\ No newline at end of file
diff --git a/Source/plt-web/plt-web-ui/src/api/system/menu.js b/Source/plt-web/plt-web-ui/src/api/system/menu.js
index 23b0ee5..a192a27 100644
--- a/Source/plt-web/plt-web-ui/src/api/system/menu.js
+++ b/Source/plt-web/plt-web-ui/src/api/system/menu.js
@@ -1,97 +1,5 @@
 import request from '@/router/axios';
 
-export const getList = (current, size, params) => {
-  return request({
-    url: '/api/blade-system/menu/list',
-    method: 'get',
-    params: {
-      ...params,
-      current,
-      size,
-    }
-  })
-}
-
-export const getLazyList = (parentId, params) => {
-  return request({
-    url: '/api/blade-system/menu/lazy-list',
-    method: 'get',
-    params: {
-      ...params,
-      parentId
-    }
-  })
-}
-
-export const getLazyMenuList = (parentId, params) => {
-  return request({
-    url: '/api/blade-system/menu/lazy-menu-list',
-    method: 'get',
-    params: {
-      ...params,
-      parentId
-    }
-  })
-}
-
-export const getMenuList = (current, size, params) => {
-  return request({
-    url: '/api/blade-system/menu/menu-list',
-    method: 'get',
-    params: {
-      ...params,
-      current,
-      size,
-    }
-  })
-}
-
-export const getMenuTree = (tenantId) => {
-  return request({
-    url: '/api/blade-system/menu/tree',
-    method: 'get',
-    params: {
-      tenantId,
-    }
-  })
-}
-
-export const remove = (ids) => {
-  return request({
-    url: '/api/blade-system/menu/remove',
-    method: 'post',
-    params: {
-      ids,
-    }
-  })
-}
-
-export const add = (row) => {
-  return request({
-    url: '/api/blade-system/menu/submit',
-    method: 'post',
-    data: row
-  })
-}
-
-export const update = (row) => {
-  return request({
-    url: '/api/blade-system/menu/submit',
-    method: 'post',
-    data: row
-  })
-}
-
-export const getMenu = (id) => {
-  return request({
-    url: '/api/blade-system/menu/detail',
-    method: 'get',
-    params: {
-      id,
-    }
-  })
-}
-
 export const getTopMenu = () => request({
   url: '/api/smFunctionController/top-menu',
   method: 'get'
diff --git a/Source/plt-web/plt-web-ui/src/api/treeMyMenu.js b/Source/plt-web/plt-web-ui/src/api/treeMyMenu.js
index ea7fd6f..f8d0f3a 100644
--- a/Source/plt-web/plt-web-ui/src/api/treeMyMenu.js
+++ b/Source/plt-web/plt-web-ui/src/api/treeMyMenu.js
@@ -5,7 +5,7 @@
  */
 export const treeMenu = (parentOid) => {
   return request({
-    url: 'api/smFunctionController/treeMyMenu',
+    url: '/api/smFunctionController/treeMyMenu',
     method: 'get',
     params:{
       parentOid
diff --git a/Source/plt-web/plt-web-ui/src/api/user.js b/Source/plt-web/plt-web-ui/src/api/user.js
index 0a7fed7..405e08d 100644
--- a/Source/plt-web/plt-web-ui/src/api/user.js
+++ b/Source/plt-web/plt-web-ui/src/api/user.js
@@ -19,100 +19,9 @@
   }
 });
 
-export const loginBySocial = (tenantId, source, state) => request({
-  url: '/api/blade-auth/oauth/token',
-  method: 'post',
-  headers: {
-    'Tenant-Id': tenantId
-  },
-  params: {
-    tenantId,
-    source,
-    state,
-    grant_type: "social",
-    scope: "all",
-  }
-})
-
-export const loginBySso = (state) => request({
-  url: '/api/blade-auth/oauth/token',
-  method: 'post',
-  headers: {
-    'Tenant-Id': state
-  },
-  params: {
-    tenantId: state,
-    grant_type: "authorization_code",
-    scope: "all",
-    redirect_uri: website.redirectUri,
-  }
-})
-
-export const refreshToken = (refresh_token, tenantId, deptId, roleId) => request({
-  url: '/api/blade-auth/oauth/token',
-  method: 'post',
-  headers: {
-    'Tenant-Id': tenantId,
-    'Dept-Id': (website.switchMode ? deptId : ''),
-    'Role-Id': (website.switchMode ? roleId : '')
-  },
-  params: {
-    tenantId,
-    refresh_token,
-    grant_type: "refresh_token",
-    scope: "all",
-  }
-});
-
-export const registerGuest = (form, oauthId) => request({
-  url: '/api/blade-user/register-guest',
-  method: 'post',
-  params: {
-    tenantId: form.tenantId,
-    name: form.name,
-    account: form.account,
-    password: form.password,
-    oauthId
-  }
-});
-
-export const getButtons = () => request({
-  url: '/api/blade-system/menu/buttons',
-  method: 'get'
-});
-
-export const getCaptcha = () => request({
-  url: '/api/blade-auth/oauth/captcha',
-  method: 'get',
-  authorization: false
-});
-
-export const logout = () => request({
-  url: '/api/blade-auth/oauth/logout',
-  method: 'get',
-  authorization: false
-});
-
 export const getUserInfo = () => request({
   url: '/api/framework/loginController/getSessionInfo',
   method: 'post'
-});
-
-export const sendLogs = (list) => request({
-  url: '/api/blade-auth/oauth/logout',
-  method: 'post',
-  data: list
-});
-
-export const clearCache = () => request({
-  url: '/api/blade-auth/oauth/clear-cache',
-  method: 'get',
-  authorization: false
-});
-
-export const selcetList = () => request({
-  url: '/api/blade-system/tenant/tenant-map',
-  method: 'get',
 });
 
 // 淇敼瀵嗙爜

--
Gitblit v1.9.3