From 8c7dcc2604a23f6036e359190f153b7fce880466 Mon Sep 17 00:00:00 2001
From: fujunling <2984387807@qq.com>
Date: 星期五, 09 六月 2023 18:19:29 +0800
Subject: [PATCH] Merge branch 'master' of http://dev.vci-tech.com:1065/r/ubcs

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateAttrMapper.java            |    7 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java                         |    9 
 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-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java |    8 
 Source/UBCS-WEB/src/api/GetItem.js                                                                                       |    2 
 Source/UBCS-WEB/src/components/Tree/classifyTreeform.vue                                                                 |    1 
 Source/UBCS-WEB/vue.config.js                                                                                            |    9 
 Source/UBCS-WEB/src/api/template/templateAttr.js                                                                         |   10 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml                                            |    9 
 Source/UBCS-WEB/src/components/Master/MasterTree.vue                                                                     |   54 +
 Source/UBCS/ubcs-service/ubcs-omd/pom.xml                                                                                |    6 
 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/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/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/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java                              |   10 
 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-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-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/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java                 |    8 
 Source/UBCS-WEB/src/components/Tree/attrCrud.vue                                                                         |  476 +++++++++++++---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java                        |   15 
 37 files changed, 1,283 insertions(+), 296 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/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/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/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/vue.config.js b/Source/UBCS-WEB/vue.config.js
index 18858ab..d206271 100644
--- a/Source/UBCS-WEB/vue.config.js
+++ b/Source/UBCS-WEB/vue.config.js
@@ -27,10 +27,15 @@
       '/api': {
         //鏈湴鏈嶅姟鎺ュ彛鍦板潃
         //  target: 'http://localhost:37000',
-        //target: 'http://192.168.1.51: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',
         // target: 'http://192.168.1.63:37000',
         //target: 'http://192.168.3.7:37000',
-        target: 'http://dev.vci-tech.com:37000',
+        // target: 'http://dev.vci-tech.com:37000',
         //target: 'http://192.168.1.51:37000/',
         //杩滅▼婕旂ず鏈嶅姟鍦板潃,鍙敤浜庣洿鎺ュ惎鍔ㄩ」鐩�
         // target: 'https://saber.bladex.vip/api',
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/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/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/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-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