From 75007678d3d1c03d8a6b99bd84332e7ad91f38fd Mon Sep 17 00:00:00 2001
From: weidy <lastanimals@163.com>
Date: 星期五, 09 六月 2023 18:32:42 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/UBCS-WEB/src/views/integration/applicationForm.vue                                                                |   42 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateAttrMapper.java            |    7 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IDockingSystemService.java                    |    2 
 Source/UBCS-WEB/src/views/integration/systemInfo.vue                                                                     |  224 ++++
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java |    8 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java                   |    2 
 Source/UBCS-WEB/src/api/integration/application.js                                                                       |   10 
 Source/UBCS-WEB/src/api/GetItem.js                                                                                       |    2 
 Source/UBCS-WEB/src/components/Tree/classifyTreeform.vue                                                                 |    1 
 Source/UBCS-WEB/vue.config.js                                                                                            |    6 
 Source/UBCS-WEB/src/api/template/templateAttr.js                                                                         |   10 
 Source/UBCS-WEB/src/api/integration/sysInfo.js                                                                           |   34 
 Source/UBCS-WEB/src/views/modeling/Version.vue                                                                           |   57 
 Source/UBCS/ubcs-service/ubcs-omd/pom.xml                                                                                |    6 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java                  |   11 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IRevisionRuleService.java                       |    6 
 Source/UBCS-WEB/src/views/modeling/LinkTypeAdd.vue                                                                       |    6 
 Source/UBCS/ubcs-service/ubcs-code/pom.xml                                                                               |   12 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeResembleRuleServiceImpl.java         |   53 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateAttrMapper.xml                          |    8 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java                             |    2 
 Source/UBCS-WEB/src/views/MasterData/items.vue                                                                           |   15 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeResembleRule.java                  |  110 ++
 Source/UBCS-WEB/src/views/modeling/Versionpackage.vue                                                                    |  128 +-
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemServiceImpl.java            |   58 +
 Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/AttributeMapper.xml                                          |    3 
 Source/UBCS-WEB/src/components/FormTemplate/ResembleQuery.vue                                                            |    2 
 Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue                                                        |   21 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml                                           |    4 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeWrapper.java                            |    1 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java                 |    8 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java                        |   15 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java                         |    9 
 Source/UBCS-WEB/src/views/modeling/LinkType.vue                                                                          |   13 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/RevisionRuleServiceImpl.java               |   12 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java                            |    6 
 Source/UBCS-WEB/src/components/Tree/classifyTrees.vue                                                                    |   62 +
 Source/UBCS-WEB/src/components/Crud/Crud.vue                                                                             |   89 +
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/RevisionRuleController.java                  |   12 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml                                            |    9 
 Source/UBCS-WEB/src/api/omd/revisionRule.js                                                                              |   18 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/DockingManagementController.java           |   14 
 Source/UBCS-WEB/src/views/modeling/Business.vue                                                                          |    8 
 Source/UBCS-WEB/src/components/Master/MasterTree.vue                                                                     |   54 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java                    |   65 +
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java                     |   10 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml                                      |   56 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java             |   34 
 Source/UBCS-WEB/src/views/modeling/classifyTree.vue                                                                      |   30 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeResembleRuleMapper.java                    |   20 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeResembleRule.xml                                        |   40 
 Source/UBCS-WEB/src/views/modeling/original.vue                                                                          |  411 ++++-----
 Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue                                                             |   22 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java                              |   10 
 Source/UBCS-WEB/src/views/modeling/status.vue                                                                            |   12 
 Source/UBCS-WEB/src/components/FormTemplate/index.vue                                                                    |    1 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java                |  199 +++-
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java             |    5 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java                   |   93 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeResembleRuleService.java                 |   17 
 Source/UBCS-WEB/src/components/Tree/TemplatePro.vue                                                                      |    4 
 Source/UBCS-WEB/src/components/Tree/attrCrud.vue                                                                         |  476 ++++++++--
 62 files changed, 1,992 insertions(+), 693 deletions(-)

diff --git a/Source/UBCS-WEB/src/api/GetItem.js b/Source/UBCS-WEB/src/api/GetItem.js
index 91f6755..6f4b1ac 100644
--- a/Source/UBCS-WEB/src/api/GetItem.js
+++ b/Source/UBCS-WEB/src/api/GetItem.js
@@ -2,7 +2,7 @@
 
 export const MasterTable =(params)=>{
   return request({
-    url: 'api/ubcs-code/ubcs-code//mdmEngineController/getUIInfoByClassifyOid',
+    url: 'api/ubcs-code/ubcs-code/mdmEngineController/getUIInfoByClassifyOid',
     method: 'get',
     params:{
       ...params
diff --git a/Source/UBCS-WEB/src/api/integration/application.js b/Source/UBCS-WEB/src/api/integration/application.js
index d95b8a2..796aab9 100644
--- a/Source/UBCS-WEB/src/api/integration/application.js
+++ b/Source/UBCS-WEB/src/api/integration/application.js
@@ -7,4 +7,12 @@
       method: 'get',
       params: params
     })
-  }
\ No newline at end of file
+  }
+  // 鐢抽鍗曠姸鎬�
+export const queryApplyStat = (params) => {
+  return request({
+    url: '/api/ubcs-applyjtcodeservice/DockingPreApplyCode/queryApplyState',
+    method: 'get',
+    params: params
+  })
+}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/api/integration/sysInfo.js b/Source/UBCS-WEB/src/api/integration/sysInfo.js
new file mode 100644
index 0000000..83449bc
--- /dev/null
+++ b/Source/UBCS-WEB/src/api/integration/sysInfo.js
@@ -0,0 +1,34 @@
+import request from '@/router/axios';
+
+// 闆嗘垚绯荤粺淇℃伅绠$悊鍒楄〃
+export const getSysInfoList = (params) => {
+    return request({
+      url: '/api/ubcs-code/dockingManagement/gridSysIntBase',
+      method: 'get',
+      params: params
+    })
+  }
+  // 闆嗘垚绯荤粺淇℃伅绠$悊鏂板
+export const sysInfoAdd = (params) => {
+  return request({
+    url: '/api/ubcs-code/dockingManagement/addSave',
+    method: 'post',
+    data: params
+  })
+}
+ // 闆嗘垚绯荤粺淇℃伅绠$悊鏂板
+ export const sysInfoEdit = (params) => {
+    return request({
+      url: '/api/ubcs-code/dockingManagement/editSave',
+      method: 'put',
+      data: params
+    })
+  }
+   // 闆嗘垚绯荤粺淇℃伅绠$悊鏂板
+export const sysInfoDel = (params) => {
+    return request({
+      url: '/api/ubcs-code/dockingManagement/deleteDataById',
+      method: 'delete',
+      params: params
+    })
+  }
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/api/omd/revisionRule.js b/Source/UBCS-WEB/src/api/omd/revisionRule.js
index ac3ce70..19f0d6d 100644
--- a/Source/UBCS-WEB/src/api/omd/revisionRule.js
+++ b/Source/UBCS-WEB/src/api/omd/revisionRule.js
@@ -1,6 +1,10 @@
 import request from '@/router/axios';
 
-export const getPage = (current,size,params) => {
+var model = '/api/ubcs-omd';
+var controller = '/revision-rule';
+
+
+export const getPage = (current, size, params) => {
     return request({
         url: '/api/ubcs-omd/revision-rule/page',
         method: 'get',
@@ -62,7 +66,7 @@
     })
 }
 
-export const refList = (currentPage,pageSize,params) => {
+export const refList = (currentPage, pageSize, params) => {
     return request({
         url: '/api/ubcs-omd/revision-rule/ref',
         method: 'get',
@@ -72,4 +76,14 @@
             pageSize
         }
     })
+}
+
+export const getAppayRange = (id) => {
+    return request({
+        url: model + controller + '/get-apply-range',
+        method: 'get',
+        params: {
+            id
+        }
+    })
 }
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/api/template/templateAttr.js b/Source/UBCS-WEB/src/api/template/templateAttr.js
index 225cc20..d58256e 100644
--- a/Source/UBCS-WEB/src/api/template/templateAttr.js
+++ b/Source/UBCS-WEB/src/api/template/templateAttr.js
@@ -138,3 +138,13 @@
     data:data
   })
 }
+//浠庝笟鍔$被鍨嬩腑閫夋嫨鏁版嵁
+export const  AttrByBtm = (params) =>{
+  return request({
+    url:'/api/ubcs-code/codeClassifyTempAttrController/codeClassifyTemplateAttrByBtm',
+    method: 'get',
+    params:{
+      ...params
+    }
+  })
+}
diff --git a/Source/UBCS-WEB/src/components/Crud/Crud.vue b/Source/UBCS-WEB/src/components/Crud/Crud.vue
index 6d66a84..c0be479 100644
--- a/Source/UBCS-WEB/src/components/Crud/Crud.vue
+++ b/Source/UBCS-WEB/src/components/Crud/Crud.vue
@@ -6,11 +6,10 @@
           <FormTemplateDialog
             :visible.sync="addvisible"
             :type="add"
-            :templateOid="this.templateOids"
-            :codeClassifyOid="this.codeClassifyOids"
+            :templateOid="this.templateOid"
+            :codeClassifyOid="this.codeClassifyOid"
             :codeRuleOid="this.codeRuleOid"
             :disabledProp="disabledProp"
-            :rowOid="rowOid"
           >
           </FormTemplateDialog></el-button>
         <el-button size="small" type="primary" plain @click="editvisible=true">缂栬緫
@@ -18,7 +17,7 @@
             :visible.sync="editvisible"
             :type="edit"
             :templateOid="this.templateOids"
-            :codeClassifyOid="this.codeClassifyOids"
+            :codeClassifyOid="this.codeClassifyOid"
             :codeRuleOid="this.codeRuleOid"
             :disabledProp="disabledProp"
             :rowOid="rowOid"
@@ -32,8 +31,9 @@
         <el-button size="small" type="primary" plain>鍙戝竷</el-button>
         <el-button size="small" type="primary" plain>鏁版嵁鏇存敼</el-button>
         <el-button size="small" type="primary" plain>鍥炴敹</el-button>
-        <el-button size="small" type="primary" plain>瀵煎嚭
-          <transfer filter-placeholder="璇疯緭鍏ユ嫾闊冲叏鎷兼垨鑰呮嫾闊崇缉鍐�" ></transfer>
+        <el-button size="small" type="primary" plain @click="openD">瀵煎嚭
+          <integration-transfer :visible.sync="dialogPush" :data="transferData"
+                                :props="transferProps" @save="handelTransferSave"></integration-transfer>
         </el-button>
         <el-button size="small" type="primary" plain @click="findvisible=true">鏌ヨ
         <advancedQuery  :visible.sync="findvisible" :options="this.options"></advancedQuery>
@@ -88,7 +88,13 @@
 </template>
 <script>
 import {MasterTable, TableData} from "@/api/GetItem";
+import {listCodeAttributeByClassId} from '@/api/integration/integration.js'
+import integrationTransfer from '@/views/integration/integrationTransfer'
+import pinyin from "js-pinyin";
 export default {
+  components: {
+    integrationTransfer
+  },
   name: "Crud.vue",
   props:{
     page:{
@@ -108,17 +114,28 @@
     tableDataArray:{
       type:Array,
       default:[]
+    },
+    total:{
+      type:String,
+      default:""
+    },
+    tableHeadDataFateher:{
+      type:Array,
+      default:[]
     }
   },
   data() {
     return {
+      transferData:[],
+      transferProps: {
+        key: 'oid',
+        label: 'name'
+      },
       templateOid:"",
       addvisible:false,
       editvisible:false,
       findvisible:false,
-      templateOids: "78B8C7C5-A042-0B96-FE6D-65421451782A",
-      codeClassifyOids: "4524E801-6CC6-92E8-1AC3-2AB9604E8F96",
-      codeRuleOid: "B95872A6-9CEA-D490-8F1B-9D26548CAF96",
+      dialogPush:false,
       rowOid: '6EF696C3-CD87-0E7C-1EA1-8DE3913A95C9',
       disabledProp: ["id"],
       editingRow:null,
@@ -140,15 +157,16 @@
       },
       tableData:[],
       tableHeadData:[],
+      tableHeadDataFateher:[],
       items:{},
-      aaa:""
+      seniorQueryColumns:[]
     }
   },
   computed:{
   },
   created() {
-    this.CrudHeaderRend();
-    this.$emit('tableData',this.tableData)
+    // this.CrudHeaderRend();
+    // this.tableHeadHandle()
   },
   mounted() {
 
@@ -167,11 +185,33 @@
     tableDataArray:{
       handler(newval,oldval){
         this.tableData=newval;
-        this.CrudRend()
+      //
+      }
+    },
+    total:{
+      handler(newval,oldval){
+        this.page.total=newval;
+      }
+    },
+    tableHeadData:{
+      handler(newval,oldval){
+        this.tableHeadDataFateher=newval
       }
     }
   },
   methods: {
+    openD(){
+      this.dialogPush=true;
+      this.getListCodeByClassId()
+    },
+    async getListCodeByClassId() {
+      this.transferData = []
+      const response = await listCodeAttributeByClassId({ codeClassifyId: this.codeClassifyOid })
+      if (response.status === 200) {
+        const data = response.data.data
+        this.transferData = data
+      }
+    },
     rend(){
       this.tableData=this.tableHeadData
     },
@@ -179,16 +219,21 @@
       this.page.pageSize=val
       this.$emit('pageSize',val)
       this.CrudRend()
+      console.log(this.tableData)
     },
     handleCurrentChange(val){
       this.page.currentPage=val
       this.$emit('currentPage',val)
       this.CrudRend()
+      console.log(val)
+      console.log(this.tableData)
     },
     // 鐩戝惉鍗曞厓鏍肩偣鍑讳簨浠跺苟瀛樺偍姝e湪缂栬緫鐨勮
     handleCellClick(row, column) {
       this.editingRow = row;
       this.editShow = column.property;
+      console.log(row)
+      this.rowOid=row.oid
     },
     //鍒犻櫎
     enumDeleteRow(row) {
@@ -203,6 +248,21 @@
       this.$nextTick(() => {
         this.$refs.crud.doLayout();
       });
+    },
+    tableHeadHandle(){
+      this.options=this.tableHeadDataFateher.tableDefineVO.seniorQueryColumns
+      this.List = this.tableHeadDataFateher.tableDefineVO.cols[0];
+      this.List.forEach(item => {
+        let columnItem = {
+          label: item.title,
+          prop: item.field,
+          type: this.columnType[item.type],
+          sortable: item.sort,
+          width: item.minWidth
+        };
+        this.option.column.push(columnItem);
+        this.option.column=this.tableHeadData;
+      })
     },
     //琛ㄦ牸澶存覆鏌�
     CrudHeaderRend() {
@@ -225,6 +285,7 @@
             this.option.column=this.tableHeadData;
             this.templateOid=res.data.tableDefineVO.oid
             this.$emit('templateOid',this.templateOid)
+            console.log(this.templateOid)
           })
         })
       }
@@ -235,7 +296,7 @@
          templateOid: this.templateOid,
          codeClassifyOid: this.codeClassifyOid,
          page: this.page.currentPage,
-         limit:this.page.pageSize,
+         limit: this.page.pageSize,
        }).then(res => {
          this.page.total = res.data.total;
          this.data = res.data.data;
diff --git a/Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue b/Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue
index 6afac39..c8e5b43 100644
--- a/Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue
+++ b/Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue
@@ -564,9 +564,6 @@
             placeholder: formItem.inputTip,
             options:formItem.referConfig
           }:{},
-          change: () => {
-            this.changeFun(formItem.displayExtension, formItem.prop);
-          },
           span: formItem.type === "textarea" ? 24 : this.trendsSpan,
           rules: [
             {
@@ -597,7 +594,9 @@
       this.$set(this.option, "column", column);
       this.$set(this.option, "group", group);
       this.formIndex++;
-      this.loading = false;
+      if (this.type === 'add') {
+        this.loading = false;
+      }
       this.geDictData(dictKeys);
       this.getFormDetail();
     },
@@ -646,11 +645,6 @@
         return val;
       }
     },
-    changeFun(displayExtension, prop) {
-      // executeCode({displayExtension, data: this.form}).then(res => {
-      //   this.form[prop] = res.data.data
-      // })
-    },
     // 鑾峰彇swich鍜屽凡鎷垮埌鐨勪笅鎷夋暟鎹�
     getDataList(type, dicData) {
       if (type === "truefalse") {
@@ -692,8 +686,7 @@
     // 琛ㄥ崟鏍¢獙
     validate() {
       return new Promise((resolve) => {
-        this.$refs.form.validate((valid, done, msg) => {
-          console.error(msg, valid);
+        this.$refs.form.validate((valid, done) => {
           if (valid) {
             done();
             resolve(true);
@@ -706,11 +699,10 @@
     // 鑾峰彇琛ㄥ崟璇︽儏鏁版嵁
     getFormDetail() {
       if (this.type === 'add') return
-      if (this.type === "add") return;
-      getFormDetail({ templateOid: this.templateOid, oid: '213D13D5-76D3-6B42-0932-705693F6B6E4' }).then(
+      getFormDetail({ templateOid: this.templateOid, oid: this.rowOid }).then(
         (res) => {
-          this.form = Object.assign(this.form, res.obj)
-          console.log(res, "res");
+          this.form = Object.assign(this.form, res.data.data[0])
+          this.loading = false;
         }
       );
     },
diff --git a/Source/UBCS-WEB/src/components/FormTemplate/ResembleQuery.vue b/Source/UBCS-WEB/src/components/FormTemplate/ResembleQuery.vue
index 3891fc5..da90c5c 100644
--- a/Source/UBCS-WEB/src/components/FormTemplate/ResembleQuery.vue
+++ b/Source/UBCS-WEB/src/components/FormTemplate/ResembleQuery.vue
@@ -144,7 +144,7 @@
     openFormTemlpate(row) {
       this.resembleTemplateOid = row.codetemplateoid
       this.resembleCodeClassifyOid = row.codeClassifyOid
-      this.rowOid = row.iod
+      this.rowOid = row.oid
       this.formTemplateVisible = true;
     },
     getDefaultValueAndFormValues(form) {
diff --git a/Source/UBCS-WEB/src/components/FormTemplate/index.vue b/Source/UBCS-WEB/src/components/FormTemplate/index.vue
index 3977502..a5e99a0 100644
--- a/Source/UBCS-WEB/src/components/FormTemplate/index.vue
+++ b/Source/UBCS-WEB/src/components/FormTemplate/index.vue
@@ -1,6 +1,7 @@
 <template>
   <el-dialog
     :visible.sync="dialogVisible"
+    v-if="dialogVisible"
     v-dialogDrag
     top="0vh"
     :title="title"
diff --git a/Source/UBCS-WEB/src/components/Master/MasterTree.vue b/Source/UBCS-WEB/src/components/Master/MasterTree.vue
index e6f5bd5..c24335f 100644
--- a/Source/UBCS-WEB/src/components/Master/MasterTree.vue
+++ b/Source/UBCS-WEB/src/components/Master/MasterTree.vue
@@ -9,7 +9,7 @@
 <script>
 import {getTreeList} from "@/api/MasterData/master";
 import {mapMutations, mapState} from "vuex";
-import {TableData} from "@/api/GetItem";
+import {TableData,MasterTable} from "@/api/GetItem";
 
 export default {
   name: "MasterTree",
@@ -29,6 +29,8 @@
   },
   data(){
     return{
+      tableHeadDataFateher:[],
+      templateOids:"",
       tableDataArray:[],
       codeClassifyOid:"",
       coderuleoid:"",
@@ -80,6 +82,7 @@
         this.coderuleoid=res.data[0].attributes.coderuleoid;
         this.$emit("codeClassifyOid", this.codeClassifyOid )
         this.$emit("coderuleoid", this.coderuleoid )
+        this.TableHeadRends()
       }).catch(res=>{
         console.log(res)
       })
@@ -97,23 +100,52 @@
         }
       }
     },
-    //鏍戠偣鍑讳簨浠�
-    nodeClick(data){
-      this.nodeClickList = data;
-      console.log(this.currentPage,this.pageSize)
+    //琛ㄦ牸鍒锋柊
+    TableRend(){
       TableData({
-        templateOid: this.templateOid,
-        codeClassifyOid: this.codeClassifyOid,
-        page: this.pageSize,
-        limit:this.currentPage,
+        templateOid: this.templateOids,
+        codeClassifyOid: this.nodeClickList.oid,
+        page: this.currentPage,
+        limit: this.pageSize,
       }).then(res => {
-        console.log(res)
         // this.page.total = res.data.total;
         // this.data = res.data.data;
         this.tableDataArray=res.data.data;
         this.$emit('tableDataArray',this.tableDataArray)
-        console.log(this.tableDataArray)
+        this.$emit('total',res.data.total)
       })
+    },
+    //琛ㄦ牸澶撮儴
+    TableHeadRend(){
+      MasterTable({
+        codeClassifyOid:this.nodeClickList.oid,
+        functionId: 5,
+      }).then(res=>{
+        this.tableHeadDataFateher=res.data;
+        this.templateOids=res.data.tableDefineVO.oid
+        this.$emit("tableHeadDataFateher",this.tableHeadDataFateher)
+        console.log("123",res)
+      })
+    },
+    TableHeadRends(){
+      MasterTable({
+        codeClassifyOid:this.codeClassifyOid,
+        functionId: 5,
+      }).then(res=>{
+        this.tableHeadDataFateher=res.data;
+        this.templateOids=res.data.tableDefineVO.oid
+        this.$emit("tableHeadDataFateher",this.tableHeadDataFateher)
+        console.log("123",res)
+      })
+    },
+    //鏍戠偣鍑讳簨浠�
+    nodeClick(data){
+      this.nodeClickList = data;
+       this.TableHeadRend()
+      this.TableRend()
+      console.log('code',this.nodeClickList.oid)
+      console.log('teoid',this.templateOids)
+      console.log()
     }
   }
 }
diff --git a/Source/UBCS-WEB/src/components/Tree/TemplatePro.vue b/Source/UBCS-WEB/src/components/Tree/TemplatePro.vue
index 67047ed..0649477 100644
--- a/Source/UBCS-WEB/src/components/Tree/TemplatePro.vue
+++ b/Source/UBCS-WEB/src/components/Tree/TemplatePro.vue
@@ -2,7 +2,7 @@
   <basic-container>
     <avue-tabs :option="Taboption" @change="handleChange"></avue-tabs>
     <span v-if="type.prop==='tab1'">
-      <attrCrud :ProData="ProData"></attrCrud>
+      <attrCrud :ProData="ProData" :crudOid="crudOid" :crudArray="crudArray" :Formlist="Formlist"></attrCrud>
     </span>
     <span v-else-if="type.prop==='tab2'">妯℃澘娴佺▼</span>
     <span v-else-if="type.prop==='tab3'">妯℃澘闃舵</span>
@@ -13,7 +13,7 @@
 <script>
 export default {
   name: "TemplatePro.vue",
-  props: ['ProData'],
+  props: ['ProData','crudOid','crudArray','Formlist'],
   data: function () {
     return {
       type: {},
diff --git a/Source/UBCS-WEB/src/components/Tree/attrCrud.vue b/Source/UBCS-WEB/src/components/Tree/attrCrud.vue
index 4121adf..9f9fca4 100644
--- a/Source/UBCS-WEB/src/components/Tree/attrCrud.vue
+++ b/Source/UBCS-WEB/src/components/Tree/attrCrud.vue
@@ -1,10 +1,26 @@
 <template>
   <avue-crud :data="ProData" :option="option" @sort-change="sortChange" @row-update="addUpdate"
-             @cell-click="handleRowClick">
+             @cell-click="handleRowClick" @select="selectHandle">
     <template slot="menuLeft">
-      <el-button v-if="attrEditVisible == false" size="small" type="primary" @click="addVisible=true">锛� 娣诲姞 {{msg}}</el-button>
+      <el-button v-if="attrEditVisible == false" size="small" type="primary" @click="busineHandle">锛� 娣诲姞 {{msg}}</el-button>
       <el-dialog :visible.sync="addVisible" append-to-body title="浠庝笟鍔$被鍨嬩腑閫夋嫨灞炴��">
-        <avue-crud :data="businessData" :option="businessOption"></avue-crud>
+        <avue-crud :data="businessData" :option="businessOption">
+          <template slot="menuLeft">
+            <div style="display: flex;">
+              <el-select>
+                <el-option>灞炴�ц嫳鏂囧悕绉�</el-option>
+                <el-option>灞炴�т腑鏂囧悕绉�</el-option>
+              </el-select>
+              <el-input style="width: 300px;margin-left: 20px"></el-input>
+              <el-button size="small" style="margin-left: 10px">鏌ヨ</el-button>
+            </div>
+
+          </template>
+        </avue-crud>
+       <div style="display: flex;justify-content: flex-end;margin-top: 15px">
+         <el-button size="small" type="primary">淇濆瓨</el-button>
+         <el-button size="small" type="primary">鍙栨秷</el-button>
+       </div>
       </el-dialog>
     </template>
     <!--        鍏ㄥ睆缂栬緫-->
@@ -14,6 +30,12 @@
       <el-dialog :visible.sync="attrEditVisible" append-to-body fullscreen="true">
         <attrCrud></attrCrud>
       </el-dialog>
+    </template>
+<!--    缁勫悎瑙勫垯-->
+    <template slot="menuLeft">
+      <el-button size="small" @click="isShowformulaEdit=true">缁勫悎瑙勫垯</el-button>
+        <formula-editor :visible="isShowformulaEdit" :systemVariableTableData="systemVariableTableData" :thisSceneTableData="thisSceneTableData"></formula-editor>
+
     </template>
     <!--        楠岃瘉瑙勫垯-->
     <template slot="menuLeft">
@@ -133,7 +155,7 @@
     </template>
     <!--    绾ц仈灞炴��-->
     <template slot="menuLeft">
-      <el-button size="small" @click="CascadeVisible=true">绾ц仈灞炴��</el-button>
+      <el-button size="small" @click="CascadeHandle">绾ц仈灞炴��</el-button>
       <el-dialog :visible.sync="CascadeVisible" append-to-body title="璇烽�夋嫨绾ц仈灞炴��">
         <avue-crud ref="crud" :data="CascadeData" :option="CascadeOption" @row-click="CascaderowClick">
           <template slot="radio"
@@ -168,31 +190,115 @@
     </template>
     <!--    鍚屾鍒板叾浠栨ā鏉�-->
     <template slot="menuLeft">
-      <el-button size="small">鍚屾鍒板叾浠栨ā鏉�</el-button>
+      <el-button size="small" style="margin-top: 10px">鍚屾鍒板叾浠栨ā鏉�</el-button>
     </template>
   </avue-crud>
 </template>
 
 <script>
+import {AttrByBtm,gridCodeClassifyTemplateAttr} from '@/api/template/templateAttr'
 export default {
   name: "attrCrud .vue",
-  props: ['ProData'],
+  props: ['ProData','crudOid','crudArray','Formlist'],
   data() {
     return {
+      //琛ㄦ牸鍗曢�夋暟缁�
+      CrudSelect:[],
+      //琛ㄦ牸oid
+      CrudOid:"",
+      //鍦烘櫙鍙橀噺
+      thisSceneTableData:[
+        {
+          formula: "lcstatus",
+          desc: "鐘舵��",
+        },
+        {
+          formula: "name",
+          desc: "闆嗗洟鐮�",
+        },
+        {
+          formula: "materialname",
+          desc: "閮ㄩ棬鍚嶇О",
+        },
+        {
+          formula: "parentcode",
+          desc: "涓婄骇閮ㄩ棬缂栧彿",
+        },
+        {
+          formula: "parentname",
+          desc: "涓婄骇閮ㄩ棬鍚嶇О",
+        },
+        {
+          formula: "description",
+          desc: "鎻忚堪",
+        },
+      ],
+      // 绯荤粺鍙橀噺
+      systemVariableTableData:[
+        {
+          formula: "#CURRENTUSER.OID#",
+          desc: "褰撳墠鐢ㄦ埛鐨勪富閿�",
+        },
+        {
+          formula:"#CURRENTUSER.ID",
+          desc:"褰撳墠鐢ㄦ埛鐨勮处鎴�"
+        },
+        {
+          formula:"#CURRENTTIME#",
+          desc:"褰撳墠鏃堕棿"
+        },
+        {
+          formula:"#CURRENTDATE#",
+          desc:"褰撳墠鏃ユ湡"
+        },
+        {
+          formula:"#CURRENTDATETIME#",
+          desc:"褰撳墠鏃ユ湡鏃堕棿"
+        },
+        {
+          formula:"#CURRENTUSER_NAME#",
+          desc:"褰撳墠鐢ㄦ埛鐨勫鍚�"
+        },
+        {
+          formula:"#CURRENTUSER.SECRETGRADE#",
+          desc:"褰撳墠鐢ㄦ埛瀵嗙骇"
+        },
+        {
+          formula:"#CURRENTUSER.IPSECRET#",
+          desc:"褰撳墠鐢ㄦ埛鐨処P瀵嗙骇"
+        },
+        {
+          formula:"#CURRENTUSER.BUSINESSUNIT#",
+          desc:"褰撳墠鐢ㄦ埛鎵�灞炰笟鍔″崟鍏�"
+        },
+        {
+          formula:"#CURRENTUSER.BUSINESSUNITNAME#",
+          desc:"褰撳墠鐢ㄦ埛鎵�灞炰笟鍔″崟鍏冨悕绉�"
+        },
+        {
+          formula:"#CURRENTUSER.GROUPOID#",
+          desc:"褰撳墠鐢ㄦ埛鐨勯儴闂ㄤ富閿�"
+        },
+        {
+          formula:"#CURRENTUSER.GROUPNAME#",
+          desc:"褰撳墠鐢ㄦ埛鎵�灞為儴闂ㄥ悕绉�"
+        },
+        {
+          formula:"#CURRENTUSER.EMAIL#",
+          desc:"褰撳墠鐢ㄦ埛閭欢鍦板潃"
+        },
+        {
+          formula:"#CURRENTUSER.ROLENAME#",
+          desc:"褰撳墠鐢ㄦ埛鎵�灞炶鑹插悕绉� "
+        },
+      ],
       CascadeVisible: false,
       attrEditVisible: false,
+      isShowformulaEdit:false,
       // 绾ц仈鍗曢��
       selectRow: '',
       // 绾ц仈data
-      CascadeData: [{
-        id: 1,
-        name: '寮犱笁',
-        attrIn: '娴嬭瘯涓�'
-      }, {
-        id: 2,
-        name: '鏉庡洓',
-        attrIn: '娴嬭瘯浜�'
-      }],
+      CascadeData: [],
       // 绾ц仈option
       CascadeOption: {
         menu: false,
@@ -208,18 +314,19 @@
         },
           {
             label: '灞炴�ц嫳鏂囩紪鍙�',
-            prop: 'nid'
-          }, {
-            label: '鎬у埆',
+            prop: 'id'
+          },
+          {
+            label: '灞炴�т腑鏂囧悕绉�',
             prop: 'name'
           },
           {
             label: '灞炴�у垎缁�',
-            prop: 'attrIn'
+            prop: 'attributeGroup'
           },
           {
             label: '绫诲瀷',
-            prop: 'type'
+            prop: 'attributeDataTypeText'
           },
           {
             label: '鍒楄〃瀹藉害',
@@ -227,19 +334,63 @@
           },
           {
             label: '鍏抽敭灞炴��',
-            prop: 'keyattrflag'
+            prop: 'keyAttrFlag',
+            type:'text',
+            dicData:[
+              {
+                label:"鏄�",
+                value:'true'
+              },
+              {
+                label:"鍚�",
+                value:'false'
+              }
+            ]
           },
           {
             label: '鏌ヨ灞炴��',
-            prop: 'queryattrflag'
+            prop: 'queryAttrFlag',
+            type:'text',
+            dicData:[
+              {
+                label:"鏄�",
+                value:'true'
+              },
+              {
+                label:"鍚�",
+                value:'false'
+              }
+            ]
           },
           {
             label: '楂樼骇鏌ヨ灞炴��',
-            prop: 'seniorqueryattrflag'
+            prop: 'seniorQueryAttrFlag',
+            type:'text',
+            dicData:[
+              {
+                label:"鏄�",
+                value:'true'
+              },
+              {
+                label:"鍚�",
+                value:'false'
+              }
+            ]
           },
           {
             label: '鐩镐技鏌ラ噸灞炴��',
-            prop: 'samerepeatattrflag'
+            prop: 'sameRepeatAttrFlag',
+            type:'text',
+            dicData:[
+              {
+                label:"鏄�",
+                value:'true'
+              },
+              {
+                label:"鍚�",
+                value:'false'
+              }
+            ]
           },
           {
             label: '涓�缁寸爜',
@@ -248,6 +399,170 @@
           {
             label: '浜岀淮鐮�',
             prop: 'TwoDimensional'
+          },
+          {
+            label: '蹇呰緭',
+            prop: 'requireFlag',
+            type:'text',
+            dicData:[
+              {
+                label:"鏄�",
+                value:'true'
+              },
+              {
+                label:"鍚�",
+                value:'false'
+              }
+            ]
+          },
+          {
+            label: "琛ㄥ崟鏄剧ず",
+            prop: "formDisplayFlag",
+            type:'text',
+            dicData:[
+              {
+                label:"鏄�",
+                value:'true'
+              },
+              {
+                label:"鍚�",
+                value:'false'
+              }
+            ]
+          },
+          {
+            label: "鍒楄〃鏄剧ず",
+            prop: "tableDisplayFlag",
+            type:'text',
+            dicData:[
+              {
+                label:"鏄�",
+                value:'true'
+              },
+              {
+                label:"鍚�",
+                value:'false'
+              }
+            ]
+          },
+          {
+            label: "鍙",
+            prop: "readonlyFlag",
+          },
+          {
+            label: "鍒楄〃鎺掑簭",
+            prop: "sortAttrFlag",
+            type:'text',
+            dicData:[
+              {
+                label:"鏄�",
+                value:'true'
+              },
+              {
+                label:"鍚�",
+                value:'false'
+              }
+            ]
+          },
+
+          {
+            label: "澶氳鏂囨湰",
+            prop: "textAreaFlag",
+            type:'text',
+            dicData:[
+              {
+                label:"鏄�",
+                value:'true'
+              },
+              {
+                label:"鍚�",
+                value:'false'
+              }
+            ]
+          },
+          {
+            label: "榛樿鍊�",
+            prop: "defaultValue",
+          },
+          {
+            label: "鍓嶇紑",
+            prop: "prefixValue",
+          },
+          {
+            label: "鍚庣紑",
+            prop: "suffixValue",
+          },
+          {
+            label: "缁勫悎瑙勫垯",
+            prop: "componentRule",
+          },
+          {
+            label: "楠岃瘉瑙勫垯",
+            prop: "verifyRule",
+          },
+          {
+            label: "鏃堕棿鏍煎紡",
+            prop: "codeDateFormat",
+          },
+          {
+            label: "鍒嗙被娉ㄥ叆",
+            prop: "classifyInvokeLevel",
+          },
+          {
+            label: "鏋氫妇娉ㄥ叆",
+            prop: "enumString",
+          },
+          {
+            label: "绾ц仈灞炴��",
+            prop: "parentCode",
+          },
+          {
+            label: "鍙傜収閰嶇疆",
+            prop: "referConfig",
+          },
+          {
+            label: "绾ц仈鏌ヨ灞炴��",
+            prop: "parentQueryAttr",
+          },
+          {
+            label: "閫夋嫨搴撴爣璇�",
+            prop: "libraryIdentification",
+          },
+          {
+            label: "濉啓鎻愮ず",
+            prop: "explain",
+          },
+          {
+            label: "琛ㄥ崟鏄剧ず鏍峰紡",
+            prop: "formDisplayStyle",
+          },
+          {
+            label: "琛ㄦ牸鏄剧ず鏍峰紡",
+            prop: "tableDisplayStyle",
+          },
+          {
+            label: "琛ㄥ崟瓒呴摼鎺�",
+            prop: "formHref",
+          },
+          {
+            label: "琛ㄦ牸瓒呴摼鎺�",
+            prop: "tableHref",
+          },
+          {
+            label: "琛ㄦ牸鏄剧ずjs",
+            prop: "tableDisplayJs",
+          },
+          {
+            label: "闀垮害",
+            prop: "controlLength",
+          },
+          {
+            label: "灏忔暟绮惧害",
+            prop: "precisionLength",
+          },
+          {
+            label: "鍙栧�艰寖鍥�",
+            prop: "valueArea",
           },
         ]
       },
@@ -359,90 +674,14 @@
           bds: "娴嬭瘯涓�",
           shiyong: "娴嬭瘯涓�"
         },
-        {
-          bds: "娴嬭瘯浜�",
-          shiyong: "娴嬭瘯浜�"
-        },
-        {
-          bds: "娴嬭瘯浜�",
-          shiyong: "娴嬭瘯浜�"
-        },
-        {
-          bds: "娴嬭瘯浜�",
-          shiyong: "娴嬭瘯浜�"
-        },
-        {
-          bds: "娴嬭瘯浜�",
-          shiyong: "娴嬭瘯浜�"
-        },
-        {
-          bds: "娴嬭瘯浜�",
-          shiyong: "娴嬭瘯浜�"
-        },
-        {
-          bds: "娴嬭瘯浜�",
-          shiyong: "娴嬭瘯浜�"
-        },
-        {
-          bds: "娴嬭瘯浜�",
-          shiyong: "娴嬭瘯浜�"
-        },
-        {
-          bds: "娴嬭瘯浜�",
-          shiyong: "娴嬭瘯浜�"
-        },
-        {
-          bds: "娴嬭瘯浜�",
-          shiyong: "娴嬭瘯浜�"
-        },
-        {
-          bds: "娴嬭瘯浜�",
-          shiyong: "娴嬭瘯浜�"
-        },
-        {
-          bds: "娴嬭瘯浜�",
-          shiyong: "娴嬭瘯浜�"
-        },
-        {
-          bds: "娴嬭瘯浜�",
-          shiyong: "娴嬭瘯浜�"
-        },
-        {
-          bds: "娴嬭瘯浜�",
-          shiyong: "娴嬭瘯浜�"
-        }
       ],
       // 鏂板涓氬姟绫诲瀷
-      businessData: [
-        {
-          id: "娴嬭瘯涓�",
-          name: "娴嬭瘯涓�",
-          attributeLength: "娴嬭瘯涓�",
-          attrDataType: "娴嬭瘯涓�"
-        },
-        {
-          id: "娴嬭瘯浜�",
-          name: "娴嬭瘯浜�",
-          attributeLength: "娴嬭瘯浜�",
-          attrDataType: "娴嬭瘯浜�"
-        },
-        {
-          id: "娴嬭瘯涓�",
-          name: "娴嬭瘯涓�",
-          attributeLength: "娴嬭瘯涓�",
-          attrDataType: "娴嬭瘯涓�",
-        },
-        {
-          id: "娴嬭瘯涓�",
-          name: "娴嬭瘯涓�",
-          attributeLength: "娴嬭瘯涓�",
-          attrDataType: "娴嬭瘯涓�",
-        }
-      ],
+      businessData: [],
       businessOption: {
         index: true,
         border: true,
-        addBtn: true,
+        addBtn: false,
+        menu:false,
         column: [
           {
             label: "灞炴�ц嫳鏂囧悕绉�",
@@ -522,6 +761,7 @@
         index: true,
         border: true,
         editBtn: false,
+        selection:true,
         labelWidth: 110,
         cellBtn: true,
         cancelBtn: false,
@@ -756,6 +996,36 @@
     console.log(this.ProData)
   },
   methods: {
+    // 浠庝笟鍔$被鍨嬩腑閫夋嫨鏁版嵁
+    busineHandle(){
+      if(this.crudArray.length<1){
+        this.$message.error('璇烽�夋嫨涓�鏉℃ā鏉�')
+      }else {
+        this.addVisible=true;
+        AttrByBtm({'conditionMap[oid]': this.crudOid}).then(res=>{
+          this.businessData=res.data.data;
+          console.log(res.data)
+        })
+      }
+    },
+    // 绾ц仈灞炴��
+    CascadeHandle(){
+      if(this.CrudSelect.length >0){
+        this.CascadeVisible=true;
+        gridCodeClassifyTemplateAttr({'conditionMap[classifyTemplateOid]': this.Formlist[0].oid,
+          'conditionMap[oid_notequal]':this.CrudOid
+        }).then(res=>{
+         this.CascadeData=res.data.data
+        })
+      }else {
+        this.$message.warning('璇烽�夋嫨涓�鏉℃ā鏉垮睘鎬�')
+      }
+    },
+    //琛ㄦ牸鍗曢��
+    selectHandle(selection,row){
+      this.CrudOid=row.oid;
+      this.CrudSelect=selection
+    },
     addsHandler(){
 
     },
diff --git a/Source/UBCS-WEB/src/components/Tree/classifyTreeform.vue b/Source/UBCS-WEB/src/components/Tree/classifyTreeform.vue
index 5ff1791..e0a2f86 100644
--- a/Source/UBCS-WEB/src/components/Tree/classifyTreeform.vue
+++ b/Source/UBCS-WEB/src/components/Tree/classifyTreeform.vue
@@ -17,6 +17,7 @@
       option: {
         submitBtn:false,
         emptyBtn:false,
+
         column: [
           {
             label: '涓婚搴�/鍒嗙被缂栧彿',
diff --git a/Source/UBCS-WEB/src/components/Tree/classifyTrees.vue b/Source/UBCS-WEB/src/components/Tree/classifyTrees.vue
index 71747d3..13cd051 100644
--- a/Source/UBCS-WEB/src/components/Tree/classifyTrees.vue
+++ b/Source/UBCS-WEB/src/components/Tree/classifyTrees.vue
@@ -74,6 +74,7 @@
                           @row-del="CrudRowDel"
                           @row-update="CrudRowUpdata"
                           :before-close="beforeClose"
+                          @select="selectHandle"
                >
             <template slot="menuLeft">
               <el-button plain size="small" type="primary" @click="FindFormVisible = true;">鏌ヨ</el-button>
@@ -168,7 +169,7 @@
           </avue-crud>
 
           </basic-container>
-          <templatePro :ProData="this.ProData"></templatePro>
+          <templatePro :ProData="this.ProData" :crudOid="this.crudOid" :crudArray="this.crudArray" :Formlist="this.Formlist"></templatePro>
         </span>
       </basic-container>
     </el-main>
@@ -202,9 +203,44 @@
   //浣跨敤inject鎺ユ敹鍙傛暟
   //Treeoption宸︿晶鏍戞柊澧炶〃鍗曢」 Treedata宸︿晶鏍戣妭鐐� 閰嶇疆椤� crudTreeOption鍙充晶琛ㄦ牸閰嶇疆椤� crudTreeData鍙充晶琛ㄦ牸鏄剧ず鍐呭
   //Treeform鍙充晶琛ㄥ崟閰嶇疆椤�
-  inject: ['crudTreeOption', "crudTreeData"],
+  inject: [, "crudTreeData"],
   data() {
     return {
+      //琛ㄦ牸option閰嶇疆椤�
+      crudTreeOption: {
+        index: true,
+        border: true,
+        height:180,
+        selection:true,
+        addBtn:this.addFlag,
+        column: [
+          {
+            label: "妯℃澘缂栧彿",
+            prop: "id"
+          },
+          {
+            label:"妯℃澘鍚嶇О",
+            prop:"name"
+          },
+          {
+            label: "妯℃澘鎻忚堪",
+            prop:"description"
+          },
+          {
+            label:"鐗堟湰鍙�",
+            prop:"revisionSeq"
+          },
+          {
+            label:"鐘舵��",
+            prop:"lcStatusText"
+          }
+        ]
+      },
+      addFlag:false,
+      // 琛ㄦ牸褰撳墠琛宨d
+      crudOid:"",
+      //琛ㄦ牸褰撳墠閫夋嫨鏁扮粍
+      crudArray:[],
       //妯℃澘灞炴�у睍绀哄唴瀹�
       ProData: [],
       //鍥炶溅閿悳绱㈢粦瀹氬��
@@ -399,6 +435,11 @@
     this.getAttr();
   },
   methods: {
+    //琛屽崟閫変簨浠�
+    selectHandle(selection,row){
+      this.crudOid=row.oid
+      this.crudArray=selection
+    },
     //鍒嗙被鏍戞暟鎹鐞�
     getAttr() {
       getAtrrList().then(res => {
@@ -607,19 +648,20 @@
               return item.codeclassifyoid == this.nodeClickList.oid
             }
           })
-          gridCodeClassifyTemplateAttr({'conditionMap[classifyTemplateOid]': this.Formlist[0].oid}).then(res => {
-            this.ProData = res.data.data
-            console.log(this.ProData)
-          }).catch(res => {
-            this.$message.error(res)
-          })
+          if(this.Formlist.length >0){
+            gridCodeClassifyTemplateAttr({'conditionMap[classifyTemplateOid]': this.Formlist[0].oid}).then(res => {
+              this.ProData = res.data.data;
+              console.log(this.ProData)
+            }).catch(res => {
+              this.$message.error(res)
+            })
+          }
         }).catch(res => {
           console.log(res)
         })
         //  鍩烘湰淇℃伅琛ㄥ崟鏁版嵁
         await getObjectByOid(this.nodeClickList.oid).then(res => {
-          this.TreeList = res.data.data
-          // eslint-disable-next-line no-const-assig
+          this.TreeList = res.data.data;
         }).catch(res => {
           this.$message.error(res)
         })
diff --git a/Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue b/Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue
index dc5648d..2bfd2cc 100644
--- a/Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue
+++ b/Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue
@@ -312,9 +312,9 @@
                     :show-header="false"
                     style="width: 100%"
                   >
-                    <el-table-column prop="formula" width="40">
+                    <el-table-column prop="formula" width="120">
                     </el-table-column>
-                    <el-table-column prop="desc" width="100"> </el-table-column>
+                    <el-table-column prop="desc" width="200"> </el-table-column>
                   </el-table>
                 </el-tab-pane>
                 <el-tab-pane label="绯荤粺鍙橀噺" name="second">
@@ -324,9 +324,9 @@
                     :show-header="false"
                     style="width: 100%"
                   >
-                    <el-table-column prop="formula" width="150">
+                    <el-table-column prop="formula" width="200">
                     </el-table-column>
-                    <el-table-column prop="desc" width="150"> </el-table-column>
+                    <el-table-column prop="desc" width="200"> </el-table-column>
                   </el-table>
                 </el-tab-pane>
               </el-tabs>
@@ -338,7 +338,7 @@
 
   </el-dialog>
 </template>
-  
+
   <script>
 export default {
   name: "formulaEditor",
@@ -675,14 +675,14 @@
       }
       //鍏紡鍐呭鍥炴樉
       // 瑙﹀彂update:data灏嗗瓙缁勪欢鍊间紶閫掔粰鐖剁粍浠�
-      this.$emit('updateFormulaContent', this.formulaContent) 
-      this.isShowformulaEdit = false;  
+      this.$emit('updateFormulaContent', this.formulaContent)
+      this.isShowformulaEdit = false;
     },
 
   },
 };
 </script>
-  
+
 <style scoped>
 
   .formula-box-card >>> .el-card__body {
@@ -690,7 +690,7 @@
     height: 85%;
     width: 100%;
   }
-  
+
   .formula-editor-total {
     /* margin-top: 3px; */
     height: 100%;
@@ -718,7 +718,7 @@
     height: auto;
     justify-content: space-between;
     align-items: center;
-	}    
+	}
 
   .formula-editor-btn-sm {
     width: 4.5vw;
@@ -732,4 +732,3 @@
   }
 
 </style>
-  
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/views/MasterData/items.vue b/Source/UBCS-WEB/src/views/MasterData/items.vue
index 02ff88b..33241d3 100644
--- a/Source/UBCS-WEB/src/views/MasterData/items.vue
+++ b/Source/UBCS-WEB/src/views/MasterData/items.vue
@@ -9,7 +9,8 @@
                        :currentPage="this.currentPage"
                        :templateOid="this.templateOid"
                        @tableDataArray="tableDataArrays"
-
+                       @tableHeadDataFateher="tableHeadDatas"
+                       @total="totals"
                         ></master-tree>
         </basic-container>
       </el-aside>
@@ -22,6 +23,8 @@
                  @currentPage="currentPages"
                  @templateOid="templateOids"
                  :tableDataArray="tableDataArray"
+                 :total="this.total"
+                 :tableHeadDataFateher="this.tableHeadDataFateher"
       ></TableCrud>
       </el-main>
     </el-container>
@@ -44,7 +47,9 @@
       codeClassifyOid:"",
       coderuleoid:"",
       templateOid:"",
-      tableDataArray:[]
+      tableDataArray:[],
+      tableHeadDataFateher:[],
+      total:""
     }
   },
   created() {
@@ -68,6 +73,12 @@
     },
     tableDataArrays(val){
       this.tableDataArray=val
+    },
+    totals(val){
+      this.total=val
+    },
+    tableHeadDatas(val){
+      this.tableHeadDataFateher=val
     }
   }
 }
diff --git a/Source/UBCS-WEB/src/views/integration/applicationForm.vue b/Source/UBCS-WEB/src/views/integration/applicationForm.vue
index 7a3c48b..db577fa 100644
--- a/Source/UBCS-WEB/src/views/integration/applicationForm.vue
+++ b/Source/UBCS-WEB/src/views/integration/applicationForm.vue
@@ -2,7 +2,8 @@
     <basic-container>
         <avue-crud :table-loading="loading" :data="data" :option="option" :search.sync="searchParam" :page.sync="page"
             ref="crud" @refresh-change="getDataList" @search-change="handleSearch" @search-reset="handleReset"
-            @size-change="handleSizePage" @current-change="handleCurrentPage" @on-load="getDataList">
+            @size-change="handleSizePage" @current-change="handleCurrentPage" @on-load="getDataList"
+            @selection-change="selectionChange" @row-click="handleRowClick">
             <template slot="menuLeft">
                 <el-button icon="el-icon-document" size="small" type="primary" @click="handleStatus">闆嗗洟鐢宠鐘舵��
                 </el-button>
@@ -12,7 +13,7 @@
 </template>
 
 <script>
-import { getList } from '@/api/integration/application.js'
+import { getList, queryApplyStat } from '@/api/integration/application.js'
 import { dateFormat } from '@/util/date.js'
 export default {
     data() {
@@ -25,6 +26,7 @@
                 total: 0
             },
             searchParam: {},
+            stateParam: {},
             option: {
                 height: "auto",
                 index: true,
@@ -33,7 +35,8 @@
                 columnBtn: false,
                 searchMenuSpan: 8,
                 highlightCurrentRow: true,
-                menu:false,
+                menu: false,
+                selection: true,
                 column: [
                     {
                         label: '鐢宠鍗曞彿',
@@ -77,9 +80,6 @@
                         prop: 'lastModifyTime',
                         type: 'datetime',
                         search: true,
-                        formatter: () => {
-
-                        }
                     }, {
                         label: '杩斿洖鏍囪瘑',
                         width: 100,
@@ -100,8 +100,20 @@
         }
     },
     methods: {
-        handleStatus() {
-
+        async handleStatus() {
+            const { oids } = this.stateParam
+            if (this.$utilFunc.isEmpty(oids)) {
+                this.$message({
+                    type: "error",
+                    message: "璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�!"
+                })
+            } else {
+                console.log(this.stateParam)
+                const response = await queryApplyStat(this.stateParam)
+                if (response.status === 200) {
+                    console.log(response)
+                }
+            }
         },
         async getDataList() {
             this.loading = true
@@ -140,7 +152,19 @@
             this.page.currentPage = 1
             this.getDataList()
             done()
-        }
+        },
+        selectionChange(list) {
+            console.log(list)
+            let newData = list.map(item => {
+                const { dataOid } = item
+                return dataOid
+            })
+            this.stateParam = { oids: newData.toString() }
+            console.log(newData)
+        },
+        handleRowClick(row) {
+            this.$refs.crud.toggleRowSelection(row, true)
+        },
     }
 }
 </script>
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/views/integration/systemInfo.vue b/Source/UBCS-WEB/src/views/integration/systemInfo.vue
new file mode 100644
index 0000000..f1f2b78
--- /dev/null
+++ b/Source/UBCS-WEB/src/views/integration/systemInfo.vue
@@ -0,0 +1,224 @@
+<template>
+    <basic-container>
+        <avue-crud ref="crud" :table-loading="loading" :data="data" :option="option" :page.sync="page" :search.sync="search"
+            @on-load="getDataList" @row-save="handleSave" @row-del="handleDelete" @row-update="handleEdit"
+            @refresh-change="handleRefresh" @size-change="handleSizePage" @current-change="handleCurrentPage"
+            @selection-change="selectionChange" @row-click="handleRowClick">
+            <template slot="menuLeft">
+                <el-button icon="el-icon-search" size="small" type="primary" @click="handleStatus">鏌� 璇�
+                </el-button>
+                <el-button icon="el-icon-delete" size="small" type="danger" @click="handleDeleteByIds">鍒� 闄�
+                </el-button>
+            </template>
+            <template slot="search" slot-scope="{row,size}">
+                <el-select v-model="selectValue" size="small" @change="handleSelect">
+                    <el-option v-for="item in selectOption" :key="item.value" :label="item.label" :value="item.value">
+                    </el-option>
+                </el-select>
+                <el-input :placeholder="`璇疯緭鍏�${selectValue === 'id' ? '绯荤粺缂栧彿' : '绯荤粺鍚嶇О'}骞舵寜鍥炶溅鏌ヨ`" :size="size"
+                    style="width:300px;margin-left: 10px;" v-model="search[selectValue]" clearable
+                    @keyup.enter.native="handleEnter" @clear="handleClear"></el-input>
+            </template>
+        </avue-crud>
+    </basic-container>
+</template>
+<script>
+import { getSysInfoList, sysInfoAdd, sysInfoEdit, sysInfoDel } from '@/api/integration/sysInfo.js'
+export default {
+    data() {
+        return {
+            loading: false,
+            page: {
+                currentPage: 1,
+                pageSize: 10,
+                total: 0
+            },
+            selectOption: [{
+                value: 'id',
+                label: '绯荤粺缂栧彿'
+            }, {
+                value: 'name',
+                label: '绯荤粺鍚嶇О'
+            }],
+            selectValue: 'id',
+            search: {},
+            delIds: [],
+            data: [],
+            option: {
+                height: "auto",
+                border: true,
+                align: 'center',
+                menuAlign: 'center',
+                index: true,
+                searchMenuSpan: 8,
+                searchBtn: false,
+                emptyBtn: false,
+                columnBtn: false,
+                defaultSort: {
+                    prop: 'id,name',
+                    order: 'descending'
+                },
+                selection: true,
+                column: [
+                    {
+                        label: '绯荤粺缂栧彿',
+                        prop: 'id',
+                        sortable: true,
+                        rules: [{
+                            required: true,
+                            message: '绯荤粺缂栧彿涓嶈兘涓虹┖',
+                            trigger: 'blur'
+                        }]
+                    }, {
+                        label: '绯荤粺鍚嶇О',
+                        prop: 'name',
+                        sortable: true,
+                        rules: [{
+                            required: true,
+                            message: '绯荤粺鍚嶇О涓嶈兘涓虹┖',
+                            trigger: 'blur'
+                        }]
+                    },
+                    {
+                        label: '绯荤粺鎻忚堪',
+                        prop: 'description',
+                        type: 'textarea'
+                    }
+                ]
+            },
+        }
+    },
+    methods: {
+        // 鑾峰彇鍒楄〃
+        async getDataList() {
+            this.loading = true
+            console.log(this.search)
+            const { pageSize, currentPage } = this.page
+            let param = { size: pageSize, current: currentPage }
+            const response = await getSysInfoList({ ...param, ...this.search })
+            if (response.status === 200) {
+                console.log(response)
+                this.loading = false
+                const data = response.data.data
+                this.data = data.records
+                this.page.total = data.total
+            } else this.loading = false
+        },
+        // 鏂板
+        async handleSave(row, done, loading) {
+            const response = await sysInfoAdd(row)
+            if (response.status === 200) {
+                loading()
+                this.$message({
+                    type: 'success',
+                    message: '鏂板鏁版嵁鎴愬姛锛�'
+                })
+                done()
+                this.$refs.crud.refreshTable()
+                this.getDataList()
+            }
+        },
+        // 缂栬緫
+        async handleEdit(row, index, done, loading) {
+            console.log(row)
+            const { oid, id, name, description } = row
+            const response = await sysInfoEdit({ oid, id, name, description })
+            if (response.status === 200) {
+                loading()
+                this.$message({
+                    type: 'success',
+                    message: '淇敼鏁版嵁鎴愬姛锛�'
+                })
+                done()
+                this.getDataList()
+            }
+        },
+        // 鍒犻櫎鍗曟潯
+        handleDelete(row) {
+            const { oid } = row
+            this.deleteSysInfo({ oids: oid })
+        },
+        // 澶氭潯鏁版嵁鍒犻櫎
+        handleDeleteByIds() {
+            const { oids } = this.delIds
+            if (this.$utilFunc.isEmpty(oids)) {
+                this.$message({
+                    type: "error",
+                    message: "璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�!"
+                })
+            } else {
+                this.deleteSysInfo(this.delIds)
+            }
+        },
+        // 鍒犻櫎鎺ュ彛
+        deleteSysInfo(param) {
+            this.$confirm('鏄惁纭畾鍒犻櫎閫夋嫨鐨勯泦鎴愮郴缁�?', '鎻愮ず', {
+                confirmButtonText: '纭畾',
+                cancelButtonText: '鍙栨秷',
+                type: 'warning'
+            }).then(async () => {
+                const response = await sysInfoDel(param)
+                if (response.status === 200) {
+                    console.log(response)
+                    this.$message({
+                        type: 'success',
+                        message: '鍒犻櫎鎴愬姛!'
+                    });
+                    this.getDataList()
+                }
+            })
+        },
+        // 閫夋嫨妗嗗唴瀹归�夋嫨鍚�
+        handleSelect(event) {
+            this.selectValue = event
+            if (this.selectValue === 'id') {
+                this.search['name'] = ''
+                delete this.search['name']
+            } else {
+                this.search['id'] = ''
+                delete this.search['id']
+            }
+        },
+        // enter鎼滅储
+        handleEnter() {
+            if (this.search[this.selectValue] === '') return
+            else this.getDataList()
+
+        },
+        // 杈撳叆妗嗘竻绌�
+        handleClear() {
+            this.search = {}
+            this.getDataList()
+        },
+        // 鍒锋柊鎸夐挳
+        handleRefresh() {
+            this.getDataList()
+        },
+        handleSizePage(event) {
+            this.page.pageSize = event
+        },
+        handleCurrentPage(event) {
+            this.page.currentPage = event
+        },
+        // 鐐瑰嚮閫夋嫨
+        handleRowClick(row) {
+            this.$refs.crud.toggleRowSelection(row, true)
+        },
+        // 澶氶��
+        selectionChange(list) {
+            console.log(list)
+            let newData = list.map(item => {
+                const { oid } = item
+                return oid
+            })
+            this.delIds = { oids: newData.toString() }
+            console.log(this.delIds)
+        },
+    }
+}
+</script>
+<style lang="scss" scoped>
+::v-deep(.avue-crud .el-select) {
+    width: 100px !important;
+}
+</style>
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/views/modeling/Business.vue b/Source/UBCS-WEB/src/views/modeling/Business.vue
index 7b12feb..807155a 100644
--- a/Source/UBCS-WEB/src/views/modeling/Business.vue
+++ b/Source/UBCS-WEB/src/views/modeling/Business.vue
@@ -258,10 +258,7 @@
             }
           ]
         },
-        data: [{
-          tableName: '1',
-          description: '2'
-        }]
+        data: [],
       }
     }
   },
@@ -338,7 +335,8 @@
       this.ifRefreshBtmAddRefresh();
     },
     businessEdit(){
-      this.$refs.btmAdd.btmType = this.obj;
+      var json = JSON.stringify(this.obj);
+      this.$refs.btmAdd.btmType = JSON.parse(json);
       this.$refs.btmAdd.showSubmitDialog = true;
       this.ifRefreshBtmAddRefresh();
     },
diff --git a/Source/UBCS-WEB/src/views/modeling/LinkType.vue b/Source/UBCS-WEB/src/views/modeling/LinkType.vue
index eec03bf..afadda5 100644
--- a/Source/UBCS-WEB/src/views/modeling/LinkType.vue
+++ b/Source/UBCS-WEB/src/views/modeling/LinkType.vue
@@ -156,7 +156,9 @@
     data() {
         return {
             addOption: {
-                linkType: {},
+                linkType: {
+                    attributes:[]
+                },
             },
             domain: null,
             domainOptions: [],
@@ -240,13 +242,20 @@
         },
         // 娣诲姞鎸夐挳鐐瑰嚮浜嬩欢
         linkTypeAdd() {
+            this.$refs.linkAdd.linkType = {};
             this.$refs.linkAdd.showSubmitDialog = true;
         },
         // 缂栬緫鎸夐挳鐐瑰嚮浜嬩欢
         linkTypeEdit() {
-            this.addOption.linkType = this.obj;
+            var linktype = this.obj;
+            linktype.fromBtmValues = this.obj.fromBtmTypes;
+            linktype.toBtmValues = this.obj.toBtmTypes;
+            linktype.attributes = this.obj.attributes;
+            var json = JSON.stringify(linktype);
+            this.addOption.linkType = JSON.parse(json);
             this.$refs.linkAdd.linkType = this.addOption.linkType;
             this.$refs.linkAdd.showSubmitDialog = true;
+            console.log(this.obj);
         },
         // 浠庡凡鏈変腑鑾峰彇鎸夐挳鐐瑰嚮浜嬩欢
         selectFromTable() {
diff --git a/Source/UBCS-WEB/src/views/modeling/LinkTypeAdd.vue b/Source/UBCS-WEB/src/views/modeling/LinkTypeAdd.vue
index 8c7753a..4f1ea88 100644
--- a/Source/UBCS-WEB/src/views/modeling/LinkTypeAdd.vue
+++ b/Source/UBCS-WEB/src/views/modeling/LinkTypeAdd.vue
@@ -20,7 +20,7 @@
             </el-form-item>
             <el-form-item label="From绔被鍨�" label-width="100px">
                 <!-- from绔笟鍔$被鍨嬮�夋嫨 -->
-                <el-select v-model="fromBtmValues" :value="fromBtmTypes" value-key="oid" placeholder="璇烽�夋嫨From绔被鍨�" filterable multiple collapse-tags @change="fromSelectChange">
+                <el-select v-model="linkType.fromBtmValues" :value="linkType.fromBtmTypes" value-key="oid" placeholder="璇烽�夋嫨From绔被鍨�" filterable multiple collapse-tags @change="fromSelectChange">
                     <el-option-group v-for="domain in domainList" :key="domain.id" :label="domain.name">
                         <el-option v-for="item in domain.childList" :key="item.oid" :label="item.id + item.name"
                             :value="item">
@@ -30,7 +30,7 @@
             </el-form-item>
             <el-form-item label="To绔被鍨�" label-width="100px">
                 <!-- to绔笟鍔$被鍨嬮�夋嫨 -->
-                <el-select v-model="toBtmValues" :value="toBtmTypes" value-key="oid" placeholder="璇烽�夋嫨To绔被鍨�" filterable multiple collapse-tags @change="toSelectChange">
+                <el-select v-model="linkType.toBtmValues" :value="linkType.toBtmTypes" value-key="oid" placeholder="璇烽�夋嫨To绔被鍨�" filterable multiple collapse-tags @change="toSelectChange">
                     <el-option-group v-for="domain in domainList" :key="domain.id" :label="domain.name">
                         <el-option v-for="item in domain.childList" :key="item.oid" :label="item.id + item.name"
                             :value="item">
@@ -331,6 +331,7 @@
             row.$cellEdit = false;
         },
         fromSelectChange(dataList){
+            console.log(dataList);
             this.linkType.fromBtmTypes = [];
             var fromBtmName = "";
             var fromBtmType = "";
@@ -341,6 +342,7 @@
             })
             this.linkType.fromBtmTypeName = fromBtmName;
             this.linkType.fromBtmType = fromBtmType;
+            console.log(this.linkType);
         },
         toSelectChange(dataList){
             console.log(dataList);
diff --git a/Source/UBCS-WEB/src/views/modeling/Version.vue b/Source/UBCS-WEB/src/views/modeling/Version.vue
index 3941b86..5898873 100644
--- a/Source/UBCS-WEB/src/views/modeling/Version.vue
+++ b/Source/UBCS-WEB/src/views/modeling/Version.vue
@@ -11,36 +11,41 @@
                @row-del="rowDel"
                @refresh-change="refreshChange"
                @search-reset="searchChange"
-               @search-change="searchChange">
+               @search-change="searchChange"
+               @row-click="rowClick">
       <template slot="menuLeft">
         <el-tooltip class="item" effect="dark" content="鏌ユ壘鐗堟湰瑙勫垯浣跨敤鑼冨洿" placement="top">
           <el-button size="small"
                      plain
                      type="primary"
                      icon="el-icon-zoom-in"
-                     @click="handleSearch">鏌ョ湅浣跨敤鑼冨洿
+                     @click="applyRangeSearch">鏌ョ湅浣跨敤鑼冨洿
           </el-button>
         </el-tooltip>
-      </template>>
+      </template>
+      <template slot="radio"
+                  slot-scope="{row}">
+                      <el-radio v-model="selectRow"
+                          :label="row.$index">&nbsp;
+                      </el-radio>
+                </template>
     </avue-crud>
-    <el-dialog title="鏌ョ湅浣跨敤鑼冨洿"
-               append-to-body
-               :visible.sync="packageSearchBox"
-               width="1200px">
-      <versionpackage></versionpackage>
-    </el-dialog>
+    <versionpackage :rangeData="applyRangeData" ref="applyRange"></versionpackage>
   </basic-container>
 
 </template>
 
 <script>
-import { getPage,add,update,remove } from '../../api/omd/revisionRule';
+import { getPage,add,update,remove,getAppayRange } from '../../api/omd/revisionRule';
 export default {
   name: "Version",
   data(){
     return {
       //鏌ョ湅浣跨敤鑼冨洿
       packageSearchBox:false,
+      // 鐐瑰嚮鏁版嵁
+      selectRow: '',
+      selectRowData: {},
       //鍒嗛〉鏁版嵁
       page: {
         pageSize: 10,
@@ -56,7 +61,14 @@
         border: true,
         index: true,
         searchMenuSpan:5,
+        highlightCurrentRow: true,
+        stripe:true,
         column:[
+          {
+            label: '',
+            prop: 'radio',
+            width: 120
+          },
           {
             label:'鑻辨枃鍚嶇О',
             prop: 'id'
@@ -92,12 +104,31 @@
             type:"textarea"
           }
         ]
-      }
+      },
+      applyRangeData: []
     }
   },
   methods:{
-    handleSearch(){
-      this.packageSearchBox=true
+    // 琛岀偣鍑�
+    rowClick(row){
+      this.selectRow = row.$index;
+      this.selectRowData = row;
+    },
+    // 鏌ョ湅搴旂敤鑼冨洿
+    applyRangeSearch(){
+      if (!this.selectRow && this.selectRow != 0){
+        console.log(this.selectRow);
+          this.$message({
+            type:"warning",
+            message: "璇峰厛閫夋嫨灞炴��"
+          })
+        }
+      getAppayRange(this.selectRowData.id).then(res => {
+         this.applyRangeData = res.data.data;
+         this.$refs.applyRange.rangeData = this.applyRangeData;
+         this.$refs.applyRange.showDialog = true;
+      })
+      // this.packageSearchBox=true
     },
     getList() {
       this.loading = true;
diff --git a/Source/UBCS-WEB/src/views/modeling/Versionpackage.vue b/Source/UBCS-WEB/src/views/modeling/Versionpackage.vue
index 8ba8e45..c068fd7 100644
--- a/Source/UBCS-WEB/src/views/modeling/Versionpackage.vue
+++ b/Source/UBCS-WEB/src/views/modeling/Versionpackage.vue
@@ -1,103 +1,69 @@
 <template>
-  <basic-container>
-    <avue-crud ref="crud"
-               v-model="form"
-               :data="data"
-               :option="option"
-               @on-load="getList"
-               @refresh-change="refreshChange"
-               @search-change="searchChange"
-    >
-    </avue-crud>
-  </basic-container>
+  <el-dialog title="鏌ョ湅搴旂敤鑼冨洿" :visible.sync="showDialog" append-to-body @close="closeDialog" width="65%"
+    style="height: 115vh;">
+    <basic-container>
+      <avue-crud ref="crud" :data="rangeData" :option="option">
+      </avue-crud>
+    </basic-container>
+  </el-dialog>
 </template>
 
 <script>
 export default {
   name: "Versionpackage.vue",
-  data(){
-    return {
+  props: {
+    rangeData: {
+      type: Array
+    },
 
-      data:[
-        {
-          name:"娴嬭瘯1",
-          source:"娴嬭瘯1",
-          shows:"娴嬭瘯1"
-        },
-        {
-          name:"娴嬭瘯2",
-          source:"娴嬭瘯2",
-          shows:"娴嬭瘯2"
-        },
-        {
-          name:"娴嬭瘯3",
-          source:"娴嬭瘯3",
-          shows:"娴嬭瘯3"
-        },
-        {
-          name:"娴嬭瘯4",
-          source:"娴嬭瘯4",
-          shows:"娴嬭瘯4"
-        },
-      ],
-      form:{},
-      option:{
-        height:300,
-        headerAlign:'center',
+  },
+  data() {
+    return {
+      showDialog: false,
+      option: {
+        height: 300,
+        headerAlign: 'center',
         align: 'center',
         border: true,
         menu: false,
         index: true,
-        searchMenuSpan:6,
-        addBtn:false,
-        indexFixed:false,
-        menuFixed:false,
-        column:[
-          {
-            label:"鍚嶇О",
-            prop:"name",
-          },
-          {
-            label:"鏉ユ簮",
-            prop:"source",
-            search:true
-          },
-          {
-            label:"璇存槑",
-            prop:"shows",
-          },
+        addBtn: false,
+        indexFixed: false,
+        menuFixed: false,
+        header: false,
+        highlightCurrentRow: true,
+        column: [{
+          label: '鑻辨枃鍚嶇О',
+          prop: 'id'
+        },
+        {
+          label: '涓枃鍚嶇О',
+          prop: 'name',
+        },
+        {
+          label: '鎵�灞為鍩�',
+          prop: 'domainText',
+        },{
+          label: '鏁版嵁琛ㄥ悕',
+          prop: 'tableName',
+          width: 200
+        },
+        {
+          label: '璇存槑',
+          prop: 'descirption',
+        },
         ]
       }
     }
   },
-  methods:{
-    // getList () {
-    //   this.loading = true;
-    //   const data = Object.assign({
-    //     pageNum: this.page.currentPage,
-    //     pageSize: this.page.pageSize,
-    //   }, this.params)
-    //   this.data = [];
-    //   getList(data).then(res => {
-    //     const data = res.data.data
-    //     this.loading = false;
-    //     this.page.total = data.total;
-    //     const result = data.list;
-    //     this.data = result;
-    //   })
-    // },
-    //鎼滅储
-    searchChange(params, done) {
-      if (done) done();
-      this.params = params;
-      this.page.currentPage = 1;
-      this.getList();
-      this.$message.success('鎼滅储鎴愬姛')
+  methods: {
+    closeDialog() { 
+      this.rangeData = [];
+      this.showDialog = false;
     },
   }
 }
 </script>
 
 <style scoped>
-
 </style>
diff --git a/Source/UBCS-WEB/src/views/modeling/classifyTree.vue b/Source/UBCS-WEB/src/views/modeling/classifyTree.vue
index d3596ee..621ad5b 100644
--- a/Source/UBCS-WEB/src/views/modeling/classifyTree.vue
+++ b/Source/UBCS-WEB/src/views/modeling/classifyTree.vue
@@ -1,6 +1,5 @@
 <template>
-  <classifyTrees :crudData="crudTreeData" :crudoption="crudTreeOption" :data="Treedata"
-                 :option="Treeoption"
+  <classifyTrees :crudData="crudTreeData"
   ></classifyTrees>
 </template>
 
@@ -12,33 +11,6 @@
   //鐖朵紶瀛愭湁闂锛屾殏鏃舵病瑙e喅锛岀敤provide浠f浛鐖朵紶瀛愶紝瀛愪紶鐖惰繕鏄敤$emit浼犻�掞紝娉ㄦ剰锛侊紒锛佸叾浠栫粍浠朵笉鑳戒娇鐢ㄥ悓鏍风殑绫诲悕鍚﹀垯浼氭姤閿欍��
   provide() {
     return {
-      crudTreeOption: {
-        index: true,
-        border: true,
-        height:180,
-        column: [
-          {
-            label: "妯℃澘缂栧彿",
-            prop: "id"
-          },
-          {
-            label:"妯℃澘鍚嶇О",
-            prop:"name"
-          },
-          {
-            label: "妯℃澘鎻忚堪",
-            prop:"description"
-          },
-          {
-            label:"鐗堟湰鍙�",
-            prop:"revisionSeq"
-          },
-          {
-            label:"鐘舵��",
-            prop:"lcStatusText"
-          }
-        ]
-      },
       crudTreeData: this.crudTreeData,
     }
 
diff --git a/Source/UBCS-WEB/src/views/modeling/original.vue b/Source/UBCS-WEB/src/views/modeling/original.vue
index 9757875..eaf8f50 100644
--- a/Source/UBCS-WEB/src/views/modeling/original.vue
+++ b/Source/UBCS-WEB/src/views/modeling/original.vue
@@ -2,101 +2,90 @@
   <el-container>
     <el-main>
       <basic-container>
-        <avue-crud v-model="form" 
-          ref="crud" 
-          :option="option" 
-          :data="data" 
-          @on-load="onLoad" 
-          :page.sync="page"
-          @refresh-change="refreshChange" 
-          @row-click="rowClick">
-               <template slot="radio"
-                  slot-scope="{row}">
-                      <el-radio v-model="selectRow"
-                          :label="row.$index">&nbsp;
-                      </el-radio>
-                </template>
-          <template slot="menu">
-             <el-button icon="el-icon-edit" size="small" type="text" @click="updateSave">缂栬緫</el-button>
-             <el-button icon="el-icon-delete" size="small" type="text" @click="deleteSave">鍒犻櫎</el-button>
+        <avue-crud v-model="form" ref="crud" :option="option" :data="data" @on-load="onLoad" :page.sync="page"
+          @refresh-change="refreshChange" @row-click="rowClick">
+          <template slot="radio" slot-scope="{row}">
+            <el-radio v-model="selectRow" :label="row.$index">&nbsp;
+            </el-radio>
           </template>
-         <template slot="menuLeft">
-            <el-button size="small"
-              type="primary"
-              icon="el-icon-plus"
-              @click="addSave">鏂�&nbsp;&nbsp;澧�
+          <template slot="menu">
+            <el-button icon="el-icon-edit" size="small" type="text" @click="updateSave">缂栬緫</el-button>
+            <el-button icon="el-icon-delete" size="small" type="text" @click="deleteSave">鍒犻櫎</el-button>
+          </template>
+          <template slot="menuLeft">
+            <el-button size="small" type="primary" icon="el-icon-plus" @click="addSave">鏂�&nbsp;&nbsp;澧�
             </el-button>
-            <el-button size="small"
-                       plain
-                       type="primary"
-                       icon="el-icon-zoom-in"
-                       @click="applyRangeOpen">鏌ョ湅浣跨敤鑼冨洿
+            <el-button size="small" plain type="primary" icon="el-icon-zoom-in" @click="applyRangeOpen">鏌ョ湅浣跨敤鑼冨洿
             </el-button>
+          </template>
+          <template slot="typeValue" slot-scope="{row}">
+            <el-tag>{{ row.typeValue }}</el-tag>
           </template>
         </avue-crud>
-        <el-dialog :visible.sync="applyRange.display" append-to-body :title="applyRange.title" width="600px"
+        <!-- <el-dialog :visible.sync="applyRange.display" append-to-body :title="applyRange.title" width="600px"
         @close="applyRangeClose">
             <avue-crud v-model="applyRange.model" :option="applyRange.option" :data="applyRange.data" class="applyRangeTable"
             ></avue-crud>
-        </el-dialog>
+        </el-dialog> -->
+        <Versionpackage :rangeData="applyRangeData" ref="applyRange"></Versionpackage>
       </basic-container>
     </el-main>
     <el-aside>
       <basic-container class="itemForm">
-            <el-descriptions class="margin-top" :column="1" size="medium" border title="灞炴�ч」">
-              <el-descriptions-item>
-                <template slot="label">
-                  灞炴�х紪鍙�
-                </template>
-                {{ itemForm.itemData.id }}
-              </el-descriptions-item>
-              <el-descriptions-item>
-                <template slot="label">
-                  灞炴�у悕绉�
-                </template>
-                {{ itemForm.itemData.name }}
-              </el-descriptions-item>
-              <el-descriptions-item>
-                <template slot="label">
-                  灞炴�х被鍨�
-                </template>
-                {{ itemForm.itemData.typeValue }}
-              </el-descriptions-item>
-              <el-descriptions-item>
-                <template slot="label">
-                  鏍囩
-                </template>
-                {{ itemForm.itemData.hashtag }}
-              </el-descriptions-item>
-              <el-descriptions-item>
-                <template slot="label">
-                  榛樿鍊�
-                </template>
-                {{ itemForm.itemData.defaultValue }}
-              </el-descriptions-item>
-              <el-descriptions-item>
-                <template slot="label">
-                  鍏佽涓虹┖
-                </template>
-                {{ itemForm.itemData.nullable }}
-              </el-descriptions-item>
-              <el-descriptions-item>
-                <template slot="label">
-                  闀垮害
-                </template>
-                {{ itemForm.itemData.maxLength }}
-              </el-descriptions-item>
-              <el-descriptions-item>
-                <template slot="label">
-                  鎻忚堪
-                </template>
-                {{ itemForm.itemData.description }}
-              </el-descriptions-item>
-            </el-descriptions>
-            <div style="height:15px"></div>
+        <el-descriptions class="margin-top" :column="1" size="medium" border title="灞炴�ч」">
+          <el-descriptions-item>
+            <template slot="label">
+              灞炴�х紪鍙�
+            </template>
+            {{ itemForm.itemData.id }}
+          </el-descriptions-item>
+          <el-descriptions-item>
+            <template slot="label">
+              灞炴�у悕绉�
+            </template>
+            {{ itemForm.itemData.name }}
+          </el-descriptions-item>
+          <el-descriptions-item>
+            <template slot="label">
+              灞炴�х被鍨�
+            </template>
+            {{ itemForm.itemData.typeValue }}
+          </el-descriptions-item>
+          <el-descriptions-item>
+            <template slot="label">
+              鏍囩
+            </template>
+            {{ itemForm.itemData.hashtag }}
+          </el-descriptions-item>
+          <el-descriptions-item>
+            <template slot="label">
+              榛樿鍊�
+            </template>
+            {{ itemForm.itemData.defaultValue }}
+          </el-descriptions-item>
+          <el-descriptions-item>
+            <template slot="label">
+              鍏佽涓虹┖
+            </template>
+            {{ itemForm.itemData.nullable }}
+          </el-descriptions-item>
+          <el-descriptions-item>
+            <template slot="label">
+              闀垮害
+            </template>
+            {{ itemForm.itemData.maxLength }}
+          </el-descriptions-item>
+          <el-descriptions-item>
+            <template slot="label">
+              鎻忚堪
+            </template>
+            {{ itemForm.itemData.description }}
+          </el-descriptions-item>
+        </el-descriptions>
+        <div style="height:15px"></div>
         <el-descriptions class="margin-top" :column="1" size="medium" border title="灞炴�ч厤缃�"></el-descriptions>
         <el-tabs v-model="itemForm.activeName" @tab-click="handleClick" stretch="true" style="height:235px">
-        <el-tab-pane label="鍙傜収" name="referTab">
+          <el-tab-pane label="鍙傜収" name="referTab">
             <el-descriptions class="margin-top" :column="1" size="medium" border>
               <el-descriptions-item>
                 <template slot="label">
@@ -148,173 +137,136 @@
   add,
   update, getPage, getApplyRange
 } from "@/api/omd/OmdAttribute";
+import Versionpackage from "./Versionpackage.vue";
 
 export default {
   name: "original",
   data() {
-    return {  
+    return {
       page: {
         pageSize: 10,
         currentPage: 1,
         total: 100
       },
-      selectRow: '',
+      selectRow: "",
       data: [],
-      form:{},
+      form: {},
       attribute: {
         nullable: true
       },
+      applyRangeData: [],
       option: {
         height: "550px",
-        headerAlign: 'center',
+        headerAlign: "center",
         border: true,
         index: true,
-        rowKey: 'id',
+        rowKey: "id",
         tabs: true,
-        stripe:true,
+        stripe: true,
         indexFixed: false,
         menuWidth: 150,
         highlightCurrentRow: true,
-        addBtn:false,
-        editBtn:false,
-        delBtn:false,
+        addBtn: false,
+        editBtn: false,
+        delBtn: false,
         column: [{
-            label: '閫夋嫨',
-            prop: 'radio',
-            width: 60,
-            hide: false,
-            display: false
-          },
-          {
-            label: '灞炴�х紪鍙�',
-            prop: 'id',
-            align: 'left',
-            display: false,
-            width: 200,
-            required: true
+          label: "閫夋嫨",
+          prop: "radio",
+          width: 60,
+          hide: false,
+          display: false
+        }, {
+          label: "灞炴�х紪鍙�",
+          prop: "id",
+          align: "left",
+          display: false,
+          width: 200,
+          required: true
+        }, {
+          label: "灞炴�у悕绉�",
+          prop: "name",
+          align: "left",
+          display: false
+        }, {
+          label: "鏍囩",
+          prop: "hashtag",
+          // hide: true,
+          display: false
+        }, {
+          label: "鏄惁浣跨敤鏋氫妇",
+          prop: "usingDict",
+          type: "switch",
+          hide: true,
+          labelWidth: 132,
+          display: false,
+          dicData: [{
+            label: "鏄�",
+            value: "true"
           }, {
-            label: '灞炴�у悕绉�',
-            prop: 'name',
-            align: 'left',
-            display: false
-          },
-          {
-            label: '鏍囩',
-            prop: 'hashtag',
-            // hide: true,
-            display: false
-          },
-          {
-            label: '鏄惁浣跨敤鏋氫妇',
-            prop: 'usingDict',
-            type: 'switch',
-            hide: true,
-            labelWidth: 132,
-            display: false,
-            dicData: [{
-              label: '鏄�',
-              value: 'true'
-            }, {
-              label: '鍚�',
-              value: 'false'
-            }]
-          },
-          {
-            label: '灞炴�х被鍨�',
-            prop: 'typeValue',
-            display: false,
-            // hide: true
-          },
-          {
-            label: '榛樿鍊�',
-            prop: 'defaultValue',
-            display: false
-          },
-          {
-            label: '鍏佽涓虹┖',
-            prop: 'nullable',
-            type: 'switch',
-            display: false,
-            hide: true,
-            labelWidth: 132,
-            dicData: [{
-              label: '鍚�',
-              value: 'false'
-            }, {
-              label: '鏄�',
-              value: 'true'
-            }]
-          },
-          {
-            label: "闀垮害",
-            prop: "maxLength",
-            hide: true,
-            display: false
-          },
-          {
-            label: '鎻忚堪',
-            prop: 'description',
-            type: "textarea",
-            display: false
-          },
+            label: "鍚�",
+            value: "false"
+          }]
+        }, {
+          label: "灞炴�х被鍨�",
+          prop: "typeValue",
+          display: false,
+          // hide: true
+        }, {
+          label: "榛樿鍊�",
+          prop: "defaultValue",
+          display: false
+        }, {
+          label: "鍏佽涓虹┖",
+          prop: "nullable",
+          type: "switch",
+          display: false,
+          hide: true,
+          labelWidth: 132,
+          dicData: [{
+            label: "鍚�",
+            value: "false"
+          }, {
+            label: "鏄�",
+            value: "true"
+          }]
+        }, {
+          label: "闀垮害",
+          prop: "maxLength",
+          hide: true,
+          display: false
+        }, {
+          label: "鎻忚堪",
+          prop: "description",
+          type: "textarea",
+          display: false
+        },
         ]
       },
-      applyRange: {
-        model: "",
-        title: "搴旂敤鐨勪笟鍔$被鍨�",
-        option: {
-          height: 360,
-          addBtn: false,
-          refreshBtn: false,
-          columnBtn: false,
-          menu: false,
-          border: true,
-          reserveSelection: true,
-          searchMenuSpan:8,
-          searchShowBtn: false,
-          highlightCurrentRow: true,
-          column: [
-            {
-                label: '涓氬姟绫诲瀷缂栧彿',
-                prop: 'id',
-                align: 'left',
-              },
-              {
-                label: '涓氬姟绫诲瀷鍚嶇О',
-                prop: 'name',
-                align: 'left',
-              },
-          ]
-        },
-        data: [],
-        display: false,
-      },
-      itemForm:{
+      itemForm: {
         itemData: {},
-        activeName: 'referTab',
-        form:{}
+        activeName: "referTab",
+        form: {}
       }
-    }
+    };
   },
   created() {
-    
   },
   methods: {
     refreshChange() {
       this.onLoad(this.pageParent, this.query);
     },
-    addSave(){
+    addSave() {
       this.$refs.originalAdd.showSubmitDialog = true;
       this.$refs.originalAdd.attribute = {};
     },
-    updateSave(){
+    updateSave() {
       this.$refs.originalAdd.showSubmitDialog = true;
       this.$refs.originalAdd.attribute = this.attribute;
     },
-    deleteSave(){
+    deleteSave() {
       remove(this.itemForm.itemData).then(res => {
         this.$message.success("鍒犻櫎鎴愬姛");
-      })
+      });
     },
     onLoad(page, params = {}) {
       this.loading = true;
@@ -323,42 +275,41 @@
         this.page.total = data.total;
         this.data = data.records;
         this.loading = false;
-        this.data = res.data.data.records
+        this.data = res.data.data.records;
         this.itemData = this.data[0];
-      })
+      });
     },
     rowClick(row) {
       this.itemForm.itemData = row;
       this.selectRow = row.$index;
       this.attribute = row;
-    }
-    ,selectBtmType(){
-        this.referType.display = true;
-        this.referType.title = "璇烽�夋嫨" + this.referType.value
     },
-    applyRangeOpen(){
-        if (!this.selectRow){
-          this.$message({
-            type:"warning",
-            message: "璇峰厛閫夋嫨灞炴��"
-          })
-        }
-        var oid = this.data[this.selectRow].oid;
-        getApplyRange(oid).then(res => {
-            this.applyRange.data = res.data.data;
-        })
-        this.applyRange.display = true;
+    selectBtmType() {
+      this.referType.display = true;
+      this.referType.title = "璇烽�夋嫨" + this.referType.value;
     },
-    applyRangeClose(){
-      this.applyRange.data = [];
-      this.applyRange.display = false;
-    }
+    applyRangeOpen() {
+      if (!this.selectRow && this.selectRow != 0) {
+        this.$message({
+          type: "warning",
+          message: "璇峰厛閫夋嫨灞炴��"
+        });
+      }
+      var oid = this.data[this.selectRow].oid;
+      getApplyRange(oid).then(res => {
+        this.applyRangeData = res.data.data;
+        this.$refs.applyRange.rangeData = this.applyRangeData;
+        this.$refs.applyRange.showDialog = true;
+
+      });
+    },
   },
+  components: { Versionpackage }
 }
 </script>
 
 <style lang="scss">
-.applyRangeTable > .el-card:nth-of-type(2) > .el-card__body > .avue-crud__menu{
-    display: none !important;
+.applyRangeTable>.el-card:nth-of-type(2)>.el-card__body>.avue-crud__menu {
+  display: none !important;
 }
 </style>
diff --git a/Source/UBCS-WEB/src/views/modeling/status.vue b/Source/UBCS-WEB/src/views/modeling/status.vue
index b6fac49..4fb492e 100644
--- a/Source/UBCS-WEB/src/views/modeling/status.vue
+++ b/Source/UBCS-WEB/src/views/modeling/status.vue
@@ -63,14 +63,14 @@
               search: true
             },
             {
-              label:"涓枃鍚嶇О",
-              prop:"name",
+              label:'涓枃鍚嶇О',
+              prop:'name',
               search:true,
             },
             {
-              label: "鎻忚堪",
-              prop:"description",
-              type:"textarea"
+              label: '鎻忚堪',
+              prop:'description',
+              type:'textarea'
             }
           ]
         }
@@ -78,7 +78,7 @@
     },
     methods:{
       handleSearch(){
-        this.packageSearchBox=true
+        // this.packageSearchBox=true
       },
       getList() {
         this.loading = true;
diff --git a/Source/UBCS-WEB/vue.config.js b/Source/UBCS-WEB/vue.config.js
index 98c3012..d206271 100644
--- a/Source/UBCS-WEB/vue.config.js
+++ b/Source/UBCS-WEB/vue.config.js
@@ -26,10 +26,10 @@
     proxy: {
       '/api': {
         //鏈湴鏈嶅姟鎺ュ彛鍦板潃
-         target: 'http://localhost:37000',
         //  target: 'http://localhost:37000',
-        //target: 'http://192.168.1.51:37000',
-        //target: 'http://192.168.3.7:37000',
+        //  target: 'http://localhost:37000',
+        // target: 'http://192.168.1.51:37000',
+        target: 'http://192.168.1.46:37000',
         // target: 'http://dev.vci-tech.com:37000',
         // target: 'http://192.168.1.51:37000/',
         //   target: 'http://localhost:37000',
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeResembleRule.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeResembleRule.java
new file mode 100644
index 0000000..f018f42
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeResembleRule.java
@@ -0,0 +1,110 @@
+package com.vci.ubcs.code.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.starter.annotation.Transient;
+import com.vci.ubcs.starter.revision.model.BaseModel;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 鐩镐技椤�
+ * @author weidy
+ * @date 2022-1-14
+ */
+//@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY,text = "涓婚搴撳垎绫�",lifeCycle = FrameWorkLcStatusConstant.FRAME_WORK_LIFE_CYCLE_NAME)
+@Data
+@TableName("PL_CODE_RESEMBLERULE")
+@ApiModel(value = "CodeResemblerule瀵硅薄", description = "鐩镐技椤�")
+@EqualsAndHashCode(callSuper = true)
+public class CodeResembleRule extends BaseModel {
+
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 7375719926432663351L;
+
+	/**
+	 * 鏄惁蹇界暐澶у皬鍐�
+	 */
+//	@Column(columnDefinition = "鏄惁蹇界暐澶у皬鍐�")
+	private String ignoreCaseFlag;
+
+	/**
+	 * 鏄惁蹇界暐绌烘牸
+	 */
+//	@Column(columnDefinition = "鏄惁蹇界暐绌烘牸")
+	private String ignoreSpaceFlag;
+
+	/**
+	 * 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+//	@Column(columnDefinition = "鏄惁蹇界暐鍏ㄩ儴绌烘牸")
+	private String ignoreAllSpaceFlag;
+
+	/**
+	 * 鏄惁蹇界暐鍏ㄥ崐瑙�
+	 */
+//	@Column(columnDefinition = "鏄惁蹇界暐鍏ㄥ崐瑙�")
+	private String ignoreWidthFlag;
+
+	/**
+	 * 杩炴帴绗�
+	 */
+//	@Column(columnDefinition = "杩炴帴绗�",length = 200)
+	private String linkCharacter;
+
+	public String getIgnoreWidthFlag() {
+		return ignoreWidthFlag;
+	}
+
+	public void setIgnoreWidthFlag(String ignoreWidthFlag) {
+		this.ignoreWidthFlag = ignoreWidthFlag;
+	}
+
+	public String getIgnoreCaseFlag() {
+		return ignoreCaseFlag;
+	}
+
+	public void setIgnoreCaseFlag(String ignoreCaseFlag) {
+		this.ignoreCaseFlag = ignoreCaseFlag;
+	}
+
+	public String getIgnoreSpaceFlag() {
+		return ignoreSpaceFlag;
+	}
+
+	public void setIgnoreSpaceFlag(String ignoreSpaceFlag) {
+		this.ignoreSpaceFlag = ignoreSpaceFlag;
+	}
+
+	public String getIgnoreAllSpaceFlag() {
+		return ignoreAllSpaceFlag;
+	}
+
+	public void setIgnoreAllSpaceFlag(String ignoreAllSpaceFlag) {
+		this.ignoreAllSpaceFlag = ignoreAllSpaceFlag;
+	}
+
+
+	public String getLinkCharacter() {
+		return linkCharacter;
+	}
+
+	public void setLinkCharacter(String linkCharacter) {
+		this.linkCharacter = linkCharacter;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeResembleRuleDO{" +
+			" ignoreCaseFlag='" + ignoreCaseFlag + '\'' +
+			", ignoreSpaceFlag='" + ignoreSpaceFlag + '\'' +
+			", ignoreAllSpaceFlag='" + ignoreAllSpaceFlag + '\'' +
+			", ignoreWidthFlag='" + ignoreWidthFlag + '\'' +
+			", linkCharacter='" + linkCharacter + '\'' +
+			"} " + super.toString();
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java
index b72209a..2b17dbb 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java
@@ -40,6 +40,7 @@
 
 	String API_PREFIX = "/client";
 	String MENU = API_PREFIX + "/menu";
+	String MENU_BUTTON = API_PREFIX + "/menu-button";
 	String DEPT = API_PREFIX + "/dept";
 	String DEPT_IDS = API_PREFIX + "/dept-ids";
 	String DEPT_IDS_FUZZY = API_PREFIX + "/dept-ids-fuzzy";
@@ -79,6 +80,15 @@
 	R<Menu> getMenu(@RequestParam("id") Long id);
 
 	/**
+	 * 鑾峰彇鑿滃崟涓嬮潰鐨勬寜閽�
+	 *
+	 * @param btmType 涓氬姟绫诲瀷
+	 * @return List<Menu>
+	 */
+	@GetMapping(MENU_BUTTON)
+	R<List<Menu>> getMenuButtonByType(@RequestParam("btmType") String btmType);
+
+	/**
 	 * 鑾峰彇閮ㄩ棬
 	 *
 	 * @param id 涓婚敭
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java
index 2cf5e43..738acdf 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java
@@ -36,6 +36,11 @@
 	}
 
 	@Override
+	public R<List<Menu>> getMenuButtonByType(String btmType) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
 	public R<Dept> getDept(Long id) {
 		return R.fail("鑾峰彇鏁版嵁澶辫触");
 	}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/pom.xml b/Source/UBCS/ubcs-service/ubcs-code/pom.xml
index 369d597..65412a1 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/pom.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/pom.xml
@@ -73,6 +73,18 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-user-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-system-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
         <!--<dependency>
             <groupId>com.vci.ubcs</groupId>
             <artifactId>ubcs-webservice</artifactId>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/DockingManagementController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/DockingManagementController.java
index 07131a6..e3e0864 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/DockingManagementController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/DockingManagementController.java
@@ -14,6 +14,7 @@
 import com.vci.ubcs.code.wrapper.CodeRuleWrapper;
 import com.vci.ubcs.code.wrapper.DockingSystemConfigWrapper;
 import com.vci.ubcs.code.wrapper.DockingSystemWrapper;
+import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -84,12 +85,17 @@
 
 	/**
 	 * 鍒犻櫎绯荤粺闆嗘垚鐨勭郴缁熶俊鎭�
-	 * @param dockingSystemDTO 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+	 * @param oids 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
 	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
 	 */
-	@DeleteMapping( "/deleteData")
-	public R delSystemData( DockingSystemDTO dockingSystemDTO) {
-		return R.status(dockingSystemService.delSystemData(dockingSystemDTO));
+	@DeleteMapping( "/deleteDataById")
+	public R deleteDataById( String oids) {
+		try {
+			return R.status(dockingSystemService.deleteDataById(oids));
+		}catch (VciBaseException e){
+			R.fail(e.getMessage());
+		}
+		return R.success("鎿嶄綔鎴愬姛");
 	}
 	/**
 	 * 绯荤粺闆嗘垚鍩虹淇℃伅鍒楄〃
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
index 87aa4dd..ee01f3b 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
@@ -31,9 +31,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @RestController
 //@AllArgsConstructor
@@ -96,20 +94,20 @@
 		String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + LocalFileUtil.getFileNameForIE(file.getOriginalFilename());
 		File file1 = new File(excelFileName);
 		try {
-//			file.transferTo(new File(excelFileName));
-//			CodeImProtRusultVO codeImProtRusultVO = mdmIOService.batchImportCode(orderDTO,file1);
-//			if(StringUtils.isNotBlank(codeImProtRusultVO.getFilePath())||StringUtils.isNotBlank(codeImProtRusultVO.getRedisUuid())){
-//				//鏀惧埌map閲�
-//				R result = R.fail("瀵煎叆澶辫触");
-//				if(StringUtils.isNotBlank(codeImProtRusultVO.getFilePath())) {
-//					String filedUUid = ControllerUtil.putErrorFile(codeImProtRusultVO.getFilePath());
-//					codeImProtRusultVO.setFileOid(filedUUid);
-//				}
-//				result.setData(codeImProtRusultVO);
-//				return result;
-//			}else {
-//				return R.success("鎿嶄綔鎴愬姛锛�");
-//			}
+			file.transferTo(new File(excelFileName));
+			CodeImProtRusultVO codeImProtRusultVO = mdmIOService.batchImportCode(orderDTO,file1);
+			if(StringUtils.isNotBlank(codeImProtRusultVO.getFilePath())||StringUtils.isNotBlank(codeImProtRusultVO.getRedisUuid())){
+				//鏀惧埌map閲�
+				R result = R.fail("瀵煎叆澶辫触");
+				if(StringUtils.isNotBlank(codeImProtRusultVO.getFilePath())) {
+					String filedUUid = ControllerUtil.putErrorFile(codeImProtRusultVO.getFilePath());
+					codeImProtRusultVO.setFileOid(filedUUid);
+				}
+				result.setData(codeImProtRusultVO);
+				return result;
+			}else {
+				return R.success("鎿嶄綔鎴愬姛锛�");
+			}
 		}catch (Throwable e) {
 			logger.error("瀵煎叆閿欒",e);
 			String errorFile = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒.txt";
@@ -126,7 +124,7 @@
 		}finally {
 			file1.delete();
 		}
-		return null;
+//		return null;
 	}
 
 
@@ -474,8 +472,63 @@
 
 	@GetMapping("/thisistest")
 	@ResponseBody
-	public List<BaseModel> thisistest(String codeClassifyOid, String functionId) throws Exception {
-		return engineService.selectByTypeAndOid("wupin", "b1511bb3-a773-43e2-ac85-a7fde7314a0f,3e08970024835e69f6c2b2ecd90c48c3,582ff205-0dfb-43e0-8223-e772ff1851ab,db0400fe-cc90-4d9d-8da7-1edf06b1481b");
+	public Integer thisistest(String codeClassifyOid, String functionId) throws Exception {
+//		return engineService.selectByTypeAndOid("wupin", "b1511bb3-a773-43e2-ac85-a7fde7314a0f,3e08970024835e69f6c2b2ecd90c48c3,582ff205-0dfb-43e0-8223-e772ff1851ab,db0400fe-cc90-4d9d-8da7-1edf06b1481b");
+
+		List<BaseModel> models = new ArrayList<>();
+		BaseModel baseModel = new BaseModel();
+		Map<String,String > map = new HashMap<>();
+		map.put("JZL","6789");
+		map.put("JZRXX","67891");
+		map.put("JZXZB","67892");
+		map.put("JSZGL","67893");
+		map.put("JSSXT","67894");
+		baseModel.setBtmname("djii");
+		baseModel.setCreator("fjivis");
+		baseModel.setId("vcia");
+		baseModel.setOid("0d86b1ba-9e9e-4d3d-9ae4-f862c3684e74");
+		baseModel.setCreateTime(new Date());
+		baseModel.setTs(new Date());
+		baseModel.setData(map);
+		models.add(baseModel);
+
+		BaseModel baseModel1 = new BaseModel();
+		Map<String,String > map1 = new HashMap<>();
+		map1.put("JZL","6789z");
+		map1.put("JZRXX","67891z");
+		map1.put("JZXZB","67892z");
+		map1.put("JSZGL","67893z");
+		map1.put("JSSXT","67894z");
+		baseModel1.setBtmname("djiiz");
+		baseModel1.setCreator("fjivisz");
+		baseModel1.setId("vciaz");
+		baseModel1.setTs(new Date());
+		baseModel1.setOid("4a00be07-f5a8-4a9b-88fb-d52a0d9cf546");
+		baseModel1.setCreateTime(new Date());
+		baseModel1.setData(map1);
+		models.add(baseModel1);
+
+		BaseModel baseModel2 = new BaseModel();
+		Map<String,String > map2 = new HashMap<>();
+		map2.put("JZL","67892");
+		map2.put("JZRXX","678912");
+		map2.put("JZXZB","678922");
+		map2.put("JSZGL","678932");
+		map2.put("JSSXT","678942");
+		baseModel2.setBtmname("djii2");
+		baseModel2.setCreator("fjivis2");
+		baseModel2.setTs(new Date());
+		baseModel2.setId("vcia2");
+		baseModel2.setOid("fa430ff9-f141-4dcf-8809-6f87905c1dea");
+		baseModel2.setCreateTime(new Date());
+		baseModel2.setData(map2);
+		models.add(baseModel2);
+
+		return 0;
+
+
+
+//		return engineService.updateBatchByBaseModel("wupin", models);
 //		return engineService.getUIInfoByClassifyOid(codeClassifyOid,functionId);
 	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java
index ea1d998..ee1824a 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java
@@ -72,6 +72,21 @@
 	/**
 	 * 鏌ユ壘鏍戝舰缁撴瀯
 	 *
+	 * @return 鏁版嵁闆嗗悎
+	 */
+	List<CodeClassify> selectCodeClassifyDOByTree(@Param("id") String id,@Param("lcstatus") String lcstatus,@Param("parentcodeclassifyoid") String parentcodeclassifyoid);
+
+	/**
+	 * 鏌ヨ鏁版嵁涓嶱L_CODE_KEYATTRREPEAT銆丳L_CODE_RESEMBLERULE銆丳L_CODE_RULE鑱旀煡
+	 *
+	 * @param oids 鍒嗙被鐨勪富閿�
+	 * @return 鏁版嵁闆嗗悎
+	 */
+	List<CodeClassify> selectClassifyByKeyAndReseRel(@Param("oids") String oids);
+
+	/**
+	 * 鏌ユ壘鏍戝舰缁撴瀯
+	 *
 	 * @param oid 鍒嗙被鐨勪富閿�
 	 * @return 鏁版嵁闆嗗悎
 	 */
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateAttrMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateAttrMapper.java
index 9a21e18..aff8458 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateAttrMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateAttrMapper.java
@@ -39,5 +39,12 @@
 
 	List<CodeClassifyTemplateAttr> selectRefByOid(String oid);
 
+	/**
+	 * 鏉′欢,鍏宠仈鏌ヨ鎺掑簭
+	 *
+	 * @param classifytemplateoids
+	 * @return
+	 */
+	List<CodeClassifyTemplateAttr> selectByClassifytemplateoidRel(String classifytemplateoids);
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeResembleRuleMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeResembleRuleMapper.java
new file mode 100644
index 0000000..c7197e7
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeResembleRuleMapper.java
@@ -0,0 +1,20 @@
+package com.vci.ubcs.code.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.vci.ubcs.code.entity.CodeResembleRule;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 涓绘暟鎹紪鐮佽鍒欐暟鎹搷浣滃眰
+ *
+ * @author ludc
+ * @date 2022-01-24
+ */
+public interface CodeResembleRuleMapper extends BaseMapper<CodeResembleRule>, MPJBaseMapper<CodeResembleRule> {
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
index 1dcbecf..e2f6a78 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
@@ -22,6 +22,8 @@
 
 	List<Map> selectBySql(@Param("inSql") String inSql);
 
+	List<Map<String,String>> queryByOnlySqlForMap(@Param("inSql") String inSql);
+
 	/**
 	 * 浼犲叆琛ㄥ悕锛宮ap锛宭ist<map>瀹屾垚鎵归噺鏇存柊鎿嶄綔
 	 * @param tableName 琛ㄥ悕
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeResembleRuleService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeResembleRuleService.java
index dfe100c..8454cc0 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeResembleRuleService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeResembleRuleService.java
@@ -1,7 +1,20 @@
 package com.vci.ubcs.code.service;
 
+import com.github.yulichang.base.MPJBaseService;
+import com.vci.ubcs.code.entity.CodeReferConfig;
+import com.vci.ubcs.code.entity.CodeResembleRule;
 import com.vci.ubcs.code.vo.pagemodel.CodeResembleRuleVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
 
-public interface ICodeResembleRuleService {
+public interface ICodeResembleRuleService  extends MPJBaseService<CodeResembleRule>  {
 	CodeResembleRuleVO getObjectByOid(String codeResembleRuleOid);
-}
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeResembleRuleDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	CodeResembleRuleVO codeResembleRuleDO2VO(CodeResembleRule codeResembleRuleDO) throws VciBaseException;
+
+	}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IDockingSystemService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IDockingSystemService.java
index b53618f..f9ff701 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IDockingSystemService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IDockingSystemService.java
@@ -26,5 +26,5 @@
 	DockingSystemVO editSave(DockingSystemDTO dockingSystemDTO);
 
 
-	boolean delSystemData(DockingSystemDTO dockingSystemDTO);
+	boolean deleteDataById(String oids);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
index 24ae819..21cfeb8 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
@@ -47,7 +47,7 @@
 import org.slf4j.LoggerFactory;
 import org.springblade.core.cache.utils.CacheUtil;
 import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.log.exception.ServiceException;
+import com.vci.ubcs.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -438,13 +438,34 @@
 	}
 
 	/**
+	 * 涓婚敭鏌ヨ鏁版嵁瀵硅薄,鍏宠仈鏌ヨ
+	 * @param oid 涓婚敭
+	 * @return  鏁版嵁瀵硅薄
+	 */
+	private CodeClassify selectByOidRel(String oid){
+
+		List<CodeClassify> codeClassifyList = codeClassifyMapper.selectClassifyByKeyAndReseRel("'"+oid.trim()+"'");
+//		CodeClassify codeClassifyEntity = (CodeClassify) codeClassifyList;
+		if(codeClassifyList.size() == 0 ){
+			throw new ServiceException("dataNotExist");//鏍规嵁涓婚敭id鏈煡鍒扮浉鍏虫暟鎹�
+		}
+//		if(codeClassifyEntity == null || StringUtils.isBlank(codeClassifyEntity.getOid())){
+//			throw new ServiceException("dataOidNotExist");//鏍规嵁涓婚敭id鏈煡鍒扮浉鍏虫暟鎹�
+//		}
+		return codeClassifyList.get(0);
+	}
+
+	/**
 	 * 鏌ヨ涓婚搴撳垎绫� 鏍�
 	 * @param treeQueryObject 鏍戞煡璇㈠璞�
 	 * @return 涓婚搴撳垎绫� 鏄剧ず鏍�
 	 */
 	@Override
 	public List<Tree> treeCodeClassify(TreeQueryObject treeQueryObject) {
-		List<CodeClassify> doList =codeClassifyMapper.selectCodeClassifyVOByTree(treeQueryObject.getParentOid());
+		List<CodeClassify> doList =codeClassifyMapper
+			.selectCodeClassifyDOByTree(treeQueryObject.getConditionMap().get("id"),treeQueryObject.getConditionMap().get("lcStatus"),treeQueryObject.getParentOid());
+//		List<CodeClassify> doList =codeClassifyMapper.selectCodeClassifyVOByTree(treeQueryObject.getParentOid());
+
 		List<CodeClassifyVO> voList = codeClassifyDO2VOs(doList);
 		TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME.toLowerCase(Locale.ROOT));
 		treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
@@ -993,10 +1014,15 @@
 		}
 
 		//浣跨敤涓婚敭鏌ヨ涓�涓�
-		List<CodeClassify> classifyDOS = codeClassifyMapper.selectBatchIds(oidLevelMap.keySet());
+		String oids = "";
+		for (String s : oidLevelMap.keySet()) {
+			oids += "'"+s+"',";
+		}
+		List<CodeClassify> classifyDOS = codeClassifyMapper.selectClassifyByKeyAndReseRel(oids.substring(0,oids.length()-1));
 		if(!CollectionUtils.isEmpty(classifyDOS)){
 			classifyDOS.stream().forEach(classifyDO->{
 				classifyDO.setDataLevel(VciBaseUtil.getInt(oidLevelMap.getOrDefault(classifyDO.getOid(),"0")));
+				classifyDO.setLcStatusText(EnumCache.getValue("codeLcstatus",classifyDO.getLcStatus()));
 			});
 		}
 		return classifyDOS;
@@ -1123,7 +1149,7 @@
 	public CodeClassifyFullInfoBO getClassifyFullInfo(String codeClassifyOid) {
 		VciBaseUtil.alertNotNull(codeClassifyOid,"鍒嗙被鐨勪富閿�");
 		CodeClassifyFullInfoBO fullInfo = new CodeClassifyFullInfoBO();
-		CodeClassify classifyDO = selectByOid(codeClassifyOid);
+		CodeClassify classifyDO = selectByOidRel(codeClassifyOid);
 		//鏌ヨ涓婄骇
 		fullInfo.setCurrentClassifyVO(codeClassifyDO2VO(classifyDO));
 //		List<Map<String, Object>> maps = codeClassifyMapper.selectAllLevelParentByOid(codeClassifyOid);
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
index a89d482..f24d9d7 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
@@ -160,10 +160,10 @@
 //			conditionMap.put("classifytemplateoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(templateOids.toArray(new String[0])) + ")");
 //			PageHelper pageHelper = new PageHelper(-1);
 //			pageHelper.addDefaultAsc("orderNum");
-			QueryWrapper<CodeClassifyTemplateAttr> wrapper = new QueryWrapper<>();
-			wrapper.in("classifytemplateoid",templateOids);
-			wrapper.orderByAsc("orderNum");
-			List<CodeClassifyTemplateAttr> attrDOS = baseMapper.selectList(wrapper);
+//			QueryWrapper<CodeClassifyTemplateAttr> wrapper = new QueryWrapper<>();
+//			wrapper.in("classifytemplateoid",templateOids);
+//			wrapper.orderByAsc("orderNum");
+			List<CodeClassifyTemplateAttr> attrDOS = baseMapper.selectByClassifytemplateoidRel(VciBaseUtil.toInSql(templateOids.toArray(new String[0])));
 //				baseMapper.selectByClassifytemplateoid(VciBaseUtil.toInSql(templateOids.toArray(new String[0])));
 
 			if(!CollectionUtils.isEmpty(attrDOS)){
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeResembleRuleServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeResembleRuleServiceImpl.java
index fb58ad2..896e759 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeResembleRuleServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeResembleRuleServiceImpl.java
@@ -1,8 +1,20 @@
 package com.vci.ubcs.code.service.impl;
 
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.vci.ubcs.code.entity.CodeReferConfig;
+import com.vci.ubcs.code.entity.CodeResembleRule;
+import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
+import com.vci.ubcs.code.mapper.CodeReferConfigMapper;
+import com.vci.ubcs.code.mapper.CodeResembleRuleMapper;
 import com.vci.ubcs.code.service.ICodeResembleRuleService;
 import com.vci.ubcs.code.vo.pagemodel.CodeResembleRuleVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
+
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_OID_NOT_EXIST;
 
 /**
  * 鐩镐技鏌ヨ瑙勫垯鏈嶅姟
@@ -10,9 +22,44 @@
  * @date 2022-04-10
  */
 @Service
-public class CodeResembleRuleServiceImpl implements ICodeResembleRuleService {
+public class CodeResembleRuleServiceImpl extends MPJBaseServiceImpl<CodeResembleRuleMapper, CodeResembleRule> implements ICodeResembleRuleService {
 	@Override
-	public CodeResembleRuleVO getObjectByOid(String codeResembleRuleOid) {
-		return null;
+	public CodeResembleRuleVO getObjectByOid(String oid) {
+		return codeResembleRuleDO2VO(selectByOid(oid));
+	}
+
+	/**
+	 * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+	 * @param oid 涓婚敭
+	 * @return  鏁版嵁瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	private CodeResembleRule selectByOid(String oid) throws VciBaseException {
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeResembleRule codeResembleRuleDO = baseMapper.selectById(oid.trim());
+//		CodeResembleRule codeResembleRuleDO = codeResembleRuleMapper.selectByPrimaryKey(oid.trim());
+		if(codeResembleRuleDO == null || StringUtils.isBlank(codeResembleRuleDO.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return codeResembleRuleDO;
+	}
+
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeResembleRuleDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public  CodeResembleRuleVO codeResembleRuleDO2VO(CodeResembleRule codeResembleRuleDO) throws VciBaseException{
+		CodeResembleRuleVO vo = new CodeResembleRuleVO();
+		if(codeResembleRuleDO != null){
+			BeanUtilForVCI.copyPropertiesIgnoreCase(codeResembleRuleDO,vo);
+			//濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+			vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
+
+		}
+		return vo;
 	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemServiceImpl.java
index 46a17e6..f71967b 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemServiceImpl.java
@@ -1,14 +1,18 @@
 package com.vci.ubcs.code.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
 import com.vci.ubcs.code.dto.DockingSystemDTO;
 import com.vci.ubcs.code.entity.CodeRule;
 import com.vci.ubcs.code.entity.DockingSystem;
+import com.vci.ubcs.code.entity.DockingSystemConfig;
+import com.vci.ubcs.code.mapper.DockingSystemConfigMapper;
 import com.vci.ubcs.code.mapper.DockingSystemMapper;
 import com.vci.ubcs.code.service.IDockingSystemService;
 import com.vci.ubcs.code.vo.pagemodel.DockingSystemVO;
 import com.vci.ubcs.code.wrapper.DockingSystemWrapper;
+import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
 import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
@@ -17,8 +21,10 @@
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING;
 import static com.vci.ubcs.code.constant.MdmLifeCycleConstant.CODE_RULE_LC;
@@ -35,6 +41,12 @@
 	 */
 	@Autowired(required = false)
 	private  DockingSystemMapper dockingSystemMapper;
+
+	/***
+	 * 闆嗘垚绯荤粺绠$悊鏈嶅姟
+	 */
+	@Autowired(required = false)
+	private DockingSystemConfigMapper dockingSystemConfigMapper;
 
 	/**
 	 * 瀵硅薄鐨勬搷浣�
@@ -69,20 +81,40 @@
 		return DockingSystemWrapper.build().entityVO(dockingSystem);
 	}
 
+	/***
+	 * 鏍规嵁绯荤粺涓婚敭鍒犻櫎绯荤粺鍚嶇О
+	 * @param oids
+	 * @return
+	 * @throws VciBaseException
+	 */
 	@Override
-	public boolean delSystemData(DockingSystemDTO dockingSystemDTO) {
-		VciBaseUtil.alertNotNull(dockingSystemDTO,"绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞�",dockingSystemDTO.getOid(),"绯荤粺闆嗘垚鐨勭郴缁熶俊鎭殑涓婚敭");
-		/*DockingSystem dockingSystem = dockingSystemMapper.selectById(dockingSystemDTO.getOid());
-		BaseResult baseResult = checkIsCanDeleteForDO(sysIntBaseDTO,sysIntBaseDO);
-		if(baseResult.isSuccess()) {
+	public boolean deleteDataById(String oids) throws VciBaseException {
+		String message="";
+		try {
+			VciBaseUtil.alertNotNull(oids, "绯荤粺闆嗘垚鐨勭郴缁熶俊鎭殑涓婚敭");
+			List<DockingSystem> dockingSystemList = dockingSystemMapper.selectBatchIds(VciBaseUtil.str2List(oids));
+			Map<String/**绯荤粺oid**/, String/**绯荤粺鍚嶇О**/> systemNameMap = dockingSystemList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t.getName(),(o1, o2)->o2));
+			List<DockingSystemConfig> dockingSystemConfigList = dockingSystemConfigMapper.selectList(Wrappers.<DockingSystemConfig>query().lambda().in(DockingSystemConfig::getSourceSystemOid, VciBaseUtil.str2List(oids)));
+			Set<String> systemOidList=new HashSet<>();
+			Map<String,String> errorMap = new HashMap<>();
+			if (!CollectionUtils.isEmpty(dockingSystemConfigList)) {
+				dockingSystemConfigList.stream().forEach(dockingSystemConfig -> {
+					if(!systemOidList.contains(dockingSystemConfig.getSourceSystemOid())&&
+						systemNameMap.containsKey(dockingSystemConfig.getSourceSystemOid())){
+						String systemName=systemNameMap.get(dockingSystemConfig.getSourceSystemOid());
+						errorMap.put("error",errorMap.getOrDefault("error","") + ";"+systemName);
+					}
+					systemOidList.add(dockingSystemConfig.getSourceSystemOid());
+				});
+			}
+			if(errorMap.size()>0){
+				throw  new Throwable(errorMap.getOrDefault("error",""));
+			}
+			return	dockingSystemMapper.deleteBatchIds(VciBaseUtil.str2List(oids))>0;
+		}catch (Throwable e){
+			e.printStackTrace();
+			throw  new VciBaseException(e.getMessage());
 
-		}else{
-			return baseResult;
 		}
-		//鎵ц鍒犻櫎鎿嶄綔
-		BatchCBO batchCBO = sysIntBaseMapper.deleteByPrimaryKey(sysIntBaseDO.getOid());
-		return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-*/
-		return false;
 	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
index 3837b3e..a660ef9 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -24,6 +24,7 @@
 import com.vci.ubcs.omd.feign.IBtmTypeClient;
 import com.vci.ubcs.omd.feign.IEnumClient;
 import com.vci.ubcs.omd.feign.IRevisionRuleClient;
+import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
 import com.vci.ubcs.omd.vo.BtmTypeVO;
 import com.vci.ubcs.omd.vo.EnumVO;
 import com.vci.ubcs.omd.vo.RevisionRuleVO;
@@ -40,7 +41,11 @@
 import com.vci.ubcs.starter.web.toolmodel.DateConverter;
 import com.vci.ubcs.starter.web.util.*;
 import com.vci.ubcs.system.entity.DictBiz;
+import com.vci.ubcs.system.entity.Menu;
 import com.vci.ubcs.system.feign.IDictBizClient;
+import com.vci.ubcs.system.feign.ISysClient;
+import com.vci.ubcs.system.user.entity.User;
+import com.vci.ubcs.system.user.feign.IUserClient;
 import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
 import oracle.sql.TIMESTAMP;
 import org.slf4j.Logger;
@@ -50,6 +55,7 @@
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.StringPool;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.Cache;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
@@ -69,6 +75,7 @@
 import java.time.ZonedDateTime;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
 import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_OID_NOT_EXIST;
@@ -105,7 +112,16 @@
 	 */
 	@Resource
 	IDictBizClient iDictBizClient;
-
+	/**
+	 * 绯荤粺鐨勬湇鍔�
+	 */
+	@Resource
+	ISysClient iSysClient;
+	/**
+	 * 鐢ㄦ埛鏈嶅姟
+	 */
+	@Resource
+	IUserClient iUserClient;
 	/**
 	 * 瀛楀吀鐨勬湇鍔�
 	 */
@@ -780,6 +796,11 @@
 			data.put(CODE_TEMPLATE_OID_FIELD,templateVO.getOid());
 			data.put(CODE_FULL_PATH_FILED,fullPath);
 			cbo.setData(data);
+			cbo.setOid(VciBaseUtil.getPk());
+			cbo.setCreateTime(new Date());
+			cbo.setLastModifyTime(new Date());
+			cbo.setCreator(AuthUtil.getUser().getUserName());
+			cbo.setLastModifier(AuthUtil.getUser().getUserName());
 //			cbo.setCodeclsfid(classifyFullInfo.getCurrentClassifyVO().getOid());
 //			cbo.setTemplateOid(templateVO.getOid());
 //			cbo.setCodeclsfpath(fullPath);
@@ -792,7 +813,7 @@
 //						cbo.setLcStatus("Editing");
 ////						cbo.setLcStatus(lifeCycleVO.getStartStatus());
 //					} else {
-						cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+					cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
 //					}
 				} else {
 					cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
@@ -801,7 +822,7 @@
 			}
 
 			int secret = VciBaseUtil.getInt(String.valueOf(cbo.getSecretGrade()));
-			//鎻掍釜鐐癸紝鍚庣画鐪嬪瘑绾ф湇鍔℃槸鍚﹀彲鐢�
+			//鍚庣画鐪嬪瘑绾ф湇鍔℃槸鍚﹀彲鐢�
 //			if (secret == 0 || !secretService.checkDataSecret(secret)) {
 			if (secret == 0 ) {
 				Integer userSecret = VciBaseUtil.getCurrentUserSecret();
@@ -828,12 +849,14 @@
 			btmName = btmName.trim().toLowerCase();
 		}
 		try {
-			String keyPrefix = BTM_NAME.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
-			String finalBtmName = btmName;
-			return CacheUtil.get(BTM_INIT_CACHE, keyPrefix, btmName, () -> {
-				BaseModel baseModel = createBaseModel(finalBtmName);
-				return baseModel;
-			});
+			String keyPrefix = BTM_INIT_CACHE.concat(StringPool.COLON).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+//			String finalBtmName = btmName;
+			Cache.ValueWrapper valueWrapper = CacheUtil.getCache(keyPrefix).get(keyPrefix.concat(String.valueOf(btmName)));
+			if(valueWrapper == null){
+				CacheUtil.getCache(keyPrefix).put(keyPrefix.concat(String.valueOf(btmName)), createBaseModel(btmName));
+				valueWrapper = CacheUtil.getCache(keyPrefix).get(keyPrefix.concat(String.valueOf(btmName)));
+			}
+			return (BaseModel) valueWrapper.get();
 		} catch (Exception e) {
 			logger.error("鍒涘缓涓氬姟绫诲瀷瀵硅薄",e);
 			throw new VciBaseException("initBtmError",new String[]{btmName});
@@ -940,15 +963,15 @@
 		}
 	}
 
-    @Override
-    public MdmUIInfoVO getFormDefineByTemplateOid(String templateOid, String codeClassifyOid) {
+	@Override
+	public MdmUIInfoVO getFormDefineByTemplateOid(String templateOid, String codeClassifyOid) {
 		CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(templateOid);
 		MdmUIInfoVO uiInfoVO = new MdmUIInfoVO();
 		uiInfoVO.setTemplateVO(templateVO);
 		uiInfoVO.setFormDefineVO(wrapperFormDefineByTemplate(templateVO, codeClassifyOid));
 		wrapperResemble(templateVO, uiInfoVO);
 		return uiInfoVO;
-    }
+	}
 
 
 	/**
@@ -1270,10 +1293,10 @@
 		//娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
 		if (!CollectionUtils.isEmpty(conditionMap)) {
 			Map<String, String> andConditionMap = new HashMap<>();
-			andConditionMap.put("lastr", "1");
-			andConditionMap.put("lastv", "1");
+			andConditionMap.put("t.lastr", "1");
+			andConditionMap.put("t.lastv", "1");
 			if (StringUtils.isNotBlank(orderDTO.getOid())) {
-				andConditionMap.put("oid", QueryOptionConstant.NOTEQUAL + orderDTO.getOid());
+				andConditionMap.put("t.oid", QueryOptionConstant.NOTEQUAL + orderDTO.getOid());
 			}
 			conditionMap.putAll(andConditionMap);
 			PageHelper pageHelper = new PageHelper(-1);
@@ -1380,21 +1403,33 @@
 	public DataGrid<Map<String, String>> queryGrid(String btmType, CodeClassifyTemplateVO templateVO, Map<String, String> conditionMap, PageHelper pageHelper) {
 		CodeTemplateAttrSqlBO sqlBO = getSqlByTemplateVO(btmType, templateVO, conditionMap, pageHelper);
 //		List<Map> maps = boService.queryByOnlySqlForMap(sqlBO.getSqlHasPage());
-		List<Map> maps = commonsMapper.selectBySql(sqlBO.getSqlHasPage());
+		List<Map<String,String>> maps = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlHasPage());
+
 		DataGrid<Map<String, String>> dataGrid = new DataGrid<>();
 		List<Map<String, String>> dataList = new ArrayList<>();
+//		if (!CollectionUtils.isEmpty(maps)) {
+//			maps.stream().forEach(map -> {
+//				Map<String, String> data = new HashMap<>();
+//				map.forEach((key, value) -> {
+//					data.put(((String) key).toLowerCase(Locale.ROOT), String.valueOf(value));
+//				});
+//				dataList.add(data);
+//			});
+//		}
+//		dataGrid.setData(dataList);
 		if (!CollectionUtils.isEmpty(maps)) {
+			wrapperData(maps, templateVO, sqlBO.getSelectFieldList(), false);
 			maps.stream().forEach(map -> {
 				Map<String, String> data = new HashMap<>();
-				map.forEach((key, value) -> {
-					data.put(((String) key).toLowerCase(Locale.ROOT), String.valueOf(value));
-				});
+//				map.forEach((key, value) -> {
+//					data.put(((String) key).toLowerCase(Locale.ROOT), String.valueOf(value));
+//				});
+				for (String s : map.keySet()) {
+					data.put(((String) s).toLowerCase(Locale.ROOT), String.valueOf(map.get(s)));
+				}
 				dataList.add(data);
 			});
-		}
-		dataGrid.setData(dataList);
-		if (!CollectionUtils.isEmpty(dataList)) {
-			wrapperData(dataGrid.getData(), templateVO, sqlBO.getSelectFieldList(), false);
+			dataGrid.setData(dataList);
 			dataGrid.setTotal(Long.parseLong(commonsMapper.selectBySql(sqlBO.getSqlCount()).get(0).values().toArray()[0].toString()));
 		}
 		return dataGrid;
@@ -1457,17 +1492,27 @@
 			}
 		});
 		if (!CollectionUtils.isEmpty(userIds)) {
+			Map<String, User> userVOMap = new HashMap<>();
+			for (String userId : userIds) {
+				if(!StringUtils.isNumeric(userId)){
+					continue;
+				}
+				User data = iUserClient.userInfoById(Long.valueOf(userId)).getData();
+				if(data != null){
+					userVOMap.put(String.valueOf(data.getId()),data);
+				}
+			}
 //			Map<String, SmUserVO> userVOMap = Optional.ofNullable(userQueryService.listUserByUserIds(userIds)).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
-//			dataMap.stream().forEach(data -> {
-//				String creator = data.getOrDefault("creator", null);
-//				if (StringUtils.isNotBlank(creator) && userVOMap.containsKey(creator.toLowerCase(Locale.ROOT))) {
-//					data.put("creator", creator + "(" + userVOMap.get(creator.toLowerCase(Locale.ROOT)).getName() + ")");
-//				}
-//				String lastmodifier = data.getOrDefault("lastmodifier", null);
-//				if (StringUtils.isNotBlank(lastmodifier) && userVOMap.containsKey(lastmodifier.toLowerCase(Locale.ROOT))) {
-//					data.put("lastmodifier", lastmodifier + "(" + userVOMap.get(lastmodifier.toLowerCase(Locale.ROOT)).getName() + ")");
-//				}
-//			});
+			dataMap.stream().forEach(data -> {
+				String creator = data.getOrDefault("creator", null);
+				if (StringUtils.isNotBlank(creator) && userVOMap.containsKey(creator.toLowerCase(Locale.ROOT))) {
+					data.put("creator", creator + "(" + userVOMap.get(creator.toLowerCase(Locale.ROOT)).getRealName() + ")");
+				}
+				String lastmodifier = data.getOrDefault("lastmodifier", null);
+				if (StringUtils.isNotBlank(lastmodifier) && userVOMap.containsKey(lastmodifier.toLowerCase(Locale.ROOT))) {
+					data.put("lastmodifier", lastmodifier + "(" + userVOMap.get(lastmodifier.toLowerCase(Locale.ROOT)).getRealName() + ")");
+				}
+			});
 		}
 	}
 
@@ -1510,8 +1555,9 @@
 		//澶勭悊鏋氫妇鐨勫唴瀹癸紝涓轰簡鍏煎浠ュ墠鐨勬暟鎹�,濡傛灉鏁版嵁涓嶈兘浣跨敤鏋氫妇杞崲鐨勮瘽锛岄偅杩樻槸鏄剧ず浠ュ墠鐨勫��
 		if (!CollectionUtils.isEmpty(enumAttrVOs)) {
 			enumAttrVOs.stream().forEach(enumAttrVO -> {
+//				String attrId = enumAttrVO.getId().toUpperCase(Locale.ROOT);
 				String attrId = enumAttrVO.getId().toLowerCase(Locale.ROOT);
-				String oldValue = data.getOrDefault(attrId, null);
+				String oldValue = String.valueOf(data.getOrDefault(attrId, null));
 				if (StringUtils.isNotBlank(oldValue)) {
 					List<KeyValue> comboxKVs = listComboboxItems(enumAttrVO);
 					String newValue = oldValue;
@@ -1560,9 +1606,11 @@
 					referVO.setValueField(VciQueryWrapperForDO.OID_FIELD);
 					referVO.setTextField("name");
 				}
-				//琛ㄩ渶瑕佹敼
+				//浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃
+				R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(referVO.getReferType()));
 //				String referTable = VciBaseUtil.getTableName(referVO.getReferType());
-				String referTable = "pl_code_wupin";
+				String referTable = listR.getData().get(0).getTableName();
+//				String referTable = "pl_code_classify";
 				String referTableNick = attrVO.getId() + "0";
 				String left = " left join " + referTable + " " + referTableNick + " on " + referTableNick + "." + referVO.getValueField() + " =  t." + attrVO.getId();
 				joinTableList.put(attrVO.getId(), left);
@@ -1578,12 +1626,20 @@
 				selectFieldList.add(referTableNick + "." + showFieldInSource + " as " + referShowField);
 			});
 		}
-		// 寰呭畬鍠�
-//		Optional.ofNullable(attributeService.getDefaultAttributeVOMap()).orElseGet(() -> new HashMap<>()).keySet().stream().forEach(attrId -> {
-//			if (!selectFieldList.contains(attrId) && !"secretgrade".equalsIgnoreCase(attrId)) {
-//				selectFieldList.add(attrId);
+		R<BtmTypeVO> allAttributeByBtmId = btmTypeClient.getDefaultAttrByBtmId(btmType);
+//		Optional.ofNullable(allAttributeByBtmId.getData()).orElseGet(allAttributeByBtmId.getData().getAttributes()).stream().forEach(attrId -> {
+//			if (!selectFieldList.contains(attrId.getOid()) && !"secretgrade".equalsIgnoreCase(attrId.getOid())) {
+//				selectFieldList.add(attrId.getOid());
 //			}
 //		});
+		if(allAttributeByBtmId.getData() != null ){
+			for (BtmTypeAttributeVO attribute : allAttributeByBtmId.getData().getAttributes()) {
+				if (!selectFieldList.contains(attribute.getId()) && !"secretgrade".equalsIgnoreCase(attribute.getId())) {
+					selectFieldList.add(attribute.getId());
+				}
+			}
+		}
+
 		if (!selectFieldList.contains(CODE_FIELD)) {
 			selectFieldList.add(CODE_FIELD);
 		}
@@ -1653,7 +1709,10 @@
 		}
 		//瑕佹敼锛岃〃鏄庤幏鍙栨湁闂
 //		String tableName = VciBaseUtil.getTableName(btmType);
-		String tableName = "pl_code_wupin";
+//		String tableName = "pl_code_wupin";
+		R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType));
+//				String referTable = VciBaseUtil.getTableName(referVO.getReferType());
+		String tableName = listR.getData().get(0).getTableName();
 		String sql = "select " + selectFieldList.stream().map(s -> (s.contains(".") ? s : ("t." + s))).collect(Collectors.joining(","))
 			+ " from " + tableName + SPACE + "t" + SPACE
 			+ joinTableList.values().stream().collect(Collectors.joining(SPACE))
@@ -1786,7 +1845,7 @@
 	 */
 	private String getSqlByValue(String selectKey, String value, Map<String, CodeClassifyTemplateAttrVO> attrVOMap) {
 		StringBuilder sql = new StringBuilder();
-		// 寰呭畬鍠�
+		//寰呭畬鍠�
 //		if (!selectKey.contains(".") && (attrVOMap.containsKey(selectKey.toLowerCase(Locale.ROOT)) || attributeService.isDefaultAttr(selectKey) || selectKey.matches(RegExpConstant.LETTER))) {
 //			sql.append("t.");
 //		}
@@ -2420,10 +2479,20 @@
 		CodeClassifyVO topClassifyVO = classifyService.getTopClassifyVO(templateVO.getCodeclassifyoid());
 		String btmId = topClassifyVO.getBtmtypeid();
 		//鏌ヨ鏁版嵁
-		Map<String, String> conditionMap = WebUtil.getOidQuery(oid);
+		Map<String, String> conditionMap = new HashMap<>();
+		conditionMap.put("t.oid",oid);
 		CodeTemplateAttrSqlBO sqlBO = getSqlByTemplateVO(btmId, templateVO, conditionMap, new PageHelper(-1));
 		//鎴戜滑浣跨敤鍜屼笟鍔$被鍨嬬殑鏉ユ煡璇�
-		List<Map> cbos = commonsMapper.selectBySql(sqlBO.getSqlUnPage());
+		List<Map> cbosB = commonsMapper.selectBySql(sqlBO.getSqlUnPage());
+		List<Map<String,String>> cbos = new ArrayList<>();
+		cbosB.stream().forEach(map -> {
+			Map<String, String> data = new HashMap<>();
+			for (Object o : map.keySet()) {
+				data.put(((String) o).toLowerCase(Locale.ROOT), String.valueOf(map.get(o)));
+			}
+			cbos.add(data);
+		});
+
 //		List<ClientBusinessObject> cbos = boService.queryByOnlySql(sqlBO.getSqlUnPage());
 		if (CollectionUtils.isEmpty(cbos)) {
 			throw new VciBaseException("鏁版嵁鍦ㄧ郴缁熶腑涓嶅瓨鍦紝鏄惁鍥犱负淇敼杩囦笟鍔$被鍨嬶紵");
@@ -2436,7 +2505,7 @@
 		wrapperData(dataList, templateVO, sqlBO.getSelectFieldList(), true);
 		R<List<Map<String, String>>> result = R.data(Collections.singletonList(cbo));
 		//鎴戜滑瑕佺湅鏄惁涓嶆槸鍗囩増鐨勶紝鍗囩増鐨勮瘽锛岄渶瑕佸姣斾笉鐩哥瓑鐨勫睘鎬�
-		String copy = String.valueOf(cbo.get("COPYFROMVERSION"));
+		String copy = cbo.get("copyfromversion");
 //		if (StringUtils.isBlank(copy)) {
 //			copy = cbo.getAttributeValue("copyfromversion");
 //		}
@@ -2860,27 +2929,31 @@
 		MdmUIInfoVO uiInfoVO = getTableDefineByTemplateVO(getUsedTemplateByClassifyOid(codeClassifyOid));
 		uiInfoVO.setLeaf(classifyService.countChildrenByClassifyOid(codeClassifyOid) == 0);
 		if (StringUtils.isNotBlank(functionId) && !"~".equalsIgnoreCase(functionId)) {
+			List<Menu> buttonVOS = iSysClient.getMenuButtonByType(uiInfoVO.getTemplateVO().getBtmTypeId()).getData();
+
 			//鍔熻兘鎸夐挳鏈嶅姟杩樻湭瀹炵幇锛岀瓑瀹炵幇浜嗭紝鍦ㄨ繘琛岃皟鐢�
-			//List<SmOperationVO> operationVOS = operationService.listButtonByFunctionId(functionId);
+//			List<SmOperationVO> operationVOS = operationService.listButtonByFunctionId(functionId);
 //			if (operationVOS == null) {
 //				operationVOS = new ArrayList<>();
 //			}
-			//鏌ヨ鎵╁睍鎸夐挳
+//			//鏌ヨ鎵╁睍鎸夐挳
 //			List<CodeButtonVO> buttonVOS = listButtonInToolbarByClassifyOid(codeClassifyOid);
-//			if (!CollectionUtils.isEmpty(buttonVOS)) {
-//				for (int i = 0; i < buttonVOS.size(); i++) {
-//					CodeButtonVO buttonVO = buttonVOS.get(i);
-//					SmOperationVO operationVO = new SmOperationVO();
-//					operationVO.setModuleNo(functionId);
-//					operationVO.setUniqueFlag(buttonVO.getId());
-//					operationVO.setName(buttonVO.getName());
-//					operationVO.setAlias(operationVO.getName());
-//					operationVO.setExecuteJs(buttonVO.getExecutejs());
-//					operationVO.setIconCls(buttonVO.getIconcls());
-//					operationVOS.add(operationVO);
-//				}
-//			}
-//			uiInfoVO.setButtons(operationVOS);
+			List<SmOperationVO> operationVOS = new ArrayList<>();
+			if (!CollectionUtils.isEmpty(buttonVOS)) {
+				for (int i = 0; i < buttonVOS.size(); i++) {
+					Menu buttonVO = buttonVOS.get(i);
+					SmOperationVO operationVO = new SmOperationVO();
+					operationVO.setModuleNo(functionId);
+					operationVO.setUniqueFlag(buttonVO.getCode());
+					operationVO.setName(buttonVO.getName());
+					operationVO.setAlias(buttonVO.getAlias());
+					operationVO.setOrderNo(String.valueOf(buttonVO.getSort()));
+//					operationVO.setExecuteJs(buttonVO.getExecuteJs());
+//					operationVO.setIconCls(buttonVO.getIconCls());
+					operationVOS.add(operationVO);
+				}
+			}
+			uiInfoVO.setButtons(operationVOS);
 		}
 		return uiInfoVO;
 	}
@@ -3013,7 +3086,7 @@
 		R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(boName));
 		String userName = AuthUtil.getUser().getUserName();
 		BaseModel bo = new BaseModel();
-		bo.setOid(VciBaseUtil.getPk());
+//		bo.setOid(VciBaseUtil.getPk());
 //		bo.setRevisionid(VciBaseUtil.getPk());
 //		bo.setNameoid(VciBaseUtil.getPk());
 		bo.setBtmname(boName);
@@ -3038,7 +3111,7 @@
 		bo.setLctid(listR.getData().get(0).getLifeCycleId());
 //		if(StringUtils.isNotBlank(listR.getData().get(0).getLifeCycleId())){
 //			OsLifeCycleVO lifeCycleVO = lifeService.getLifeCycleById(listR.getData().get(0).getLifeCycleId());
-			bo.setLcStatus("Editing");
+		bo.setLcStatus("Editing");
 //		}
 		bo.setId("");
 		bo.setName("");
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
index 689147f..526c013 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -21,6 +21,7 @@
 import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
 import com.vci.ubcs.starter.web.pagemodel.DataGrid;
 import com.vci.ubcs.starter.web.pagemodel.KeyValue;
+import com.vci.ubcs.starter.web.util.LangBaseUtil;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import com.vci.ubcs.starter.web.util.VciDateUtil;
 import lombok.AllArgsConstructor;
@@ -37,6 +38,7 @@
 
 import javax.annotation.Resource;
 import java.io.File;
+import java.io.IOException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -255,15 +257,60 @@
 		String redisUUid=batchImportCodes(orderDTO,templateVO,dataSet,errorMap,true);
 		CodeImProtRusultVO codeImProtRusultVO = new CodeImProtRusultVO();
 		List<String> needRowIndexList = new ArrayList<>();
-//		String filePath = returnErrorToExcel(dataSet.getRowData(), errorMap, needRowIndexList, dataSet.getColName());
-//		if(StringUtils.isNotBlank(filePath)) {
-//			codeImProtRusultVO.setFilePath(filePath);
-//		}
-//		if(StringUtils.isNotBlank(redisUUid)){
-//			codeImProtRusultVO.setRedisUuid(redisUUid);
-//		}
-		return null;
-//		return codeImProtRusultVO;
+		String filePath = returnErrorToExcel(dataSet.getRowData(), errorMap, needRowIndexList, dataSet.getColName());
+		if(StringUtils.isNotBlank(filePath)) {
+			codeImProtRusultVO.setFilePath(filePath);
+		}
+		if(StringUtils.isNotBlank(redisUUid)){
+			codeImProtRusultVO.setRedisUuid(redisUUid);
+		}
+//		return null;
+		return codeImProtRusultVO;
+	}
+
+	/**
+	 * 閿欒淇℃伅杩斿洖excel
+	 * @param rowDataList 鎵�鏈夌殑瀵煎叆鏁版嵁
+	 * @param errorMap 閿欒鐨勪俊鎭�
+	 * @param needRowIndexList 闇�瑕佸啓鍏ョ殑鏁版嵁鐨勮鍙�
+	 * @param titleRowData 鏍囬琛�
+	 *
+	 * @return 閿欒鐨別xcel鏂囦欢锛屾病鏈夐敊璇細杩斿洖绌�
+	 */
+	private String returnErrorToExcel(Collection<SheetRowData> rowDataList,
+									  Map<String,String> errorMap,
+									  List<String> needRowIndexList,List<String> titleRowData){
+		if(CollectionUtils.isEmpty(errorMap)){
+			return "";
+		}
+		Map<String, SheetRowData> rowIndexDataMap = rowDataList.stream().filter(s -> !needRowIndexList.contains(s.getRowIndex())).collect(Collectors.toMap(s -> s.getRowIndex(), t -> t));
+		List<WriteExcelData> errorDataList = new ArrayList<>();
+		errorDataList.add(new WriteExcelData(0,0,"閿欒淇℃伅"));
+		for (int i = 0; i < titleRowData.size(); i++) {
+			//閿欒淇℃伅鍦ㄦ渶鍚�
+			errorDataList.add(new WriteExcelData(0,i+1,titleRowData.get(i)));
+		}
+		Integer[] newRowIndex = new Integer[]{1};
+		errorMap.forEach((index,error)->{
+			//閿欒淇℃伅鍏ㄩ儴缁勫悎鍒颁竴璧�
+			SheetRowData rowData = rowIndexDataMap.getOrDefault(index, null);
+			if(rowData!=null){
+				errorDataList.add(new WriteExcelData(newRowIndex[0],0,error));
+				rowData.getData().forEach((colIndex,value)->{
+					errorDataList.add(new WriteExcelData(newRowIndex[0],colIndex+1,value));
+				});
+				newRowIndex[0]++;
+			}
+		});
+		String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒淇℃伅.xls";
+		WriteExcelOption eo = new WriteExcelOption(errorDataList);
+		try {
+			new File(excelFileName).createNewFile();
+		} catch (IOException e) {
+			throw new VciBaseException(LangBaseUtil.getErrorMsg(e));
+		}
+		ExcelUtil.writeDataToFile(excelFileName,eo);
+		return excelFileName;
 	}
 
 	/**
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml
index dc5e143..88358b5 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml
@@ -240,4 +240,60 @@
         order by id asc
     </select>
 
+    <select id="selectCodeClassifyDOByTree" resultMap="plCodeClassifyResultMap">
+        select codeclassify0.OWNER                 as owner,
+        codeclassify0.BTMTYPEID             as btmtypeid,
+        codeclassify0.CREATOR               as creator,
+        codeclassify0.CREATETIME            as createtime,
+        codeclassify0.LASTMODIFIER          as lastmodifier,
+        codeclassify0.DESCRIPTION           as description,
+        codeclassify0.ORDERNUM              as ordernum,
+        codeclassify0.CODERULEOID           as coderuleoid,
+        codeclassify0.OID                   as oid,
+        codeclassify0.BTMNAME               as btmname,
+        codeclassify0.BTMTYPENAME           as btmtypename,
+        codeclassify0.CODEKEYATTRREPEATOID  as codekeyattrrepeatoid,
+        codeclassify0.PARENTCODECLASSIFYOID as parentcodeclassifyoid,
+        codeclassify0.NAME                  as name,
+        codeclassify0.LASTMODIFYTIME        as lastmodifytime,
+        codeclassify0.ID                    as id,
+        codeclassify0.CODERESEMBLERULEOID   as coderesembleruleoid,
+        codeclassify0.LCSTATUS              as lcstatus,
+        codeclassify0.TS                    as ts,
+        coderuleoid.name                    as codeRuleOidName,
+        codekeyattrrepeatoid.name           as codeKeyAttrRepeatOidName,
+        coderesembleruleoid.name            as codeResembleRuleOidName
+        from pl_code_classify codeclassify0
+        left join pl_code_rule coderuleoid
+        on codeclassify0.codeRuleOid = coderuleoid.oid
+        left join pl_code_keyattrrepeat codekeyattrrepeatoid
+        on codeclassify0.codeKeyAttrRepeatOid = codekeyattrrepeatoid.oid
+        left join pl_code_resemblerule coderesembleruleoid
+        on codeclassify0.codeResembleRuleOid = coderesembleruleoid.oid
+        where codeclassify0.lcstatus = #{lcstatus}
+        <if test="parentcodeclassifyoid != null and parentcodeclassifyoid != ''">
+            and codeclassify0.parentcodeclassifyoid = #{parentcodeclassifyoid}
+        </if>
+        <if test="parentcodeclassifyoid == null or parentcodeclassifyoid == ''">
+            and codeclassify0.parentcodeclassifyoid is null
+            and codeclassify0.id = #{id}
+        </if>
+        order by id asc
+    </select>
+
+    <select id="selectClassifyByKeyAndReseRel" resultMap="plCodeClassifyResultMap">
+        SELECT PCC.*,
+               PCK.NAME AS CODEKEYATTRREPEATOIDNAME,
+               PCR.NAME AS CODERESEMBLERULEOIDNAME,
+               PCE.NAME CODERULEOIDNAME
+        FROM PL_CODE_CLASSIFY PCC
+                 LEFT JOIN PL_CODE_KEYATTRREPEAT PCK
+                           ON PCC.CODEKEYATTRREPEATOID = PCK.OID
+                 LEFT JOIN PL_CODE_RESEMBLERULE PCR
+                           ON PCC.CODERESEMBLERULEOID = PCR.OID
+                 LEFT JOIN PL_CODE_RULE PCE
+                           ON PCC.CODERULEOID = PCE.OID
+        WHERE PCC.OID IN (${oids})
+    </select>
+
 </mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateAttrMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateAttrMapper.xml
index 640e301..c94b4c4 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateAttrMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateAttrMapper.xml
@@ -100,5 +100,13 @@
         where codeclstempattr0.classifytemplateoid = #{oid}
     </select>
 
+    <select id="selectByClassifytemplateoidRel" resultMap="CodeClstempattrResultMap">
+        select PCC.*, PLT.NAME classifyTemplateOidName
+        from PL_CODE_CLSTEMPATTR PCC, PL_CODE_CLSTEMPLATE PLT
+        where PCC.CLASSIFYTEMPLATEOID = PLT.OID
+          AND PCC.classifytemplateoid IN (${oid})
+        ORDER BY PCC.ORDERNUM ASC
+    </select>
+
 
 </mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeResembleRule.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeResembleRule.xml
new file mode 100644
index 0000000..16a84be
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeResembleRule.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.code.mapper.CodeResembleRuleMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="CodeResembleRuleResultMap" type="com.vci.ubcs.code.entity.CodeResembleRule">
+        <id property="oid" column="OID"/>
+        <result property="btmname" column="BTMNAME"/>
+        <result property="revisionOid" column="REVISIONOID"/>
+        <result property="nameOid" column="NAMEOID"/>
+        <result property="lastR" column="LASTR"/>
+        <result property="firstR" column="FIRSTR"/>
+        <result property="lastV" column="LASTV"/>
+        <result property="firstV" column="FIRSTV"/>
+        <result property="creator" column="CREATOR"/>
+        <result property="createTime" column="CREATETIME"/>
+        <result property="lastModifier" column="LASTMODIFIER"/>
+        <result property="lastModifyTime" column="LASTMODIFYTIME"/>
+        <result property="revisionRule" column="REVISIONVALUE"/>
+        <result property="versionRule" column="VISIONRULE"/>
+        <result property="revisionValue" column="REVISIONRULE"/>
+        <result property="versionValue" column="VERSIONVALUE"/>
+        <result property="revisionSeq" column="REVISIONSEQ"/>
+        <result property="versionSeq" column="VERSIONSEQ"/>
+        <result property="lctid" column="LCTID"/>
+        <result property="lcStatus" column="LCSTATUS"/>
+        <result property="ts" column="TS"/>
+        <result property="id" column="ID"/>
+        <result property="name" column="NAME"/>
+        <result property="description" column="DESCRIPTION"/>
+        <result property="owner" column="OWNER"/>
+        <result property="copyFromVersion" column="COPYFROMVERSION"/>
+        <result property="ignoreCaseFlag" column="IGNORECASEFLAG"/>
+        <result property="ignoreSpaceFlag" column="IGNORESPACEFLAG"/>
+        <result property="ignoreAllSpaceFlag" column="IGNOREALLSPACEFLAG"/>
+        <result property="ignoreWidthFlag" column="IGNOREWIDTHFLAG"/>
+        <result property="linkCharacter" column="LINKCHARACTER"/>
+    </resultMap>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
index 9f357d7..e53c1fc 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
@@ -22,6 +22,10 @@
         ${inSql}
     </select>
 
+    <select id="queryByOnlySqlForMap" resultType="java.util.Map">
+        ${inSql}
+    </select>
+
     <insert id="insertByBaseModel" parameterType="java.util.Map">
         insert into ${tableName}
         (
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/pom.xml b/Source/UBCS/ubcs-service/ubcs-omd/pom.xml
index 64fa44e..5b2fc51 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/pom.xml
+++ b/Source/UBCS/ubcs-service/ubcs-omd/pom.xml
@@ -69,6 +69,12 @@
             <artifactId>orai18n</artifactId>
             <version>${orai18n.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-code-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/RevisionRuleController.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/RevisionRuleController.java
index 5df32ff..96e0c27 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/RevisionRuleController.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/RevisionRuleController.java
@@ -94,4 +94,16 @@
 		revisionRuleService.batchDelete(revisionRuleVOList);
 		return R.status(true);
 	}
+
+	/**
+	 * 鏌ョ湅浣跨敤鑼冨洿
+	 * @param id 鐗堟湰瑙勫垯id
+	 * @return 鎵ц缁撴灉
+	 */
+	@GetMapping("/get-apply-range")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鐗堟湰瑙勫垯id",notes = "浼犲叆id")
+	public R getApplyRange(String id){
+		return R.data(revisionRuleService.getApplyRange(id));
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IRevisionRuleService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IRevisionRuleService.java
index 3310980..21c6c00 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IRevisionRuleService.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IRevisionRuleService.java
@@ -188,4 +188,10 @@
 	 */
 	IPage<RevisionRuleVO> pageQueryVO(BaseQueryObject baseQueryObject) throws VciBaseException;
 
+	/**
+	 * 鏌ョ湅搴旂敤鑼冨洿
+	 * @param id id
+	 * @return 鎵ц缁撴灉
+	 */
+    List<BtmTypeVO> getApplyRange(String id);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java
index c5f1306..d98174c 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java
@@ -116,15 +116,10 @@
 	@Override
 	public List<BtmTypeVO> applyRange(String oid) {
 		List<BtmType> btmTypes = baseMapper.selectApplyRange(oid);
-		if (!CollectionUtils.isEmpty(btmTypes)){
-			return btmTypes.stream().map(btm -> {
-				BtmTypeVO vo = new BtmTypeVO();
-				vo.setId(btm.getId());
-				vo.setName(btm.getName());
-				return vo;
-			}).collect(Collectors.toList());
+		if (CollectionUtils.isEmpty(btmTypes)){
+			return null;
 		}
-		return null;
+		return BtmTypeWrapper.build().listEntityVO(btmTypes);
 	}
 
 	/**
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java
index 571c89d..409b4f2 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java
@@ -845,7 +845,7 @@
 		}else {
 			throw new VciBaseException("棰嗗煙鍚嶇О涓嶇鍚堣鍒�");
 		}
-		return PL + StringPool.UNDERSCORE + domain + StringPool.UNDERSCORE + id;
+		return PL + StringPool.UNDERSCORE + domain.toUpperCase(Locale.ROOT) + StringPool.UNDERSCORE + id.toUpperCase(Locale.ROOT);
 	}
 
 	/**
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/RevisionRuleServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/RevisionRuleServiceImpl.java
index 6bd5b0d..a662529 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/RevisionRuleServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/RevisionRuleServiceImpl.java
@@ -560,4 +560,16 @@
 		beanMap.putAll(conditionMap);
 		return RevisionRuleWrapper.build().pageVO(baseMapper.selectPage(Condition.getPage(query),Condition.getQueryWrapper(queryConditionObj).lambda().orderByAsc(RevisionRule::getId)));
 	}
+
+	/**
+	 * 鏌ョ湅搴旂敤鑼冨洿
+	 *
+	 * @param id id
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	public List<BtmTypeVO> getApplyRange(String id) {
+		VciBaseUtil.alertNotNull(id,"鐗堟湰瑙勫垯鑻辨枃鍚嶇О");
+		return BtmTypeWrapper.build().listEntityVO(btmTypeMapper.selectList(Wrappers.<BtmType>query().lambda().eq(BtmType::getRevisionRuleId,id)));
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeWrapper.java
index 7406ba9..47620ec 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeWrapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeWrapper.java
@@ -49,6 +49,7 @@
 		});
 		vo.setFromBtmTypes(fromBtm);
 		vo.setToBtmTypes(toBtm);
+		vo.setTableName(vo.getTableName().toUpperCase(Locale.ROOT));
 		// 鏋氫妇澶勭悊
 		vo.setDomainText(NewAppConstantEnum.getTextByName(vo.getDomain()));
 		return vo;
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/AttributeMapper.xml b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/AttributeMapper.xml
index 2baadc1..15d3763 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/AttributeMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/AttributeMapper.xml
@@ -51,8 +51,7 @@
     </select>
     <select id="selectApplyRange" resultType="com.vci.ubcs.omd.entity.BtmType">
         select
-            btm.name,
-            btm.ID
+            btm.*
         from pl_omd_btm_type btm
         join pl_omd_btm_type_attribute btmAttr on btmAttr.pk_btm_type = btm.oid
         join <include refid="tableName"/> attr on attr.id = btmAttr.id
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java
index 5f1dca7..4480390 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java
@@ -21,10 +21,7 @@
 import lombok.AllArgsConstructor;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
 import java.util.List;
@@ -65,6 +62,11 @@
 	public R<Menu> getMenu(Long id) {
 		return R.data(menuService.getById(id));
 	}
+	@Override
+	@GetMapping(MENU_BUTTON)
+	public R<List<Menu>> getMenuButtonByType(String btmType) {
+		return R.data(menuService.getMenuButtonByType(btmType));
+	}
 
 	@Override
 	@GetMapping(DEPT)
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java
index 64bfdc7..f66512a 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java
@@ -124,6 +124,12 @@
 	 * @return
 	 */
 	List<Menu> allMenu();
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷鏌ヨ鑿滃崟鐨勫瓙鎸夐挳
+	 *
+	 * @return
+	 */
+	List<Menu> selectMenuChildByBtnType(String btmType);
 
 	/**
 	 * 鏉冮檺閰嶇疆鑿滃崟
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java
index ea50eeb..b6b738a 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java
@@ -18,6 +18,7 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.springblade.core.secure.BladeUser;
+import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.node.TreeNode;
 import org.springblade.core.tool.support.Kv;
 import com.vci.ubcs.system.entity.Menu;
@@ -162,5 +163,11 @@
 	 * @return
 	 */
 	boolean submit(Menu menu);
-
+	/**
+	 * 鑾峰彇鑿滃崟涓嬮潰鐨勬寜閽�
+	 *
+	 * @param btmType 涓氬姟绫诲瀷
+	 * @return List<Menu>
+	 */
+	List<Menu> getMenuButtonByType(String btmType);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
index b926374..dc5af71 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
@@ -30,9 +30,10 @@
 import com.vci.ubcs.system.service.ITopMenuSettingService;
 import com.vci.ubcs.system.wrapper.MenuWrapper;
 import lombok.AllArgsConstructor;
-import org.springblade.core.log.exception.ServiceException;
+import com.vci.ubcs.core.log.exception.ServiceException;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.node.TreeNode;
@@ -294,4 +295,9 @@
 		return saveOrUpdate(menu);
 	}
 
+    @Override
+    public List<Menu> getMenuButtonByType(String btmType) {
+		return baseMapper.selectMenuChildByBtnType(btmType);
+    }
+
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml
index bda18b0..50d8103 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml
@@ -475,4 +475,13 @@
         GROUP BY m.path
     </select>
 
+    <select id="selectMenuChildByBtnType" resultMap="menuResultMap">
+        select pm.*
+        from pl_sys_menu ps, pl_sys_menu pm
+        where ps.is_deleted = 0
+          and ps.category = 1
+          and ps.alias = #{btmType}
+          and ps.id = pm.parent_id order by pm.sort asc
+    </select>
+
 </mapper>

--
Gitblit v1.9.3