From 1d91a31301494b9f0b7e17b3eef280f8d54e2806 Mon Sep 17 00:00:00 2001
From: lihang <lihang@vci-tech.com>
Date: 星期二, 23 五月 2023 14:24:04 +0800
Subject: [PATCH] 新增状态池管理和版本规则管理

---
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleEventVO.java          |  113 -
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/ModifyAttributeInfoVO.java     |  241 ---
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/RevisionRuleMapper.java            |   14 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/RevisionRuleServiceImpl.java |  563 ++++++++
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/StatusWrapper.java                |   46 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleLineVO.java           |  158 --
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/RevisionRule.java          |  104 +
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleLineEventVO.java      |  122 -
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/RevisionRuleController.java    |   97 +
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/StatusController.java          |  102 +
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/StatusServiceImpl.java       |  459 ++++++
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleLineEvent.java    |    2 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/Status.java                |   82 +
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleVO.java               |  150 --
 Source/UBCS-WEB/src/api/omd/revisionRule.js                                                                |   75 +
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleRule.java         |    4 
 Source/UBCS-WEB/src/views/modeling/Version.vue                                                             |   90 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/RevisionRuleMapper.xml                         |   32 
 Source/UBCS-WEB/src/views/modeling/Business.vue                                                            |    5 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.java       |    4 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/RevisionRuleVO.java            |  155 --
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/RevisionRuleClient.java             |   97 +
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IStatusService.java               |  164 ++
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeMapper.java                 |    3 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/StatusMapper.xml                               |   26 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IRevisionRuleService.java         |  191 ++
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IStatusFallback.java        |   51 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleLine.java         |    2 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IStatusClient.java          |   69 +
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/RevisionRuleWrapper.java          |   46 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/StatusMapper.java                  |   13 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/StatusVO.java                  |  117 -
 Source/UBCS-WEB/src/views/modeling/original.vue                                                            |   27 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleEvent.java        |    2 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java                |    4 
 Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue                                                         |  172 ++
 Source/UBCS-WEB/src/views/modeling/status.vue                                                              |  141 ++
 Source/UBCS-WEB/src/api/omd/status.js                                                                      |   75 +
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/StatusClient.java                   |   79 +
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IRevisionRuleClient.java    |   92 +
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IRevisionRuleFallback.java  |   74 +
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java        |    3 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java      |   25 
 43 files changed, 2,972 insertions(+), 1,119 deletions(-)

diff --git a/Source/UBCS-WEB/src/api/omd/revisionRule.js b/Source/UBCS-WEB/src/api/omd/revisionRule.js
new file mode 100644
index 0000000..ac3ce70
--- /dev/null
+++ b/Source/UBCS-WEB/src/api/omd/revisionRule.js
@@ -0,0 +1,75 @@
+import request from '@/router/axios';
+
+export const getPage = (current,size,params) => {
+    return request({
+        url: '/api/ubcs-omd/revision-rule/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}
+
+export const getDetail = (oid) => {
+    return request({
+        url: '/api/ubcs-omd/revision-rule/detail',
+        method: 'get',
+        params: {
+            oid: oid
+        }
+    })
+}
+
+export const add = (rule) => {
+    return request({
+        url: '/api/ubcs-omd/revision-rule/submit',
+        method: 'post',
+        data: rule
+    })
+}
+
+export const batchAdd = (rules) => {
+    return request({
+        url: '/api/ubcs-omd/revision-rule/batch-submit',
+        method: 'post',
+        data: rules
+    })
+}
+
+export const update = (rule) => {
+    return request({
+        url: '/api/ubcs-omd/revision-rule/submit',
+        method: 'post',
+        data: rule
+    })
+}
+
+export const batchUpdate = (rules) => {
+    return request({
+        url: '/api/ubcs-omd/revision-rule/batch-submit',
+        method: 'post',
+        data: rules
+    })
+}
+
+export const remove = (rule) => {
+    return request({
+        url: '/api/ubcs-omd/revision-rule/remove',
+        method: 'post',
+        data: rule
+    })
+}
+
+export const refList = (currentPage,pageSize,params) => {
+    return request({
+        url: '/api/ubcs-omd/revision-rule/ref',
+        method: 'get',
+        params: {
+            ...params,
+            currentPage,
+            pageSize
+        }
+    })
+}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/api/omd/status.js b/Source/UBCS-WEB/src/api/omd/status.js
new file mode 100644
index 0000000..e80f0f8
--- /dev/null
+++ b/Source/UBCS-WEB/src/api/omd/status.js
@@ -0,0 +1,75 @@
+import request from '@/router/axios';
+
+export const getPage = (current,size,params) => {
+    return request({
+        url: '/api/ubcs-omd/status/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}
+
+export const getDetail = (oid) => {
+    return request({
+        url: '/api/ubcs-omd/status/detail',
+        method: 'get',
+        params: {
+            oid: oid
+        }
+    })
+}
+
+export const add = (rule) => {
+    return request({
+        url: '/api/ubcs-omd/status/submit',
+        method: 'post',
+        data: rule
+    })
+}
+
+export const batchAdd = (rules) => {
+    return request({
+        url: '/api/ubcs-omd/status/batch-submit',
+        method: 'post',
+        data: rules
+    })
+}
+
+export const update = (rule) => {
+    return request({
+        url: '/api/ubcs-omd/status/submit',
+        method: 'post',
+        data: rule
+    })
+}
+
+export const batchUpdate = (rules) => {
+    return request({
+        url: '/api/ubcs-omd/status/batch-submit',
+        method: 'post',
+        data: rules
+    })
+}
+
+export const remove = (rule) => {
+    return request({
+        url: '/api/ubcs-omd/status/remove',
+        method: 'post',
+        data: rule
+    })
+}
+
+export const refList = (currentPage,pageSize,params) => {
+    return request({
+        url: '/api/ubcs-omd/status/ref',
+        method: 'get',
+        params: {
+            ...params,
+            currentPage,
+            pageSize
+        }
+    })
+}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/views/modeling/Business.vue b/Source/UBCS-WEB/src/views/modeling/Business.vue
index bcdfec8..483d1b1 100644
--- a/Source/UBCS-WEB/src/views/modeling/Business.vue
+++ b/Source/UBCS-WEB/src/views/modeling/Business.vue
@@ -119,10 +119,13 @@
         </el-main>
         <el-dialog :visible="ref.visible" title="浠庢暟鎹簱涓坊鍔�" width="700px" append-to-body @close="dialoghandelfalse">
           閫夋嫨棰嗗煙锛�
-          <el-select v-model="domain" placeholder="璇烽�夋嫨" @change="refOnLoad">
+          <el-select v-model="domain" placeholder="璇烽�夋嫨" @change="refOnLoad" size="small">
             <el-option v-for="item in domainOptions" :key="item.value" :label="item.label" :value="item.value">
             </el-option>
           </el-select>
+          <div class="sep" style="height:7px">
+
+          </div>
           <avue-crud class="businessCrud" v-model="ref.form" :option="ref.option" :data="ref.data" @selection-change="selectionChange">
           </avue-crud>
           <span slot="footer" class="dialog-footer">
diff --git a/Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue b/Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue
index 909692e..92098e3 100644
--- a/Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue
+++ b/Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue
@@ -5,6 +5,7 @@
     append-to-body
     @close="closeSubmitDialog"
     width="70%"
+    style="height: 115vh;"
     >
         <el-form ref="form" :model="btmType" show-message="true" inline size="medium" label-suffix=":" class="btmTypeForm">
                 
@@ -24,7 +25,8 @@
                 </el-select>
             </el-form-item>
             <el-form-item label="鐗堟湰瑙勫垯" label-width="100px">
-                <el-input v-model="btmType.revisionRuleId" :prefix-icon="icons.revisionRule" class="revisionRule">
+                <el-input v-model="btmType.revisionRuleName" :prefix-icon="icons.revisionRule" class="revisionRule"
+                @focus="openRevision" clearable @clear="clearRevision">
                     <i slot="suffix" class="el-input__icon el-icon-search"></i>
                 </el-input>
             </el-form-item>
@@ -45,6 +47,7 @@
                 <el-input v-model="btmType.description" 
                 :prefix-icon="icons.desc" 
                 class="descClass"
+                id="descId"
                 ></el-input>
             </el-form-item>
         </el-form>
@@ -63,11 +66,11 @@
             
         </avue-crud>
         <div slot="footer" class="dialog-footer">
-            <el-button @click="submitBtmType">纭畾</el-button>
+            <el-button type="primary" @click="submitBtmType">纭畾</el-button>
             <el-button @click="cancleSubmitBtmType">鍙栨秷</el-button>
         </div>
 
-
+<!-- 灞炴�ф睜鐨勯�夋嫨 -->
         <el-dialog title="灞炴�ф睜"
             :visible="attrRef.visible"
             append-to-body
@@ -91,6 +94,30 @@
                 <el-button @click="cancleSelectAttr">鍙栨秷</el-button>
             </div>
         </el-dialog>
+<!-- 鐗堟湰瑙勫垯鐨勫弬鐓� -->
+        <el-dialog title="璇烽�夋嫨鐗堟湰瑙勫垯"
+            :visible.sync="revisionRef.visible"
+            append-to-body
+            width="80%">
+            
+            <avue-crud class="revisionRef"
+             :option="revisionRef.option"
+             :data="revisionRef.data"
+             :page.sync="revisionRef.page"
+             ref="revisionRef"
+             @row-click="revisionClick">
+                <template slot="radio"
+                slot-scope="{row}">
+                    <el-radio v-model="revisionRef.selectRow"
+                        :label="row.$index">&nbsp;
+                    </el-radio>
+                </template>
+            </avue-crud>
+            <div slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="confirmRevision">纭畾</el-button>
+                <el-button @click="cancelRevision">鍙栨秷</el-button>
+            </div>
+        </el-dialog>
     </el-dialog>
 </template>
 
@@ -99,6 +126,7 @@
 
 import { add,update } from '@/api/omd/btmType';
 import { queryPage } from '@/api/omd/OmdAttribute';
+import { getPage } from '@/api/omd/revisionRule';
 export default {
     name: 'BusinessAdd',
     props: {
@@ -125,6 +153,7 @@
                 rowKey: 'id',
                 tabs: true,
                 menu: false,
+                addBtn:false,
                 highlightCurrentRow: true,
                 column: [
                     {
@@ -146,14 +175,12 @@
                     {
                         label: "榛樿鍊�",
                         prop: "defaultValue",
-                        cell: 'true',
                         align: 'center',
                         cell: true
                     },
                     {
                         label: "璇存槑",
                         prop: "description",
-                        cell: 'true',
                         align: 'center',
                         cell:true
                     }
@@ -176,6 +203,7 @@
                     border: true,
                     reserveSelection: true,
                     searchMenuSpan:8,
+                    highlightCurrentRow: true,
                     column: [
                         {
                         label: '鑻辨枃鍚嶇О',
@@ -223,13 +251,77 @@
                 },
                 data: [],
                 queryNotIn: null
-            }
+            },
+            revisionRef: {
+                visible: false,
+                page: {
+                    currentPage:1,
+                    pageSize: 10
+                },
+                selectRow:'',
+                searchKey: null,
+                option:{
+                    height: 360,
+                    addBtn: false,
+                    refreshBtn: false,
+                    columnBtn: false,
+                    menu: false,
+                    border: true,
+                    reserveSelection: true,
+                    searchMenuSpan:8,
+                    searchShowBtn: false,
+                    highlightCurrentRow: true,
+                    column:[{
+                        label: '閫夋嫨',
+                        prop: 'radio',
+                        width: 60,
+                        hide: false
+                    },
+                        {
+                            label:'鑻辨枃鍚嶇О',
+                            prop: 'id',
+                            search:true
+                        },
+                        {
+                            label:"涓枃鍚嶇О",
+                            prop:"name",
+                            search:true,
+                        },
+                        {
+                            label:"璺宠穬瀛楃",
+                            prop: "skipCode"
+                        },
+                        {
+                            label: "鍒濆鍊�",
+                            prop:"startCode"
+                        },
+                        {
+                            label: "姝ラ暱",
+                            prop: "serialStep"
+                        },
+                        {
+                            label: "鍓嶇紑",
+                            prop:"prefixCode"
+                        },
+                        {
+                            label: "鍚庣紑",
+                            prop: "suffixCode"
+                        },
+                        {
+                            label: "鎻忚堪",
+                            prop:"description",
+                            type:"textarea"
+                        }
+                    ]
+                },
+            },
         }
     },
     created() {
 
     },
     methods: {
+        // 鍏抽棴缁勪欢寮圭獥
         closeSubmitDialog(){
             this.showSubmitDialog = false;
             this.btmType.attributes = [];
@@ -237,13 +329,16 @@
             this.attrRef.selectData = [];
             this.attrRef.queryNotIn = null;
         },
+        // 鍏抽棴灞炴�ф睜鏌ヨ寮圭獥
         closeAttrDialog(){
             this.attrRef.visible = false;
         },
+        // 娣诲姞
         rowAdd(){
             this.attrRef.visible = true;
             this.attrRefOnLoad();
         },
+        // 灞炴�ф睜鍔犺浇
         attrRefOnLoad(){
             queryPage(this.attrRef.key,this.attrRef.queryNotIn,this.attrRef.page.currentPage, this.attrRef.page.pageSize).then(res => {
                 const data = res.data.data;
@@ -254,15 +349,18 @@
                 this.$refs.attrRef.refreshTable();
             });
         },
+        // 灞炴�ф睜妫�绱�
         attrRefSearch(form,done){
             this.attrRef.key = form.key;
             this.attrRefOnLoad();
             done();
             this.attrRef.key = null;
         },
+        // 灞炴�ф睜鍕鹃�変簨浠�
         selectionChange(list){
             this.attrRef.selectData = list;
         },
+        // 纭灞炴�ф睜鍕鹃��
         confirmSelectAttr(){
             this.btmType.attributes = [];
             this.attrRef.queryNotIn = "";
@@ -281,10 +379,12 @@
             });
             this.closeAttrDialog();
         },
+        // 鍙栨秷灞炴�ф睜鍕鹃��
         cancleSelectAttr(){
             this.attrRef.selectData = [];
             this.closeAttrDialog();
         },
+        // 娣诲姞涓氬姟绫诲瀷
         submitBtmType(){
             console.log(this.btmType);
             add(this.btmType,true).then(res => {
@@ -294,28 +394,78 @@
                 this.$emit('refreshTable');
             })
         },
+        // 鍙栨秷娣诲姞涓氬姟绫诲瀷
         cancleSubmitBtmType(){
             this.btmType = {};
             this.btmType.attributes = [];
             this.showSubmitDialog = false;
         },
+        // 鍒锋柊灞炴�у垪琛�
         refreshAttrTable(){
             this.$nextTick( () => {
                 this.$refs.attrTable.refreshTable();
             })
         },
+        // 
         viewChange(){
 
         },
+        // 鍒楄〃缂栬緫
         cellEditClick(cell){
             cell.$cellEdit = true;
         },
+        // 鍒楄〃缂栬緫淇濆瓨
         cellEditSave(row){
             this.btmType.attributes[row.$index].name = row.name
             this.btmType.attributes[row.$index].defaultValue = row.defaultValue;
             this.btmType.attributes[row.$index].description = row.description;
             row.$cellEdit = false;
-        }
+        },
+        // 鎵撳紑鐗堟湰瑙勫垯鍙傜収
+        async openRevision(){
+            await getPage().then(res => {
+                this.revisionRef.data = res.data.data.records;
+            });
+            this.revisionRef.visible = true;
+        },
+       // 鍏抽棴鐗堟湰瑙勫垯鍙傜収寮圭獥
+       closeRevisionDialog(){
+            this.revisionRef.visible = false;
+       },
+       // 鐗堟湰瑙勫垯鍙傜収鍒楄〃妫�绱�
+       revisionRefSearch(){
+
+       },
+       // 鐗堟湰瑙勫垯閫変腑浜嬩欢
+       revisionChange(){},
+       // 纭閫変腑鐗堟湰瑙勫垯
+       confirmRevision(){
+            this.btmType.revisionFlag = true;
+            this.btmType.revisionRuleId = this.revisionRef.selectData.id;
+            this.btmType.revisionRuleName = this.revisionRef.selectData.name;
+            this.btmType.inputRevisionFlag = false;
+            this.cancelRevision();
+       },
+       // 鍙栨秷閫変腑鐗堟湰瑙勫垯
+       cancelRevision(){
+            this.revisionRef.selectRow  = '';
+            this.revisionRef.selectData = {};
+            this.closeRevisionDialog();
+       },
+       // 鐗堟湰瑙勫垯鍗曢��
+       revisionClick(row){
+            this.revisionRef.selectRow = row.$index;
+            this.revisionRef.selectData = {
+                id: row.id,
+                name: row.name,
+            };
+       },
+       clearRevision(){
+            this.$delete(this.btmType,'revisionFlag');
+            this.$delete(this.btmType,'revisionRuleId');
+            this.$delete(this.btmType,'revisionRuleName');
+            this.$delete(this.btmType,'inputRevisionFlag');
+       }
     }
 }
 </script>
@@ -323,6 +473,10 @@
 <style>
 /* 灞炴�ф睜鍙傜収鍒楄〃 */
 .attrRef > .el-card:nth-of-type(2) > .el-card__body > .avue-crud__menu{
+    display: none !important;
+}
+
+.revisionRef > .el-card:nth-of-type(2) > .el-card__body > .avue-crud__menu{
     display: none !important;
 }
 
@@ -337,4 +491,8 @@
 .descClass > .el-input__inner {
     width: 57vw
 }
+
+#descId {
+    width: 57vw;
+}
 </style>
diff --git a/Source/UBCS-WEB/src/views/modeling/Version.vue b/Source/UBCS-WEB/src/views/modeling/Version.vue
index 929a250..3941b86 100644
--- a/Source/UBCS-WEB/src/views/modeling/Version.vue
+++ b/Source/UBCS-WEB/src/views/modeling/Version.vue
@@ -34,6 +34,7 @@
 </template>
 
 <script>
+import { getPage,add,update,remove } from '../../api/omd/revisionRule';
 export default {
   name: "Version",
   data(){
@@ -47,36 +48,6 @@
         total: 100
       },
       data:[
-        {
-          name:"娴嬭瘯1",
-          tag:"娴嬭瘯",
-          char:"娴嬭瘯",
-          Initial:"娴嬭瘯",
-          Step:"娴嬭瘯",
-          prefix:"娴嬭瘯",
-          suffix:"娴嬭瘯",
-          desc:"娴嬭瘯"
-        },
-        {
-          name:"娴嬭瘯2",
-          tag:"娴嬭瘯",
-          char:"娴嬭瘯",
-          Initial:"娴嬭瘯",
-          Step:"娴嬭瘯",
-          prefix:"娴嬭瘯",
-          suffix:"娴嬭瘯",
-          desc:"娴嬭瘯"
-        },
-        {
-          name:"娴嬭瘯3",
-          tag:"娴嬭瘯",
-          char:"娴嬭瘯",
-          Initial:"娴嬭瘯",
-          Step:"娴嬭瘯",
-          prefix:"娴嬭瘯",
-          suffix:"娴嬭瘯",
-          desc:"娴嬭瘯"
-        }
       ],
       form:{},
       option:{
@@ -87,37 +58,37 @@
         searchMenuSpan:5,
         column:[
           {
-            label:"鍚嶇О",
+            label:'鑻辨枃鍚嶇О',
+            prop: 'id'
+          },
+          {
+            label:"涓枃鍚嶇О",
             prop:"name",
             search:true,
           },
           {
-            label: "鏍囩",
-            prop:"tag"
-          },
-          {
             label:"璺宠穬瀛楃",
-            prop:"char"
+            prop: "skipCode"
           },
           {
             label: "鍒濆鍊�",
-            prop:"Initial"
+            prop:"startCode"
           },
           {
-            label:"姝ラ暱",
-            prop:"Step"
+            label: "姝ラ暱",
+            prop: "serialStep"
           },
           {
             label: "鍓嶇紑",
-            prop:"prefix"
+            prop:"prefixCode"
           },
           {
             label: "鍚庣紑",
-            prop: "suffix"
+            prop: "suffixCode"
           },
           {
             label: "鎻忚堪",
-            prop:"desc",
+            prop:"description",
             type:"textarea"
           }
         ]
@@ -128,25 +99,17 @@
     handleSearch(){
       this.packageSearchBox=true
     },
-    // getList() {
-    //   this.loading = true;
-    //   const data = Object.assign({
-    //     pageNum: this.page.currentPage,
-    //     pageSize: this.page.pageSize,
-    //   }, this.params)
-    //   this.data = [];
-    //   getList(data).then(res => {
-    //     const data = res.data.data
-    //     this.loading = false;
-    //     this.page.total = data.total;
-    //     const result = data.list;
-    //     this.data = result;
-    //   })
-    // },
+    getList() {
+      this.loading = true;
+      getPage(this.page.currentPage,this.page.pageSize,this.params).then(res => {
+        const data = res.data.data
+        this.loading = false;
+        this.page.total = data.total;
+        this.data = data.records;
+      })
+    },
     rowSave(row, done, loading) {
-      add(Object.assign({
-        createUser: this.userInfo.name
-      }, row)).then(() => {
+      add(row).then(() => {
         this.$message.success('鏂板鎴愬姛')
         done();
         this.getList();
@@ -155,9 +118,7 @@
       })
     },
     rowUpdate(row, index, done, loading) {
-      update(Object.assign({
-        updateUser: this.userInfo.name
-      }, row)).then(() => {
+      update(row).then(() => {
         this.$message.success('淇敼鎴愬姛')
         done()
         this.getList();
@@ -171,7 +132,8 @@
         cancelButtonText: '鍙栨秷',
         type: 'warning'
       }).then(() => {
-        return del(row.id)
+        console.log(row);
+        return remove({oid : row.oid})
       }).then(() => {
         this.$message.success('鍒犻櫎鎴愬姛')
         this.getList();
diff --git a/Source/UBCS-WEB/src/views/modeling/original.vue b/Source/UBCS-WEB/src/views/modeling/original.vue
index 72a86fc..0521748 100644
--- a/Source/UBCS-WEB/src/views/modeling/original.vue
+++ b/Source/UBCS-WEB/src/views/modeling/original.vue
@@ -4,14 +4,19 @@
       <basic-container>
         <avue-crud v-model="form" :option="option" :data="data" ref="crud" @on-load="onLoad" @row-save="rowSave"
           @row-update="rowUpdate" :before-open="beforeOpen" @row-del="rowDel" :page.sync="page"
-          @refresh-change="refreshChange" @row-click="rowClick">
+          @refresh-change="refreshChange" @row-click="rowClick"
+          @selection-change="selectChange">
           <template slot-scope="{row,index,type}" slot="selInputForm">
           <div style="margin-left: 75px">
             <el-input v-model="form.text" :size="size" style="width: 210px" :readonly="true" @focus="selectBtmType" :disabled="referType.disable"></el-input>
-            <!-- <el-button type="primary" style="margin-left: 10px" @click="addHandle">閫夋嫨</el-button> -->
-            <!-- <el-button type="info">鍙栨秷</el-button> -->
           </div>
         </template>
+        <template slot="radio"
+                slot-scope="{row}">
+                    <el-radio v-model="selectRow"
+                        :label="row.$index">&nbsp;
+                    </el-radio>
+                </template>
         </avue-crud>
         <el-dialog :visible.sync="referType.display" append-to-body :title="referType.title" width="1000px">
           <original-range @rowchange="rowchange"></original-range>
@@ -136,18 +141,24 @@
         currentPage: 1,
         total: 100
       },
+      selectRow: '',
       data: [
 
       ],
       option: {
         height: "550px",
-        selection: true,
         headerAlign: 'center',
         border: true,
         index: true,
         rowKey: 'id',
         tabs: true,
-        column: [
+        highlightCurrentRow: true,
+        column: [{
+            label: '閫夋嫨',
+            prop: 'radio',
+            width: 60,
+            hide: false
+          },
           {
             label: '灞炴�х紪鍙�',
             prop: 'key',
@@ -544,12 +555,14 @@
       })
     },
     rowClick(row) {
-      this.itemData = row
+      this.itemData = row;
+      this.selectRow = row.$index;
+
     }
     ,selectBtmType(){
         this.referType.display = true;
         this.referType.title = "璇烽�夋嫨" + this.referType.value
-    }
+    },
   },
 }
 </script>
diff --git a/Source/UBCS-WEB/src/views/modeling/status.vue b/Source/UBCS-WEB/src/views/modeling/status.vue
new file mode 100644
index 0000000..b6fac49
--- /dev/null
+++ b/Source/UBCS-WEB/src/views/modeling/status.vue
@@ -0,0 +1,141 @@
+<template>
+    <basic-container>
+      <avue-crud ref="crud"
+                 v-model="form"
+                 :data="data"
+                 :option="option"
+                 :page.sync="page"
+                 @on-load="getList"
+                 @row-update="rowUpdate"
+                 @row-save="rowSave"
+                 @row-del="rowDel"
+                 @refresh-change="refreshChange"
+                 @search-reset="searchChange"
+                 @search-change="searchChange">
+        <template slot="menuLeft">
+          <el-tooltip class="item" effect="dark" content="鏌ユ壘鐘舵�佹睜浣跨敤鑼冨洿" placement="top">
+            <el-button size="small"
+                       plain
+                       type="primary"
+                       icon="el-icon-zoom-in"
+                       @click="handleSearch">鏌ョ湅浣跨敤鑼冨洿
+            </el-button>
+          </el-tooltip>
+        </template>>
+      </avue-crud>
+      <el-dialog title="鏌ョ湅浣跨敤鑼冨洿"
+                 append-to-body
+                 :visible.sync="packageSearchBox"
+                 width="1200px">
+        <versionpackage></versionpackage>
+      </el-dialog>
+    </basic-container>
+  
+  </template>
+  
+  <script>
+  import { getPage,add,update,remove } from '../../api/omd/status';
+  export default {
+    name: "status",
+    data(){
+      return {
+        //鏌ョ湅浣跨敤鑼冨洿
+        packageSearchBox:false,
+        //鍒嗛〉鏁版嵁
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 100
+        },
+        data:[
+        ],
+        form:{},
+        option:{
+          headerAlign:'center',
+          align: 'center',
+          border: true,
+          index: true,
+          searchMenuSpan:5,
+          column:[
+            {
+              label:'鑻辨枃鍚嶇О',
+              prop: 'id',
+              search: true
+            },
+            {
+              label:"涓枃鍚嶇О",
+              prop:"name",
+              search:true,
+            },
+            {
+              label: "鎻忚堪",
+              prop:"description",
+              type:"textarea"
+            }
+          ]
+        }
+      }
+    },
+    methods:{
+      handleSearch(){
+        this.packageSearchBox=true
+      },
+      getList() {
+        this.loading = true;
+        getPage(this.page.currentPage,this.page.pageSize,this.params).then(res => {
+          const data = res.data.data
+          this.loading = false;
+          this.page.total = data.total;
+          this.data = data.records;
+        })
+      },
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.$message.success('鏂板鎴愬姛')
+          done();
+          this.getList();
+        }).catch(() => {
+          loading()
+        })
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.$message.success('淇敼鎴愬姛')
+          done()
+          this.getList();
+        }).catch(() => {
+          loading()
+        })
+      },
+      rowDel(row) {
+        this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎, 鏄惁缁х画?', '鎻愮ず', {
+          confirmButtonText: '纭畾',
+          cancelButtonText: '鍙栨秷',
+          type: 'warning'
+        }).then(() => {
+          console.log(row);
+          return remove({oid : row.oid})
+        }).then(() => {
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.getList();
+        })
+      },
+      searchChange(params, done) {
+        if (done) done();
+        this.params = params;
+        this.page.currentPage = 1;
+        this.getList();
+        this.$message.success('鎼滅储鎴愬姛')
+      },
+      refreshChange() {
+        this.getList();
+        this.$message.success('鍒锋柊鎴愬姛')
+      }
+    }
+  }
+  </script>
+  
+  <style scoped>
+  
+  </style>
+  
\ No newline at end of file
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleEvent.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleEvent.java
index 1832c80..73adf55 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleEvent.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleEvent.java
@@ -14,7 +14,7 @@
  * @date 2019/10/17 9:32
  */
 @Data
-@TableName("pl_omd_lift_cycle_event")
+@TableName("pl_omd_life_cycle_event")
 @ApiModel(value = "鐢熷懡鍛ㄦ湡浜嬩欢闆嗗悎", description = "鐢熷懡鍛ㄦ湡浜嬩欢闆嗗悎")
 public class LifeCycleEvent implements java.io.Serializable{
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleLine.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleLine.java
index 1d3b5ff..88fd971 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleLine.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleLine.java
@@ -14,7 +14,7 @@
  * @date 2019/10/10 6:56 PM
  */
 @Data
-@TableName("pl_omd_lift_cycle_line")
+@TableName("pl_omd_life_cycle_line")
 @ApiModel(value = "鐢熷懡鍛ㄦ湡鐘舵�佽繛鎺ョ嚎", description = "鐢熷懡鍛ㄦ湡鐘舵�佽繛鎺ョ嚎")
 public class LifeCycleLine implements java.io.Serializable {
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleLineEvent.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleLineEvent.java
index 74760c2..ad1f478 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleLineEvent.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleLineEvent.java
@@ -14,7 +14,7 @@
  * @date 2019/10/11 2:49 PM
  */
 @Data
-@TableName("pl_omd_lift_cycle_line_event")
+@TableName("pl_omd_life_cycle_line_event")
 @ApiModel(value = "鐢熷懡鍛ㄦ湡鐘舵�佽繛鎺ョ嚎", description = "鐢熷懡鍛ㄦ湡鐘舵�佽繛鎺ョ嚎")
 public class LifeCycleLineEvent implements java.io.Serializable{
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleRule.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleRule.java
index af28860..bebe70c 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleRule.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleRule.java
@@ -14,7 +14,7 @@
  * @date 2019/10/10 5:59 PM
  */
 @Data
-@TableName("pl_omd_lift_cycle_rule")
+@TableName("pl_omd_life_cycle_rule")
 @ApiModel(value = "鐢熷懡鍛ㄦ湡瑙勫垯", description = "鐢熷懡鍛ㄦ湡瑙勫垯")
 public class LifeCycleRule implements java.io.Serializable {
 
@@ -60,7 +60,7 @@
     /**
      * 涓氬姟绫诲瀷鍚嶇О
      */
-    private String btmname;
+    private String btmName;
 
     /**
      * 鎷ユ湁鑰�
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/RevisionRule.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/RevisionRule.java
new file mode 100644
index 0000000..12964ad
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/RevisionRule.java
@@ -0,0 +1,104 @@
+package com.vci.ubcs.omd.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Description: 鐗堟湰瑙勫垯
+ *
+ * @author LiHang
+ * @date 2023/5/17
+ */
+@Data
+@TableName("pl_omd_revision_rule")
+@ApiModel(value = "鐗堟湰瑙勫垯", description = "鐗堟湰瑙勫垯")
+public class RevisionRule implements Serializable {
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = -8011164573572900457L;
+	/**
+	 * 涓婚敭
+	 */
+	private String oid;
+
+	/**
+	 * 鑻辨枃鍚嶇О
+	 */
+	private String id;
+
+	/**
+	 * 涓枃鍚嶇О
+	 */
+	private String name;
+
+	/**
+	 * 璺宠穬瀛楃
+	 */
+	private String skipCode;
+
+	/**
+	 * 鍒濆鍊�
+	 */
+	private String startCode;
+
+	/**
+	 * 姝ラ暱
+	 */
+	private Integer serialStep;
+
+	/**
+	 * 鍓嶇紑
+	 */
+	private String prefixCode;
+
+	/**
+	 * 鍚庣紑
+	 */
+	private String suffixCode;
+
+	/**
+	 * 鎻忚堪
+	 */
+	private String description;
+
+
+	/**
+	 * 涓氬姟绫诲瀷鍚嶇О
+	 */
+	private String btmName;
+
+	/**
+	 * 鎷ユ湁鑰�
+	 */
+	private String owner;
+
+	/**
+	 * 鍒涘缓浜�
+	 */
+	private String creator;
+
+	/**
+	 * 鍒涘缓鏃堕棿
+	 */
+	private Date createTime;
+
+	/**
+	 * 鏈�鍚庝慨鏀逛汉
+	 */
+	private String lastModifier;
+
+	/**
+	 * 鏈�鍚庝慨鏀规椂闂达紝鏍煎紡鏄痽yyy-MM-dd HH:mm:ss
+	 */
+	private Date lastModifyTime;
+
+	/**
+	 * 鏃堕棿鎴筹紝鏍煎紡鏄痽yyy-MM-dd HH:mm:ss.SSS
+	 */
+	private Date ts;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/Status.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/Status.java
new file mode 100644
index 0000000..5bf9899
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/Status.java
@@ -0,0 +1,82 @@
+package com.vci.ubcs.omd.entity;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Description:鐘舵�佹睜瀵硅薄
+ *
+ * @author LiHang
+ * @date 2023/5/23
+ */
+@Data
+@TableName("pl_omd_status")
+@ApiModel(value = "鐘舵�佹睜瀵硅薄", description = "鐘舵�佹睜瀵硅薄")
+public class Status implements Serializable {
+
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 5914235157247110985L;
+
+	/**
+	 * 涓婚敭
+	 */
+	private String oid;
+
+	/**
+	 * 鐘舵�佽嫳鏂囧悕绉�
+	 */
+	private String id;
+
+	/**
+	 * 鐘舵�佷腑鏂囧悕绉�
+	 */
+	private String name;
+
+	/**
+	 * 鎻忚堪
+	 */
+	private String description;
+
+	/**
+	 * 涓氬姟绫诲瀷鍚嶇О
+	 */
+	private String btmName;
+
+	/**
+	 * 鎷ユ湁鑰�
+	 */
+	private String owner;
+
+	/**
+	 * 鍒涘缓浜�
+	 */
+	private String creator;
+
+	/**
+	 * 鍒涘缓鏃堕棿
+	 */
+	private Date createTime;
+
+	/**
+	 * 鏈�鍚庝慨鏀逛汉
+	 */
+	private String lastModifier;
+
+	/**
+	 * 鏈�鍚庝慨鏀规椂闂达紝鏍煎紡鏄痽yyy-MM-dd HH:mm:ss
+	 */
+	private Date lastModifyTime;
+
+	/**
+	 * 鏃堕棿鎴筹紝鏍煎紡鏄痽yyy-MM-dd HH:mm:ss.SSS
+	 */
+	private Date ts;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IRevisionRuleClient.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IRevisionRuleClient.java
new file mode 100644
index 0000000..ef2da98
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IRevisionRuleClient.java
@@ -0,0 +1,92 @@
+package com.vci.ubcs.omd.feign;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.omd.vo.RevisionRuleVO;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.tool.api.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Description:鐗堟湰瑙勫垯Feign鎺ュ彛绫�
+ *
+ * @author LiHang
+ * @date 2023/5/22
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_NAME_OMD,
+	fallback = IRevisionRuleFallback.class
+)
+public interface IRevisionRuleClient {
+
+	/**
+	 * 鍓嶇紑
+	 */
+	String API_PREFIX = "/client";
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 */
+	String GET_REF_PAGE = API_PREFIX + "/revision-rule/get-ref-page";
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ鏃犲垎椤�
+	 */
+	String GET_REF = API_PREFIX + "/revision-rule/get-ref";
+	/**
+	 * 鍙傜収鏄庣粏
+	 */
+	String GET_DETAIL = API_PREFIX + "/revision-rule/get-detail";
+	/**
+	 * 鑻辨枃鍚嶇О鎵归噺鏌ヨ
+	 */
+	String GET_BY_IDS = API_PREFIX + "/revision-rule/get-by-ids";
+	/**
+	 * 涓婚敭鎵归噺鏌ヨ
+	 */
+	String GET_BY_OIDS = API_PREFIX + "/revision-rule/get-by-oids";
+
+	/**
+	 * 鑾峰彇鐗堟湰瑙勫垯璇︽儏淇℃伅
+	 *
+	 * @param oid 涓婚敭
+	 * @return 鐗堟湰瑙勫垯璇︽儏淇℃伅
+	 */
+	@GetMapping(GET_DETAIL)
+	R<RevisionRuleVO> getDetail(@RequestParam("oid") String oid);
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 * @param baseQueryObject 鏌ヨ鏉′欢
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@GetMapping(GET_REF_PAGE)
+	R<IPage<RevisionRuleVO>> getRefPage(@RequestParam("baseQueryObject") BaseQueryObject baseQueryObject);
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 * @param baseQueryObject 鏌ヨ鏉′欢
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@GetMapping(GET_REF)
+	R<List<RevisionRuleVO>> getRef(@RequestParam("baseQueryObject")BaseQueryObject baseQueryObject);
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鏌ヨ瀵硅薄
+	 * @param ids 瀵硅薄鑻辨枃鍚嶇О 浣嗘槸涓嶈兘瓒呰繃1000
+	 * @return 涓氬姟瀵硅薄
+	 */
+	@GetMapping(GET_BY_IDS)
+	R<List<RevisionRuleVO>> selectByIdCollection(List<String> ids);
+
+	/**
+	 * 鎵归噺鏍规嵁涓婚敭鑾峰彇鐗堟湰瑙勫垯
+	 * @param pkBtmTypeCollection 鐗堟湰瑙勫垯涓婚敭闆嗗悎
+	 * @return 鐗堟湰瑙勫垯鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 */
+	@GetMapping(GET_BY_OIDS)
+	R<List<RevisionRuleVO>> listBtmTypeByOidCollection(Collection<String> pkBtmTypeCollection);
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IRevisionRuleFallback.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IRevisionRuleFallback.java
new file mode 100644
index 0000000..ebd891e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IRevisionRuleFallback.java
@@ -0,0 +1,74 @@
+package com.vci.ubcs.omd.feign;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.omd.vo.RevisionRuleVO;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Description: Feign澶辫触绫�
+ *
+ * @author LiHang
+ * @date 2023/5/22
+ */
+public class IRevisionRuleFallback implements IRevisionRuleClient{
+	/**
+	 * 鑾峰彇鐗堟湰瑙勫垯璇︽儏淇℃伅
+	 *
+	 * @param oid 涓婚敭
+	 * @return 鐗堟湰瑙勫垯璇︽儏淇℃伅
+	 */
+	@Override
+	public R<RevisionRuleVO> getDetail(String oid) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 *
+	 * @param baseQueryObject 鏌ヨ鏉′欢
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public R<IPage<RevisionRuleVO>> getRefPage(BaseQueryObject baseQueryObject) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 *
+	 * @param baseQueryObject 鏌ヨ鏉′欢
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public R<List<RevisionRuleVO>> getRef(BaseQueryObject baseQueryObject) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鏌ヨ瀵硅薄
+	 *
+	 * @param ids 瀵硅薄鑻辨枃鍚嶇О 浣嗘槸涓嶈兘瓒呰繃1000
+	 * @return 涓氬姟瀵硅薄
+	 */
+	@Override
+	public R<List<RevisionRuleVO>> selectByIdCollection(List<String> ids) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	/**
+	 * 鎵归噺鏍规嵁涓婚敭鑾峰彇鐗堟湰瑙勫垯
+	 *
+	 * @param pkBtmTypeCollection 鐗堟湰瑙勫垯涓婚敭闆嗗悎
+	 * @return 鐗堟湰瑙勫垯鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 */
+	@Override
+	public R<List<RevisionRuleVO>> listBtmTypeByOidCollection(Collection<String> pkBtmTypeCollection) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IStatusClient.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IStatusClient.java
new file mode 100644
index 0000000..16af72e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IStatusClient.java
@@ -0,0 +1,69 @@
+package com.vci.ubcs.omd.feign;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.omd.entity.Status;
+import com.vci.ubcs.omd.vo.StatusVO;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import com.vci.ubcs.starter.web.pagemodel.KeyValue;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.tool.api.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Description: 鐘舵�佹睜Feign鎺ュ彛绫�
+ *
+ * @author LiHang
+ * @date 2023/5/23
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_NAME_OMD,
+	fallback = IRevisionRuleFallback.class
+)
+public interface IStatusClient {
+	/**
+	 * 鍓嶇紑
+	 */
+	String API_PREFIX = "/client";
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 */
+	String GET_REF_PAGE = API_PREFIX + "/status/get-ref-page";
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ鏃犲垎椤�
+	 */
+	String GET_REF = API_PREFIX + "/status/get-ref";
+
+	/**
+	 * 鑻辨枃鍚嶇О鎵归噺鏌ヨ
+	 */
+	String GET_NAME_BY_IDS = API_PREFIX + "/status/get-name-by-ids";
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 * @param baseQueryObject 鏌ヨ鏉′欢瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	@GetMapping(GET_REF_PAGE)
+	R<IPage<StatusVO>> getRefPage(BaseQueryObject baseQueryObject);
+
+	/**
+	 * 鍙傜収鏌ヨ
+	 * @param baseQueryObject 鏌ヨ鏉′欢瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	@GetMapping(GET_REF)
+	R<List<StatusVO>> getRef(BaseQueryObject baseQueryObject);
+
+	/**
+	 * 鑻辨枃鏌ヨ涓枃鍚嶇О
+	 * @param ids 鑻辨枃
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@GetMapping(GET_NAME_BY_IDS)
+	R<Map<String,String>> getNameByIds(String ids);
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IStatusFallback.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IStatusFallback.java
new file mode 100644
index 0000000..2d2c6dd
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IStatusFallback.java
@@ -0,0 +1,51 @@
+package com.vci.ubcs.omd.feign;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.omd.vo.StatusVO;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import com.vci.ubcs.starter.web.pagemodel.KeyValue;
+import org.springblade.core.tool.api.R;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/5/23
+ */
+public class IStatusFallback implements IStatusClient{
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 *
+	 * @param baseQueryObject 鏌ヨ鏉′欢瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	public R<IPage<StatusVO>> getRefPage(BaseQueryObject baseQueryObject) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	/**
+	 * 鍙傜収鏌ヨ
+	 *
+	 * @param baseQueryObject 鏌ヨ鏉′欢瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	public R<List<StatusVO>> getRef(BaseQueryObject baseQueryObject) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	/**
+	 * 鑻辨枃鏌ヨ涓枃鍚嶇О
+	 *
+	 * @param ids 鑻辨枃
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public R<Map<String,String>> getNameByIds(String ids) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleEventVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleEventVO.java
index f3600ee..8ca36cb 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleEventVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleEventVO.java
@@ -1,12 +1,15 @@
 package com.vci.ubcs.omd.vo;
 
+import lombok.Data;
+
 import java.util.Date;
 
 /**
  * 鐢熷懡鍛ㄦ湡浜嬩欢鏄剧ず瀵硅薄
- * @author weidy
- * @date 2019/10/17 9:46
+ * @author LiHang
+ * @date 2023/4/3
  */
+@Data
 public class LifeCycleEventVO implements java.io.Serializable{
 
     /**
@@ -68,110 +71,4 @@
      * 鏃堕棿鎴筹紝鏍煎紡鏄痽yyy-MM-dd HH:mm:ss.SSS
      */
     private Date ts;
-
-    public String getEventFullName() {
-        return eventFullName;
-    }
-
-    public void setEventFullName(String eventFullName) {
-        this.eventFullName = eventFullName;
-    }
-
-    public String getEventShowName() {
-        return eventShowName;
-    }
-
-    public void setEventShowName(String eventShowName) {
-        this.eventShowName = eventShowName;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getLastModifier() {
-        return lastModifier;
-    }
-
-    public void setLastModifier(String lastModifier) {
-        this.lastModifier = lastModifier;
-    }
-
-    public Date getLastModifyTime() {
-        return lastModifyTime;
-    }
-
-    public void setLastModifyTime(Date lastModifyTime) {
-        this.lastModifyTime = lastModifyTime;
-    }
-
-    public Date getTs() {
-        return ts;
-    }
-
-    public void setTs(Date ts) {
-        this.ts = ts;
-    }
-
-    public String getOid() {
-        return oid;
-    }
-
-    public void setOid(String oid) {
-        this.oid = oid;
-    }
-
-
-    public String getBtmname() {
-        return btmname;
-    }
-
-    public void setBtmname(String btmname) {
-        this.btmname = btmname;
-    }
-
-    public String getOwner() {
-        return owner;
-    }
-
-    public void setOwner(String owner) {
-        this.owner = owner;
-    }
-
-    @Override
-    public String toString() {
-        return "OsLifeCycleEventVO{" +
-                "oid='" + oid + '\'' +
-                ", eventFullName='" + eventFullName + '\'' +
-                ", eventShowName='" + eventShowName + '\'' +
-                ", description='" + description + '\'' +
-                ", btmname='" + btmname + '\'' +
-                ", owner='" + owner + '\'' +
-                ", creator='" + creator + '\'' +
-                ", createTime=" + createTime +
-                ", lastModifier='" + lastModifier + '\'' +
-                ", lastModifyTime=" + lastModifyTime +
-                ", ts=" + ts +
-                '}';
-    }
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleLineEventVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleLineEventVO.java
index 6770a11..9db39af 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleLineEventVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleLineEventVO.java
@@ -1,13 +1,16 @@
 package com.vci.ubcs.omd.vo;
 
 
+import lombok.Data;
+
 import java.util.Date;
 
 /**
  * 鐢熷懡鍛ㄦ湡杩炴帴绾夸簨浠�
- * @author weidy
- * @date 2019/10/11 4:54 PM
+ * @author LiHang
+ * @date 2023/4/3
  */
+@Data
 public class LifeCycleLineEventVO implements java.io.Serializable{
 
     /**
@@ -74,119 +77,4 @@
      * 鏃堕棿鎴筹紝鏍煎紡鏄痽yyy-MM-dd HH:mm:ss.SSS
      */
     private Date ts;
-
-    public String getOid() {
-        return oid;
-    }
-
-    public void setOid(String oid) {
-        this.oid = oid;
-    }
-
-    public String getPkLifeCycleLine() {
-        return pkLifeCycleLine;
-    }
-
-    public void setPkLifeCycleLine(String pkLifeCycleLine) {
-        this.pkLifeCycleLine = pkLifeCycleLine;
-    }
-
-    public String getEventFullName() {
-        return eventFullName;
-    }
-
-    public void setEventFullName(String eventFullName) {
-        this.eventFullName = eventFullName;
-    }
-
-    public String getEventShowName() {
-        return eventShowName;
-    }
-
-    public void setEventShowName(String eventShowName) {
-        this.eventShowName = eventShowName;
-    }
-
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getLastModifier() {
-        return lastModifier;
-    }
-
-    public void setLastModifier(String lastModifier) {
-        this.lastModifier = lastModifier;
-    }
-
-    public Date getLastModifyTime() {
-        return lastModifyTime;
-    }
-
-    public void setLastModifyTime(Date lastModifyTime) {
-        this.lastModifyTime = lastModifyTime;
-    }
-
-    public Date getTs() {
-        return ts;
-    }
-
-    public void setTs(Date ts) {
-        this.ts = ts;
-    }
-
-    public Integer getOrderNum() {
-        return orderNum;
-    }
-
-    public void setOrderNum(Integer orderNum) {
-        this.orderNum = orderNum;
-    }
-
-
-    public String getBtmname() {
-        return btmname;
-    }
-
-    public void setBtmname(String btmname) {
-        this.btmname = btmname;
-    }
-
-    public String getOwner() {
-        return owner;
-    }
-
-    public void setOwner(String owner) {
-        this.owner = owner;
-    }
-
-    @Override
-    public String toString() {
-        return "OsLifeCycleLineEventVO{" +
-                "oid='" + oid + '\'' +
-                ", pkLifeCycleLine='" + pkLifeCycleLine + '\'' +
-                ", eventFullName='" + eventFullName + '\'' +
-                ", eventShowName='" + eventShowName + '\'' +
-                ", orderNum=" + orderNum +
-                ", btmname='" + btmname + '\'' +
-                ", owner='" + owner + '\'' +
-                ", creator='" + creator + '\'' +
-                ", createTime=" + createTime +
-                ", lastModifier='" + lastModifier + '\'' +
-                ", lastModifyTime=" + lastModifyTime +
-                ", ts=" + ts +
-                '}';
-    }
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleLineVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleLineVO.java
index 3cb2461..9ae40f7 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleLineVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleLineVO.java
@@ -1,13 +1,16 @@
 package com.vci.ubcs.omd.vo;
 
+import lombok.Data;
+
 import java.util.Date;
 import java.util.List;
 
 /**
  * 鐢熷懡鍛ㄦ湡杩炴帴绾�
- * @author weidy
- * @date 2019/10/11 4:48 PM
+ * @author LiHang
+ * @date 2023/4/3
  */
+@Data
 public class LifeCycleLineVO implements java.io.Serializable {
 
     /**
@@ -94,155 +97,4 @@
      * 鍖呭惈浜嬩欢
      */
     private List<LifeCycleLineEventVO> events;
-
-    public String getPkLifeCycle() {
-        return pkLifeCycle;
-    }
-
-    public void setPkLifeCycle(String pkLifeCycle) {
-        this.pkLifeCycle = pkLifeCycle;
-    }
-
-    public String getSourceLifeStatus() {
-        return sourceLifeStatus;
-    }
-
-    public void setSourceLifeStatus(String sourceLifeStatus) {
-        this.sourceLifeStatus = sourceLifeStatus;
-    }
-
-    public String getSourceLifeStatusName() {
-        return sourceLifeStatusName;
-    }
-
-    public void setSourceLifeStatusName(String sourceLifeStatusName) {
-        this.sourceLifeStatusName = sourceLifeStatusName;
-    }
-
-    public String getTargetLifeStatus() {
-        return targetLifeStatus;
-    }
-
-    public void setTargetLifeStatus(String targetLifeStatus) {
-        this.targetLifeStatus = targetLifeStatus;
-    }
-
-    public String getTargetLifeStatusName() {
-        return targetLifeStatusName;
-    }
-
-    public void setTargetLifeStatusName(String targetLifeStatusName) {
-        this.targetLifeStatusName = targetLifeStatusName;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getTransLineSiteInfo() {
-        return transLineSiteInfo;
-    }
-
-    public void setTransLineSiteInfo(String transLineSiteInfo) {
-        this.transLineSiteInfo = transLineSiteInfo;
-    }
-
-    public String getOid() {
-        return oid;
-    }
-
-    public void setOid(String oid) {
-        this.oid = oid;
-    }
-
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getLastModifier() {
-        return lastModifier;
-    }
-
-    public void setLastModifier(String lastModifier) {
-        this.lastModifier = lastModifier;
-    }
-
-    public Date getLastModifyTime() {
-        return lastModifyTime;
-    }
-
-    public void setLastModifyTime(Date lastModifyTime) {
-        this.lastModifyTime = lastModifyTime;
-    }
-
-    public Date getTs() {
-        return ts;
-    }
-
-    public void setTs(Date ts) {
-        this.ts = ts;
-    }
-
-    public List<LifeCycleLineEventVO> getEvents() {
-        return events;
-    }
-
-    public void setEvents(List<LifeCycleLineEventVO> events) {
-        this.events = events;
-    }
-
-
-    public String getBtmname() {
-        return btmname;
-    }
-
-    public void setBtmname(String btmname) {
-        this.btmname = btmname;
-    }
-
-    public String getOwner() {
-        return owner;
-    }
-
-    public void setOwner(String owner) {
-        this.owner = owner;
-    }
-
-    @Override
-    public String toString() {
-        return "OsLifeCycleLineVO{" +
-                "pkLifeCycle='" + pkLifeCycle + '\'' +
-                ", sourceLifeStatus='" + sourceLifeStatus + '\'' +
-                ", sourceLifeStatusName='" + sourceLifeStatusName + '\'' +
-                ", targetLifeStatus='" + targetLifeStatus + '\'' +
-                ", targetLifeStatusName='" + targetLifeStatusName + '\'' +
-                ", name='" + name + '\'' +
-                ", transLineSiteInfo='" + transLineSiteInfo + '\'' +
-                ", oid='" + oid + '\'' +
-                ", btmname='" + btmname + '\'' +
-                ", owner='" + owner + '\'' +
-                ", creator='" + creator + '\'' +
-                ", createTime=" + createTime +
-                ", lastModifier='" + lastModifier + '\'' +
-                ", lastModifyTime=" + lastModifyTime +
-                ", ts=" + ts +
-                ", events=" + events +
-                '}';
-    }
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleVO.java
index b6b0bdb..164824e 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleVO.java
@@ -1,13 +1,16 @@
 package com.vci.ubcs.omd.vo;
 
+import lombok.Data;
+
 import java.util.Date;
 import java.util.List;
 
 /**
  * 鐢熷懡鍛ㄦ湡鏄剧ず瀵硅薄
- * @author weidy
- * @date 2019/10/11 4:45 PM
+ * @author LiHang
+ * @date 2023/4/3
  */
+@Data
 public class LifeCycleVO implements java.io.Serializable{
 
     /**
@@ -88,146 +91,5 @@
     /**
      * 鍖呭惈杩炴帴绾�
      */
-    private List<LifeCycleLineVO> lines ;
-
-    public String getClassFullName() {
-        return classFullName;
-    }
-
-    public void setClassFullName(String classFullName) {
-        this.classFullName = classFullName;
-    }
-
-    public String getBtmname() {
-        return btmname;
-    }
-
-    public void setBtmname(String btmname) {
-        this.btmname = btmname;
-    }
-
-    public String getOwner() {
-        return owner;
-    }
-
-    public void setOwner(String owner) {
-        this.owner = owner;
-    }
-
-    public String getOid() {
-        return oid;
-    }
-
-    public void setOid(String oid) {
-        this.oid = oid;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getStartStatus() {
-        return startStatus;
-    }
-
-    public void setStartStatus(String startStatus) {
-        this.startStatus = startStatus;
-    }
-
-    public String getStartStatusName() {
-        return startStatusName;
-    }
-
-    public void setStartStatusName(String startStatusName) {
-        this.startStatusName = startStatusName;
-    }
-
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getLastModifier() {
-        return lastModifier;
-    }
-
-    public void setLastModifier(String lastModifier) {
-        this.lastModifier = lastModifier;
-    }
-
-    public Date getLastModifyTime() {
-        return lastModifyTime;
-    }
-
-    public void setLastModifyTime(Date lastModifyTime) {
-        this.lastModifyTime = lastModifyTime;
-    }
-
-    public Date getTs() {
-        return ts;
-    }
-
-    public void setTs(Date ts) {
-        this.ts = ts;
-    }
-
-    public List<LifeCycleLineVO> getLines() {
-        return lines;
-    }
-
-    public void setLines(List<LifeCycleLineVO> lines) {
-        this.lines = lines;
-    }
-
-    @Override
-    public String toString() {
-        return "OsLifeCycleVO{" +
-                "oid='" + oid + '\'' +
-                ", id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", description='" + description + '\'' +
-                ", classFullName='" + classFullName + '\'' +
-                ", startStatus='" + startStatus + '\'' +
-                ", startStatusName='" + startStatusName + '\'' +
-                ", btmname='" + btmname + '\'' +
-                ", owner='" + owner + '\'' +
-                ", creator='" + creator + '\'' +
-                ", createTime=" + createTime +
-                ", lastModifier='" + lastModifier + '\'' +
-                ", lastModifyTime=" + lastModifyTime +
-                ", ts=" + ts +
-                ", lines=" + lines +
-                '}';
-    }
+    private List<LifeCycleLineVO> lines;
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.java
index 7f71297..6d80554 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.java
@@ -5,8 +5,8 @@
 
 /**
  * 閾炬帴绫诲瀷鍖呭惈鐨勫睘鎬�
- * @author weidy
- * @date 2019/10/11 6:16 PM
+ * @author LiHang
+ * @date 2023/4/3
  */
 public class LinkTypeAttributeVO implements java.io.Serializable{
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java
index 1c43b92..264ddb6 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java
@@ -8,8 +8,8 @@
 /**
  *
  * 閾炬帴绫诲瀷鏄剧ず瀵硅薄
- * @author weidy
- * @date 2019/10/11 6:04 PM
+ * @author LiHang
+ * @date 2023/4/3
  */
 @Data
 public class LinkTypeVO implements java.io.Serializable {
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/ModifyAttributeInfoVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/ModifyAttributeInfoVO.java
index a19b3f0..977af15 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/ModifyAttributeInfoVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/ModifyAttributeInfoVO.java
@@ -1,12 +1,15 @@
 package com.vci.ubcs.omd.vo;
 
+import lombok.Data;
+
 import java.util.Date;
 
 /**
  * 闇�瑕佷慨鏀规暟鎹簱琛ㄤ腑瀛楁鐨勪俊鎭�
- * @author weidy
- * @date 2019/10/18 11:48
+ * @author LiHang
+ * @date 2023/4/3
  */
+@Data
 public class ModifyAttributeInfoVO implements java.io.Serializable{
 
     /**
@@ -107,7 +110,7 @@
     /**
      * 涓氬姟绫诲瀷鍚嶇О
      */
-    private String btmname;
+    private String btmName;
 
     /**
      * 鎷ユ湁鑰�
@@ -138,236 +141,4 @@
      * 鏃堕棿鎴筹紝鏍煎紡鏄痽yyy-MM-dd HH:mm:ss.SSS
      */
     private Date ts;
-
-    public String getBtmTypeId() {
-        return btmTypeId;
-    }
-
-    public void setBtmTypeId(String btmTypeId) {
-        this.btmTypeId = btmTypeId;
-    }
-
-    public String getBtmTypeName() {
-        return btmTypeName;
-    }
-
-    public void setBtmTypeName(String btmTypeName) {
-        this.btmTypeName = btmTypeName;
-    }
-
-    public String getLinkTypeFlag() {
-        return linkTypeFlag;
-    }
-
-    public void setLinkTypeFlag(String linkTypeFlag) {
-        this.linkTypeFlag = linkTypeFlag;
-    }
-
-    public String getTableName() {
-        return tableName;
-    }
-
-    public void setTableName(String tableName) {
-        this.tableName = tableName;
-    }
-
-    public String getModifyAttributeType() {
-        return modifyAttributeType;
-    }
-
-    public void setModifyAttributeType(String modifyAttributeType) {
-        this.modifyAttributeType = modifyAttributeType;
-    }
-
-    public String getModifyAttributeTypeText() {
-        return modifyAttributeTypeText;
-    }
-
-    public void setModifyAttributeTypeText(String modifyAttributeTypeText) {
-        this.modifyAttributeTypeText = modifyAttributeTypeText;
-    }
-
-    public String getColumnName() {
-        return columnName;
-    }
-
-    public void setColumnName(String columnName) {
-        this.columnName = columnName;
-    }
-
-    public String getModifyColumnReason() {
-        return modifyColumnReason;
-    }
-
-    public void setModifyColumnReason(String modifyColumnReason) {
-        this.modifyColumnReason = modifyColumnReason;
-    }
-
-    public String getOrderModifyUserName() {
-        return orderModifyUserName;
-    }
-
-    public void setOrderModifyUserName(String orderModifyUserName) {
-        this.orderModifyUserName = orderModifyUserName;
-    }
-
-    public Date getOrderModifyDate() {
-        return orderModifyDate;
-    }
-
-    public void setOrderModifyDate(Date orderModifyDate) {
-        this.orderModifyDate = orderModifyDate;
-    }
-
-    public String getAttributeDataTypeBefore() {
-        return attributeDataTypeBefore;
-    }
-
-    public void setAttributeDataTypeBefore(String attributeDataTypeBefore) {
-        this.attributeDataTypeBefore = attributeDataTypeBefore;
-    }
-
-    public String getAttributeDataTypeAfter() {
-        return attributeDataTypeAfter;
-    }
-
-    public void setAttributeDataTypeAfter(String attributeDataTypeAfter) {
-        this.attributeDataTypeAfter = attributeDataTypeAfter;
-    }
-
-    public String getDeleteColumnFlag() {
-        return deleteColumnFlag;
-    }
-
-    public void setDeleteColumnFlag(String deleteColumnFlag) {
-        this.deleteColumnFlag = deleteColumnFlag;
-    }
-
-    public boolean isHandleFinishFlag() {
-        return handleFinishFlag;
-    }
-
-    public void setHandleFinishFlag(boolean handleFinishFlag) {
-        this.handleFinishFlag = handleFinishFlag;
-    }
-
-    public String getHandleUserName() {
-        return handleUserName;
-    }
-
-    public void setHandleUserName(String handleUserName) {
-        this.handleUserName = handleUserName;
-    }
-
-    public Date getHandleDate() {
-        return handleDate;
-    }
-
-    public void setHandleDate(Date handleDate) {
-        this.handleDate = handleDate;
-    }
-
-    public String getHandleResult() {
-        return handleResult;
-    }
-
-    public void setHandleResult(String handleResult) {
-        this.handleResult = handleResult;
-    }
-
-    public String getOid() {
-        return oid;
-    }
-
-    public void setOid(String oid) {
-        this.oid = oid;
-    }
-
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getLastModifier() {
-        return lastModifier;
-    }
-
-    public void setLastModifier(String lastModifier) {
-        this.lastModifier = lastModifier;
-    }
-
-    public Date getLastModifyTime() {
-        return lastModifyTime;
-    }
-
-    public void setLastModifyTime(Date lastModifyTime) {
-        this.lastModifyTime = lastModifyTime;
-    }
-
-    public Date getTs() {
-        return ts;
-    }
-
-    public void setTs(Date ts) {
-        this.ts = ts;
-    }
-
-
-    public String getBtmname() {
-        return btmname;
-    }
-
-    public void setBtmname(String btmname) {
-        this.btmname = btmname;
-    }
-
-    public String getOwner() {
-        return owner;
-    }
-
-    public void setOwner(String owner) {
-        this.owner = owner;
-    }
-
-    @Override
-    public String toString() {
-        return "OsModifyAttributeInfoVO{" +
-                "btmTypeId='" + btmTypeId + '\'' +
-                ", btmTypeName='" + btmTypeName + '\'' +
-                ", linkTypeFlag='" + linkTypeFlag + '\'' +
-                ", tableName='" + tableName + '\'' +
-                ", modifyAttributeType='" + modifyAttributeType + '\'' +
-                ", modifyAttributeTypeText='" + modifyAttributeTypeText + '\'' +
-                ", columnName='" + columnName + '\'' +
-                ", modifyColumnReason='" + modifyColumnReason + '\'' +
-                ", orderModifyUserName='" + orderModifyUserName + '\'' +
-                ", orderModifyDate=" + orderModifyDate +
-                ", attributeDataTypeBefore='" + attributeDataTypeBefore + '\'' +
-                ", attributeDataTypeAfter='" + attributeDataTypeAfter + '\'' +
-                ", deleteColumnFlag='" + deleteColumnFlag + '\'' +
-                ", handleFinishFlag=" + handleFinishFlag +
-                ", handleUserName='" + handleUserName + '\'' +
-                ", handleDate=" + handleDate +
-                ", handleResult='" + handleResult + '\'' +
-                ", oid='" + oid + '\'' +
-                ", btmname='" + btmname + '\'' +
-                ", owner='" + owner + '\'' +
-                ", creator='" + creator + '\'' +
-                ", createTime=" + createTime +
-                ", lastModifier='" + lastModifier + '\'' +
-                ", lastModifyTime=" + lastModifyTime +
-                ", ts=" + ts +
-                '}';
-    }
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/RevisionRuleVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/RevisionRuleVO.java
index ad5f3b2..3668011 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/RevisionRuleVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/RevisionRuleVO.java
@@ -1,5 +1,7 @@
 package com.vci.ubcs.omd.vo;
 
+import lombok.Data;
+
 import java.util.Date;
 
 /**
@@ -7,6 +9,7 @@
  * @author weidy
  * @date 2019/10/11 5:19 PM
  */
+@Data
 public class RevisionRuleVO implements java.io.Serializable{
 
     /**
@@ -62,7 +65,7 @@
     /**
      * 涓氬姟绫诲瀷鍚嶇О
      */
-    private String btmname;
+    private String btmName;
 
     /**
      * 鎷ユ湁鑰�
@@ -93,155 +96,5 @@
      * 鏃堕棿鎴筹紝鏍煎紡鏄痽yyy-MM-dd HH:mm:ss.SSS
      */
     private Date ts;
-
-    public String getOid() {
-        return oid;
-    }
-
-    public void setOid(String oid) {
-        this.oid = oid;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getSkipCode() {
-        return skipCode;
-    }
-
-    public void setSkipCode(String skipCode) {
-        this.skipCode = skipCode;
-    }
-
-    public String getStartCode() {
-        return startCode;
-    }
-
-    public void setStartCode(String startCode) {
-        this.startCode = startCode;
-    }
-
-    public Integer getSerialStep() {
-        return serialStep;
-    }
-
-    public void setSerialStep(Integer serialStep) {
-        this.serialStep = serialStep;
-    }
-
-    public String getPrefixCode() {
-        return prefixCode;
-    }
-
-    public void setPrefixCode(String prefixCode) {
-        this.prefixCode = prefixCode;
-    }
-
-    public String getSuffixCode() {
-        return suffixCode;
-    }
-
-    public void setSuffixCode(String suffixCode) {
-        this.suffixCode = suffixCode;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getLastModifier() {
-        return lastModifier;
-    }
-
-    public void setLastModifier(String lastModifier) {
-        this.lastModifier = lastModifier;
-    }
-
-    public Date getLastModifyTime() {
-        return lastModifyTime;
-    }
-
-    public void setLastModifyTime(Date lastModifyTime) {
-        this.lastModifyTime = lastModifyTime;
-    }
-
-    public Date getTs() {
-        return ts;
-    }
-
-    public void setTs(Date ts) {
-        this.ts = ts;
-    }
-
-    public String getBtmname() {
-        return btmname;
-    }
-
-    public void setBtmname(String btmname) {
-        this.btmname = btmname;
-    }
-
-    public String getOwner() {
-        return owner;
-    }
-
-    public void setOwner(String owner) {
-        this.owner = owner;
-    }
-
-    @Override
-    public String toString() {
-        return "OsRevisionRuleVO{" +
-                "oid='" + oid + '\'' +
-                ", id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", skipCode='" + skipCode + '\'' +
-                ", startCode='" + startCode + '\'' +
-                ", serialStep=" + serialStep +
-                ", prefixCode='" + prefixCode + '\'' +
-                ", suffixCode='" + suffixCode + '\'' +
-                ", description='" + description + '\'' +
-                ", btmname='" + btmname + '\'' +
-                ", owner='" + owner + '\'' +
-                ", creator='" + creator + '\'' +
-                ", createTime=" + createTime +
-                ", lastModifier='" + lastModifier + '\'' +
-                ", lastModifyTime=" + lastModifyTime +
-                ", ts=" + ts +
-                '}';
-    }
 }
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/StatusVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/StatusVO.java
index fd8a951..568972b 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/StatusVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/StatusVO.java
@@ -1,12 +1,15 @@
 package com.vci.ubcs.omd.vo;
 
+import lombok.Data;
+
 import java.util.Date;
 
 /**
- * 鐘舵��
- * @author weidy
- * @date 2019/10/11 4:40 PM
+ * 鐘舵�佹睜
+ * @author lihang
+ * @date 2023/05/23
  */
+@Data
 public class StatusVO implements java.io.Serializable {
 
 
@@ -38,7 +41,7 @@
     /**
      * 涓氬姟绫诲瀷鍚嶇О
      */
-    private String btmname;
+    private String btmName;
 
     /**
      * 鎷ユ湁鑰�
@@ -69,110 +72,4 @@
      * 鏃堕棿鎴筹紝鏍煎紡鏄痽yyy-MM-dd HH:mm:ss.SSS
      */
     private Date ts;
-
-    public String getOid() {
-        return oid;
-    }
-
-    public void setOid(String oid) {
-        this.oid = oid;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getLastModifier() {
-        return lastModifier;
-    }
-
-    public void setLastModifier(String lastModifier) {
-        this.lastModifier = lastModifier;
-    }
-
-    public Date getLastModifyTime() {
-        return lastModifyTime;
-    }
-
-    public void setLastModifyTime(Date lastModifyTime) {
-        this.lastModifyTime = lastModifyTime;
-    }
-
-    public Date getTs() {
-        return ts;
-    }
-
-    public void setTs(Date ts) {
-        this.ts = ts;
-    }
-
-
-    public String getBtmname() {
-        return btmname;
-    }
-
-    public void setBtmname(String btmname) {
-        this.btmname = btmname;
-    }
-
-    public String getOwner() {
-        return owner;
-    }
-
-    public void setOwner(String owner) {
-        this.owner = owner;
-    }
-
-    @Override
-    public String toString() {
-        return "OsStatusVO{" +
-                "oid='" + oid + '\'' +
-                ", id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", description='" + description + '\'' +
-                ", btmname='" + btmname + '\'' +
-                ", owner='" + owner + '\'' +
-                ", creator='" + creator + '\'' +
-                ", createTime=" + createTime +
-                ", lastModifier='" + lastModifier + '\'' +
-                ", lastModifyTime=" + lastModifyTime +
-                ", ts=" + ts +
-                '}';
-    }
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/RevisionRuleController.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/RevisionRuleController.java
new file mode 100644
index 0000000..5df32ff
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/RevisionRuleController.java
@@ -0,0 +1,97 @@
+package com.vci.ubcs.omd.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.omd.dto.RevisionRuleDTO;
+import com.vci.ubcs.omd.entity.RevisionRule;
+import com.vci.ubcs.omd.service.IRevisionRuleService;
+import com.vci.ubcs.omd.vo.RevisionRuleVO;
+import com.vci.ubcs.omd.wrapper.RevisionRuleWrapper;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * Description: 鐗堟湰瑙勫垯鎺у埗鍣�
+ *
+ * @author LiHang
+ * @date 2023/5/17
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/revision-rule")
+@Api(value = "鐗堟湰瑙勫垯鎺у埗鍣�", tags = "鐗堟湰瑙勫垯鎺ュ彛")
+public class RevisionRuleController {
+
+	private final IRevisionRuleService revisionRuleService;
+
+	/**
+	 * 鏌ョ湅璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鏌ョ湅璇︽儏", notes = "鐗堟湰瑙勫垯")
+	public R<RevisionRuleVO> detail(RevisionRuleDTO ruleDTO){
+		RevisionRule rule = revisionRuleService.getOne(Condition.getQueryWrapper(BeanUtil.copy(ruleDTO, RevisionRule.class)));
+		return R.data(RevisionRuleWrapper.build().entityVO(rule));
+	}
+
+	/**
+	 * 鍒嗛〉鏌ヨ
+	 */
+	@GetMapping("page")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉鏌ヨ鐗堟湰瑙勫垯",notes = "鍒嗛〉鏌ヨ鐗堟湰瑙勫垯")
+	public R<IPage<RevisionRuleVO>> page(BaseQueryObject baseQueryObject){
+		return R.data(revisionRuleService.pageQueryVO(baseQueryObject));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�",notes = "浼犲叆鐗堟湰瑙勫垯椤甸潰瀵硅薄")
+	public R<RevisionRuleVO> submit(@RequestBody RevisionRuleDTO ruleDTO){
+		return R.data(revisionRuleService.addSave(ruleDTO));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/batch-submit")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�",notes = "浼犲叆鐗堟湰瑙勫垯椤甸潰瀵硅薄")
+	public R<List<RevisionRuleVO>> batchSubmit(@RequestBody List<RevisionRuleDTO> ruleDTOList){
+		return R.data(revisionRuleService.batchAddSave(ruleDTOList));
+	}
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆涓婚敭")
+	public R remove(@RequestBody RevisionRuleVO revisionRuleVO){
+		revisionRuleService.delete(revisionRuleVO);
+		return R.status(true);
+	}
+
+	/**
+	 * 鎵归噺鍒犻櫎
+	 */
+	@PostMapping("/batch-remove")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鎵归噺鍒犻櫎",notes = "浼犲叆涓婚敭")
+	public R batchRemove(@RequestBody List<RevisionRuleVO> revisionRuleVOList){
+		revisionRuleService.batchDelete(revisionRuleVOList);
+		return R.status(true);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/StatusController.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/StatusController.java
new file mode 100644
index 0000000..a7562b9
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/StatusController.java
@@ -0,0 +1,102 @@
+package com.vci.ubcs.omd.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.omd.entity.Status;
+import com.vci.ubcs.omd.service.IStatusService;
+import com.vci.ubcs.omd.vo.StatusVO;
+import com.vci.ubcs.omd.wrapper.StatusWrapper;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Description: 鐘舵�佹睜鎺у埗鍣�
+ *
+ * @author LiHang
+ * @date 2023/5/23
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/status")
+@Api(value = "鐘舵�佹睜鎺у埗鍣�", tags = "鐘舵�佹睜鎺ュ彛")
+public class StatusController {
+
+	private final IStatusService statusService;
+
+	/**
+	 * 鏌ョ湅璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鏌ョ湅璇︽儏", notes = "鐘舵�佹睜")
+	public R<StatusVO> detail(StatusVO statusVO){
+		Status status = statusService.getOne(Condition.getQueryWrapper(BeanUtil.copy(statusVO, Status.class)));
+		return R.data(StatusWrapper.build().entityVO(status));
+	}
+
+	/**
+	 * 鍒嗛〉鏌ヨ
+	 */
+	@GetMapping("page")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉鏌ヨ鐘舵�佹睜",notes = "鍒嗛〉鏌ヨ鐘舵�佹睜")
+	public R<IPage<StatusVO>> page(BaseQueryObject baseQueryObject){
+		Map<String, String> conditionMap = baseQueryObject.getConditionMap();
+		if (conditionMap == null){
+			conditionMap = new HashMap<>();
+		}
+		return R.data(statusService.listStatus(conditionMap,baseQueryObject.getPageHelper()));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�",notes = "浼犲叆鐘舵�佹睜椤甸潰瀵硅薄")
+	public R<StatusVO> submit(@RequestBody StatusVO statusVO){
+		return R.data(statusService.addSave(statusVO));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/batch-submit")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�",notes = "浼犲叆鐘舵�佹睜椤甸潰瀵硅薄")
+	public R<List<StatusVO>> batchSubmit(@RequestBody List<StatusVO> statusVOList){
+		return R.data(statusService.batchAddSave(statusVOList));
+	}
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆涓婚敭")
+	public R remove(@RequestBody StatusVO StatusVO){
+		statusService.delete(StatusVO);
+		return R.status(true);
+	}
+
+	/**
+	 * 鎵归噺鍒犻櫎
+	 */
+	@PostMapping("/batch-remove")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鎵归噺鍒犻櫎",notes = "浼犲叆涓婚敭")
+	public R batchRemove(@RequestBody List<StatusVO> StatusVOList){
+		statusService.batchDelete(StatusVOList);
+		return R.status(true);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/RevisionRuleClient.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/RevisionRuleClient.java
new file mode 100644
index 0000000..91090da
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/RevisionRuleClient.java
@@ -0,0 +1,97 @@
+package com.vci.ubcs.omd.feign;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.omd.entity.RevisionRule;
+import com.vci.ubcs.omd.service.IRevisionRuleService;
+import com.vci.ubcs.omd.vo.RevisionRuleVO;
+import com.vci.ubcs.omd.wrapper.RevisionRuleWrapper;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.cglib.beans.BeanMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.*;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/5/22
+ */
+@NonDS
+@ApiIgnore()
+@RestController
+@AllArgsConstructor
+public class RevisionRuleClient implements IRevisionRuleClient{
+
+	private final IRevisionRuleService service;
+	/**
+	 * 鑾峰彇鐗堟湰瑙勫垯璇︽儏淇℃伅
+	 *
+	 * @param oid 涓婚敭
+	 * @return 鐗堟湰瑙勫垯璇︽儏淇℃伅
+	 */
+	@GetMapping(GET_DETAIL)
+	@Override
+	public R<RevisionRuleVO> getDetail(String oid) {
+		return R.data(RevisionRuleWrapper.build().entityVO(service.getOne(Wrappers.<RevisionRule>query().lambda().eq(RevisionRule::getOid,oid))));
+	}
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 *
+	 * @param baseQueryObject 鏌ヨ鏉′欢
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@GetMapping(GET_REF_PAGE)
+	@Override
+	public R<IPage<RevisionRuleVO>> getRefPage(BaseQueryObject baseQueryObject) {
+		return R.data(service.pageQueryVO(baseQueryObject));
+	}
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 *
+	 * @param baseQueryObject 鏌ヨ鏉′欢
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	@GetMapping(GET_REF)
+	public R<List<RevisionRuleVO>> getRef(BaseQueryObject baseQueryObject) {
+		RevisionRule query = new RevisionRule();
+		BeanMap.create(query).putAll(Optional.ofNullable(baseQueryObject.getConditionMap()).orElseGet(HashMap::new));
+		return R.data(RevisionRuleWrapper.build().listEntityVO(service.list(Condition.getQueryWrapper(query))));
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鏌ヨ瀵硅薄
+	 *
+	 * @param ids 瀵硅薄鑻辨枃鍚嶇О 浣嗘槸涓嶈兘瓒呰繃1000
+	 * @return 涓氬姟瀵硅薄
+	 */
+	@Override
+	@GetMapping(GET_BY_IDS)
+	public R<List<RevisionRuleVO>> selectByIdCollection(List<String> ids) {
+		return R.data(service.listRevisionRuleByIdCollection(ids));
+	}
+
+	/**
+	 * 鎵归噺鏍规嵁涓婚敭鑾峰彇鐗堟湰瑙勫垯
+	 *
+	 * @param oidCollection 鐗堟湰瑙勫垯涓婚敭闆嗗悎
+	 * @return 鐗堟湰瑙勫垯鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 */
+	@Override
+	@GetMapping(GET_BY_OIDS)
+	public R<List<RevisionRuleVO>> listBtmTypeByOidCollection(Collection<String> oidCollection) {
+		return R.data(service.listRevisionRuleByOidCollection(oidCollection));
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/StatusClient.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/StatusClient.java
new file mode 100644
index 0000000..2158d86
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/StatusClient.java
@@ -0,0 +1,79 @@
+package com.vci.ubcs.omd.feign;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.omd.entity.Status;
+import com.vci.ubcs.omd.service.IStatusService;
+import com.vci.ubcs.omd.vo.StatusVO;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Description: 鐘舵�佹睜鐨凢eign
+ *
+ * @author LiHang
+ * @date 2023/5/23
+ */
+@NonDS
+@ApiIgnore
+@RestController
+@AllArgsConstructor
+public class StatusClient implements IStatusClient{
+
+	private final IStatusService service;
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 *
+	 * @param baseQueryObject 鏌ヨ鏉′欢瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	public R<IPage<StatusVO>> getRefPage(BaseQueryObject baseQueryObject) {
+		Map<String, String> conditionMap = baseQueryObject.getConditionMap();
+		if (conditionMap == null) {
+			conditionMap = new HashMap<>(16);
+		}
+		return R.data(service.listStatus(conditionMap,baseQueryObject.getPageHelper()));
+	}
+
+	/**
+	 * 鍙傜収鏌ヨ
+	 *
+	 * @param baseQueryObject 鏌ヨ鏉′欢瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	public R<List<StatusVO>> getRef(BaseQueryObject baseQueryObject) {
+		return R.data(service.listStatusNoPage(baseQueryObject.getConditionMap()));
+	}
+
+	/**
+	 * 鑻辨枃鏌ヨ涓枃鍚嶇О
+	 *
+	 * @param ids 鑻辨枃
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public R<Map<String,String>> getNameByIds(String ids) {
+		VciBaseUtil.alertNotNull(ids,"鑻辨枃鍚嶇О");
+		List<String> idList = Func.toStrList(",", ids);
+		List<Status> list = service.list(Wrappers.<Status>query().lambda().in(Status::getId, idList));
+		Map<String,String> map = new HashMap<>(16);
+		list.stream().peek(s -> {
+			String key = idList.stream().filter(id -> StringUtil.equals(id, s.getId())).findFirst().get();
+			map.put(key,s.getName());
+		});
+		return R.data(map);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java
index 23db8b1..01bc4e0 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java
@@ -1,5 +1,6 @@
 package com.vci.ubcs.omd.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.vci.ubcs.omd.entity.BtmTypeAttribute;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.core.mp.mapper.BladeMapper;
@@ -13,7 +14,7 @@
  * @author LiHang
  * @date 2023/4/23
  */
-public interface BtmTypeAttributeMapper extends BladeMapper<BtmTypeAttribute> {
+public interface BtmTypeAttributeMapper extends BaseMapper<BtmTypeAttribute> {
 
     int batchDelete(@Param("records") List<String> records);
 
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeMapper.java
index 7d153eb..a8a804c 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeMapper.java
@@ -1,6 +1,7 @@
 package com.vci.ubcs.omd.mapper;
 
 import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.vci.ubcs.omd.entity.BtmTypeAttribute;
 import com.vci.ubcs.omd.entity.BtmType;
 import org.apache.ibatis.annotations.Param;
@@ -10,7 +11,7 @@
 import java.util.Collection;
 import java.util.List;
 
-public interface BtmTypeMapper extends BladeMapper<BtmType> {
+public interface BtmTypeMapper extends BaseMapper<BtmType> {
     /**
      * 鏍规嵁涓婚敭鍒犻櫎瀵硅薄
      * @param oid 鐢熷懡鍛ㄦ湡涓婚敭
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/RevisionRuleMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/RevisionRuleMapper.java
new file mode 100644
index 0000000..29aeb60
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/RevisionRuleMapper.java
@@ -0,0 +1,14 @@
+package com.vci.ubcs.omd.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.omd.entity.RevisionRule;
+
+/**
+ * Description: 鐗堟湰瑙勫垯鏁版嵁灞�
+ *
+ * @author LiHang
+ * @date 2023/5/17
+ */
+public interface RevisionRuleMapper extends BaseMapper<RevisionRule> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/StatusMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/StatusMapper.java
new file mode 100644
index 0000000..775603a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/StatusMapper.java
@@ -0,0 +1,13 @@
+package com.vci.ubcs.omd.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.omd.entity.Status;
+
+/**
+ * Description: 鐘舵�佹睜鏁版嵁灞�
+ *
+ * @author LiHang
+ * @date 2023/5/23
+ */
+public interface StatusMapper extends BaseMapper<Status> {
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IRevisionRuleService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IRevisionRuleService.java
new file mode 100644
index 0000000..3310980
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IRevisionRuleService.java
@@ -0,0 +1,191 @@
+package com.vci.ubcs.omd.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.omd.dto.RevisionRuleDTO;
+import com.vci.ubcs.omd.entity.RevisionRule;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
+import com.vci.ubcs.omd.vo.RevisionRuleVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import org.springblade.core.mp.support.Query;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Description: 鐗堟湰瑙勫垯鏈嶅姟瀹氫箟
+ *
+ * @author LiHang
+ * @date 2023/5/17
+ */
+public interface IRevisionRuleService extends IService<RevisionRule> {
+	/**
+	 * 鑾峰彇鐗堟湰瑙勫垯鍒楄〃
+	 * @param condition 鏌ヨ鏉′欢
+	 * @param query 鍒嗛〉淇℃伅鍜屾帓搴忎俊鎭紝榛樿浣跨敤id鎺掑簭
+	 * @return 鐗堟湰瑙勫垯瀵硅薄鍒楄〃
+	 * @throws VciBaseException 鏌ヨ鍑洪敊鏃朵細鎶涘嚭寮傚父
+	 */
+	IPage<RevisionRuleVO> listRevisionRule(Map<String, String> condition, Query query) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁涓婚敭鑾峰彇鐗堟湰瑙勫垯
+	 * @param pkRevisionRule 鐗堟湰瑙勫垯涓婚敭
+	 * @return 鐗堟湰瑙勫垯锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	RevisionRuleVO getRevisionRuleByOid(String pkRevisionRule) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁涓婚敭鎵归噺鑾峰彇鐗堟湰瑙勫垯
+	 * @param pkRevisionRules 鐗堟湰瑙勫垯涓婚敭锛岀敤閫楀彿鍒嗛殧
+	 * @return 鐗堟湰瑙勫垯鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	List<RevisionRuleVO> listRevisionRuleByOids(String pkRevisionRules) throws VciBaseException;
+
+	/**
+	 * 鎵归噺鏍规嵁涓婚敭鑾峰彇鐗堟湰瑙勫垯
+	 * @param pkRevisionRuleCollection 鐗堟湰瑙勫垯涓婚敭闆嗗悎
+	 * @return 鐗堟湰瑙勫垯鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	List<RevisionRuleVO> listRevisionRuleByOidCollection(Collection<String> pkRevisionRuleCollection) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鑾峰彇鐗堟湰瑙勫垯
+	 * @param id 鑻辨枃鍚嶇О
+	 * @return 鐗堟湰瑙勫垯锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+	 * @throws VciBaseException
+	 */
+	RevisionRuleVO getRevisionRuleById(String id) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鑾峰彇鐗堟湰瑙勫垯
+	 * @param ids 鑻辨枃鍚嶇О锛屼娇鐢ㄩ�楀彿鍒嗛殧
+	 * @return  鐗堟湰瑙勫垯鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	List<RevisionRuleVO> listRevisionRuleByIds(String ids) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鎵归噺鑾峰彇鐗堟湰瑙勫垯
+	 * @param revisionRuleIdCollection 鑻辨枃鍚嶇О闆嗗悎锛屼娇鐢ㄩ�楀彿鍒嗛殧
+	 * @return 鐗堟湰瑙勫垯鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	List<RevisionRuleVO> listRevisionRuleByIdCollection(Collection<String> revisionRuleIdCollection) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁鐗堟湰瑙勫垯涓婚敭鑾峰彇涓枃鍚嶇О
+	 * @param oid 鐗堟湰瑙勫垯涓婚敭锛屽涓娇鐢ㄩ�楀彿鍒嗛殧
+	 * @return 涓枃鍚嶇О锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull;澶氫釜浼氫互閫楀彿鍒嗛殧
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	String getNameByOid(String oid) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁鐗堟湰瑙勫垯鑻辨枃鍚嶇О鑾峰彇涓枃鍚嶇О
+	 * @param id 鐗堟湰瑙勫垯鑻辨枃鍚嶇О
+	 * @return 涓枃鍚嶇О锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull;澶氫釜浼氫互閫楀彿鍒嗛殧
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	String getNameById(String id) throws VciBaseException;
+	/**
+	 * 娣诲姞鐗堟湰瑙勫垯
+	 * @param revisionRuleDTO 鐗堟湰瑙勫垯鏄剧ず瀵硅薄锛堝拰DTO鍏辩敤锛�
+	 * @return 娣诲姞鍚庣殑鐗堟湰瑙勫垯
+	 * @throws VciBaseException 娣诲姞鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	RevisionRuleVO addSave(RevisionRuleDTO revisionRuleDTO) throws VciBaseException;
+
+	/**
+	 * 鎵归噺娣诲姞鐗堟湰瑙勫垯
+	 * @param revisionRuleDTOList 鐗堟湰瑙勫垯鏄剧ず瀵硅薄鍒楄〃(鍜孌TO鍏辩敤)
+	 * @return 鎵归噺娣诲姞鍚庣殑鐗堟湰瑙勫垯
+	 * @throws VciBaseException 娣诲姞鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<RevisionRuleVO> batchAddSave(List<RevisionRuleDTO> revisionRuleDTOList) throws VciBaseException;
+
+
+	/**
+	 * 淇敼鐗堟湰瑙勫垯
+	 * @param revisionRuleDTO 鐗堟湰瑙勫垯鏄剧ず瀵硅薄锛堝拰DTO鍏辩敤锛�
+	 * @return 淇敼鍚庣殑鐗堟湰瑙勫垯
+	 * @throws VciBaseException 淇敼鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	RevisionRuleVO editSave(RevisionRuleDTO revisionRuleDTO) throws VciBaseException;
+
+	/**
+	 * 鎵归噺淇敼鐗堟湰瑙勫垯
+	 * @param revisionRuleDTOList 鐗堟湰瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛堝拰DTO鍏辩敤锛�
+	 * @return 鎵归噺淇敼鍚庣殑鐗堟湰瑙勫垯
+	 * @throws VciBaseException 淇敼鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<RevisionRuleVO> batchEditSave(List<RevisionRuleDTO> revisionRuleDTOList) throws VciBaseException;
+
+	/**
+	 * 鍒犻櫎鐗堟湰瑙勫垯
+	 * @param revisionRuleVO 鐗堟湰瑙勫垯鏄剧ず瀵硅薄
+	 * @throws VciBaseException 濡傛灉鐗堟湰瑙勫垯琚紩鐢紝鎴栬�呭垹闄ゅ嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	void delete(RevisionRuleVO revisionRuleVO) throws VciBaseException;
+
+	/**
+	 * 鎵归噺鍒犻櫎鐗堟湰瑙勫垯
+	 * @param revisionRuleVOList 瑕佸垹闄ょ殑鐗堟湰瑙勫垯鏄剧ず瀵硅薄鍒楄〃
+	 * @throws VciBaseException 濡傛灉鐗堟湰瑙勫垯琚紩鐢紝鎴栬�呭垹闄ゅ嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	void batchDelete(List<RevisionRuleVO> revisionRuleVOList) throws VciBaseException;
+
+	/**
+	 * 鎵归噺鏍¢獙鐗堟湰瑙勫垯鏄惁琚娇鐢�
+	 * @param oidCollection 涓婚敭闆嗗悎
+	 * @return true琛ㄧず琚紩鐢�
+	 */
+	boolean batchCheckRevisionRuleUsed(Collection<String> oidCollection);
+
+	/**
+	 * 鑾峰彇浣跨敤鐗堟湰瑙勫垯鐨勪笟鍔$被鍨�
+	 * @param pkRevisionRule 鐗堟湰瑙勫垯鐨勪富閿�
+	 * @return 寮曠敤鐨勪笟鍔$被鍨�
+	 * @throws VciBaseException 鏌ヨ鍑洪敊鏃朵細鎶涘嚭寮傚父
+	 */
+	List<BtmTypeVO> listRevisionRuleUsedInfo(String pkRevisionRule) throws VciBaseException;
+
+	/**
+	 * 鏍¢獙鐗堟湰瑙勫垯鏄惁琚紩鐢�
+	 * @param pkRevisionRule 鐗堟湰瑙勫垯鐨勪富閿�
+	 * @return true琛ㄧず琚紩鐢紝 false琛ㄧず娌℃湁琚紩鐢�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	boolean checkRevisionRuleUsed(String pkRevisionRule) throws VciBaseException;
+
+	/**
+	 * 鍒ゆ柇鐗堟湰瑙勫垯鏄惁瀛樺湪
+	 * @param revisionRuleId 鐗堟湰瑙勫垯鐨勮嫳鏂囧悕绉�
+	 * @return true琛ㄧず閮藉瓨鍦紝false琛ㄧず涓嶅瓨鍦�
+	 * @throws VciBaseException 鍙傛暟閿欒鎴栬�呮煡璇㈠嚭閿欎細鎶涘嚭寮傚父
+	 */
+	boolean checkRevisionRuleExist(String revisionRuleId) throws VciBaseException;
+
+	/**
+	 * 鑾峰彇涓嬩竴涓増鏈殑鍊�
+	 * @param ruleId 鐗堟湰鐨勮鍒�
+	 * @param currentRevisionValue 褰撳墠鐗堟湰鐨勫�硷紝涓虹┖鐨勬椂鍊欙紝璇存槑鏄柊澧�
+	 * @return 涓嬩竴涓増鏈彿
+	 * @throws VciBaseException 鐗堟湰瑙勫垯涓嶅瓨鍦ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	String getNextRevisionValue(String ruleId, String currentRevisionValue) throws VciBaseException;
+
+	/**
+	 * 鍒嗛〉鏌ヨ
+	 * @param baseQueryObject 鏌ヨ瀵硅薄
+	 * @return 鏌ヨ缁撴灉
+	 * @throws VciBaseException 鏌ヨ鍑洪敊鏃舵姏鍑哄紓甯�
+	 */
+	IPage<RevisionRuleVO> pageQueryVO(BaseQueryObject baseQueryObject) throws VciBaseException;
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IStatusService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IStatusService.java
new file mode 100644
index 0000000..2ce2f32
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IStatusService.java
@@ -0,0 +1,164 @@
+package com.vci.ubcs.omd.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.omd.entity.Status;
+import com.vci.ubcs.omd.vo.StatusVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Description: 鐘舵�佹睜鐨勬湇鍔�
+ *
+ * @author LiHang
+ * @date 2023/5/23
+ */
+public interface IStatusService extends IService<Status> {
+
+	/**
+	 * 鑾峰彇鐘舵�佸垪琛�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉淇℃伅鍜屾帓搴忎俊鎭紝榛樿浣跨敤id鎺掑簭
+	 * @return 鐘舵�佸璞″垪琛�
+	 * @throws VciBaseException 鏌ヨ鍑洪敊鏃朵細鎶涘嚭寮傚父
+	 */
+	IPage<StatusVO> listStatus(Map<String,String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+	/**
+	 * 鑾峰彇鐘舵�佸垪琛�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @return 鐘舵�佸璞″垪琛�
+	 * @throws VciBaseException 鏌ヨ鍑洪敊鏃朵細鎶涘嚭寮傚父
+	 */
+	List<StatusVO> listStatusNoPage(Map<String,String> conditionMap) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁涓婚敭鑾峰彇鐘舵��
+	 * @param pkStatus 鐘舵�佷富閿�
+	 * @return 鐘舵�侊紝濡傛灉涓嶅瓨鍦ㄤ細杩斿洖null
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	StatusVO getStatusByOid(String pkStatus) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁涓婚敭鎵归噺鑾峰彇鐘舵��
+	 * @param primaryKeys 鐘舵�佷富閿紝鐢ㄩ�楀彿鍒嗛殧
+	 * @return 鐘舵�佸垪琛紝濡傛灉鏈変笉瀛樺湪鐨勪笉浼氳繑鍥烇紝鍏ㄩ儴涓嶅瓨鍦ㄧ殑鍒欒繑鍥炵┖鍒楄〃
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	List<StatusVO> listStatusByOids(String primaryKeys) throws VciBaseException;
+
+	/**
+	 * 鎵归噺鏍规嵁涓婚敭鑾峰彇鐘舵��
+	 * @param pkStatusCollection 鐘舵�佷富閿泦鍚�
+	 * @return 鐘舵�佸垪琛紝濡傛灉鏈変笉瀛樺湪鐨勪笉浼氳繑鍥烇紝鍏ㄩ儴涓嶅瓨鍦ㄧ殑鍒欒繑鍥炵┖鍒楄〃
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	List<StatusVO> listStatusByOidCollection(Collection<String> pkStatusCollection) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鑾峰彇鐘舵��
+	 * @param id 鑻辨枃鍚嶇О
+	 * @return 鐘舵�侊紝濡傛灉涓嶅瓨鍦ㄤ細杩斿洖null
+	 * @throws VciBaseException 鏌ヨ鍑洪敊鎶涘嚭寮傚父
+	 */
+	StatusVO getStatusById(String id) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鑾峰彇鐘舵��
+	 * @param ids 鑻辨枃鍚嶇О锛屼娇鐢ㄩ�楀彿鍒嗛殧
+	 * @return  鐘舵�佸垪琛紝濡傛灉鏈変笉瀛樺湪鐨勪笉浼氳繑鍥烇紝鍏ㄩ儴涓嶅瓨鍦ㄧ殑鍒欒繑鍥炵┖鍒楄〃
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	List<StatusVO> listStatusByIds(String ids) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鎵归噺鑾峰彇鐘舵��
+	 * @param idCollection 鑻辨枃鍚嶇О闆嗗悎
+	 * @return 鐘舵�佸垪琛紝濡傛灉鏈変笉瀛樺湪鐨勪笉浼氳繑鍥烇紝鍏ㄩ儴涓嶅瓨鍦ㄧ殑鍒欒繑鍥炵┖鍒楄〃
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	List<StatusVO> listStatusByIdCollection(Collection<String> idCollection) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁鐘舵�佷富閿幏鍙栦腑鏂囧悕绉�
+	 * @param oid 鐘舵�佷富閿紝澶氫釜浣跨敤閫楀彿鍒嗛殧
+	 * @return 涓枃鍚嶇О锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	String getNameByOid(String oid) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁鐘舵�佽嫳鏂囧悕绉拌幏鍙栦腑鏂囧悕绉�
+	 * @param id 鐘舵�佽嫳鏂囧悕绉�
+	 * @return 涓枃鍚嶇О锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	String getNameById(String id) throws VciBaseException;
+	/**
+	 * 娣诲姞鐘舵��
+	 * @param statusVO 鐘舵�佹樉绀哄璞★紙鍜孌TO鍏辩敤锛�
+	 * @return 娣诲姞鍚庣殑鐘舵��
+	 * @throws VciBaseException 娣诲姞鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	StatusVO addSave(StatusVO statusVO) throws VciBaseException;
+
+	/**
+	 * 鎵归噺娣诲姞鐘舵��
+	 * @param statusVOList 鐘舵�佹樉绀哄璞″垪琛�(鍜孌TO鍏辩敤)
+	 * @return 鎵归噺娣诲姞鍚庣殑鐘舵��
+	 * @throws VciBaseException 娣诲姞鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<StatusVO> batchAddSave(List<StatusVO> statusVOList) throws VciBaseException;
+
+
+	/**
+	 * 淇敼鐘舵��
+	 * @param statusVO 鐘舵�佹樉绀哄璞★紙鍜孌TO鍏辩敤锛�
+	 * @return 淇敼鍚庣殑鐘舵��
+	 * @throws VciBaseException 淇敼鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	StatusVO editSave(StatusVO statusVO) throws VciBaseException;
+
+	/**
+	 * 鎵归噺淇敼鐘舵��
+	 * @param statusVOList 鐘舵�佹樉绀哄璞″垪琛紙鍜孌TO鍏辩敤锛�
+	 * @return 鎵归噺淇敼鍚庣殑鐘舵��
+	 * @throws VciBaseException 淇敼鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<StatusVO> batchEditSave(List<StatusVO> statusVOList) throws VciBaseException;
+
+	/**
+	 * 鍒犻櫎鐘舵��
+	 * @param statusVO 鐘舵�佹樉绀哄璞�
+	 * @throws VciBaseException 濡傛灉鐘舵�佽寮曠敤锛屾垨鑰呭垹闄ゅ嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	void delete(StatusVO statusVO) throws VciBaseException;
+
+	/**
+	 * 鎵归噺鍒犻櫎鐘舵��
+	 * @param statusVOList 瑕佸垹闄ょ殑鐘舵�佹樉绀哄璞″垪琛�
+	 * @throws VciBaseException 濡傛灉鐘舵�佽寮曠敤锛屾垨鑰呭垹闄ゅ嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	void batchDelete(List<StatusVO> statusVOList) throws VciBaseException;
+
+	/**
+	 * 鎵归噺鏍¢獙鐘舵�佹槸鍚﹁浣跨敤
+	 * @param oidCollection 涓婚敭闆嗗悎
+	 * @return true琛ㄧず琚紩鐢�
+	 */
+	boolean checkStatusUseds(Collection<String> oidCollection);
+
+	/**
+	 * 鏍¢獙鐘舵�佹槸鍚﹁寮曠敤
+	 * @param pkStatus 鐘舵�佺殑涓婚敭
+	 * @return true琛ㄧず琚紩鐢紝 false琛ㄧず娌℃湁琚紩鐢�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	boolean checkStatusUsed(String pkStatus) throws VciBaseException;
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
index c12be50..154d4a0 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
@@ -11,9 +11,7 @@
 import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
 import com.vci.ubcs.omd.entity.Attribute;
 import com.vci.ubcs.omd.repeater.DomainRepeater;
-import com.vci.ubcs.omd.service.IAttributeService;
-import com.vci.ubcs.omd.service.IBtmTypeAttributeService;
-import com.vci.ubcs.omd.service.IModifyAttributeService;
+import com.vci.ubcs.omd.service.*;
 import com.vci.ubcs.omd.vo.*;
 import com.vci.ubcs.omd.wrapper.BtmTypeWrapper;
 import com.vci.ubcs.omd.wrapper.ModifyAttributeWrapper;
@@ -24,7 +22,6 @@
 import com.vci.ubcs.omd.entity.BtmTypeAttribute;
 import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
 import com.vci.ubcs.omd.mapper.BtmTypeMapper;
-import com.vci.ubcs.omd.service.IBtmTypeService;
 import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
 import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
@@ -75,6 +72,12 @@
 	 */
 	@Autowired
 	private IModifyAttributeService modifyAttributeService;
+
+	/**
+	 * 鐗堟湰瑙勫垯鐨勬湇鍔�
+	 */
+	@Autowired
+	private IRevisionRuleService revisionRuleService;
 
 	/**
 	 * 灞炴�х殑鏈嶅姟
@@ -589,12 +592,12 @@
 		if (btmTypeDTO.isRevisionFlag()){
 			// 闇�瑕佹帶鍒剁増鏈�
 			// 妫�鏌ヤ娇鐢ㄧ殑鐗堟湰瑙勫垯鏄惁瀛樺湪
-//				if (StringUtils.isNotBlank(btmTypeDTO.getRevisionRuleId())) {
-//					if (revisionRuleServiceI.checkRevisionRuleExist(btmTypeDTO.getRevisionRuleId())) {
-//						throw new VciBaseException("鐗堟湰瑙勫垯{0}[{1}]鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉",
-//							new Object[]{btmTypeDTO.getRevisionRuleId(), btmTypeDTO.getRevisionRuleName()});
-//					}
-//				}
+				if (StringUtils.isNotBlank(btmTypeDTO.getRevisionRuleId())) {
+					if (revisionRuleService.checkRevisionRuleExist(btmTypeDTO.getRevisionRuleId())) {
+						throw new VciBaseException("鐗堟湰瑙勫垯{0}[{1}]鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉",
+							new Object[]{btmTypeDTO.getRevisionRuleId(), btmTypeDTO.getRevisionRuleName()});
+					}
+				}
 			btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP));
 		}
 		if (btmTypeDTO.isLifeCycleFlag()){
@@ -798,7 +801,7 @@
 			attributeService.saveBatch(idAttrMap.values());
 		}else {
 			List<Attribute> addList = idAttrMap.values().stream().filter(a -> existAttr.stream().noneMatch(b -> StringUtils.equals(a.getKey(), b.getKey()))).collect(Collectors.toList());
-			if (CollectionUtils.isEmpty(addList)) {
+			if (!CollectionUtils.isEmpty(addList)) {
 				attributeService.saveBatch(addList);
 			}
 		}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/RevisionRuleServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/RevisionRuleServiceImpl.java
new file mode 100644
index 0000000..01f6cf0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/RevisionRuleServiceImpl.java
@@ -0,0 +1,563 @@
+package com.vci.ubcs.omd.service.impl;
+
+import com.alibaba.cloud.commons.lang.StringUtils;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.vci.ubcs.omd.dto.RevisionRuleDTO;
+import com.vci.ubcs.omd.entity.BtmType;
+import com.vci.ubcs.omd.entity.RevisionRule;
+import com.vci.ubcs.omd.mapper.BtmTypeMapper;
+import com.vci.ubcs.omd.mapper.RevisionRuleMapper;
+import com.vci.ubcs.omd.service.IRevisionRuleService;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
+import com.vci.ubcs.omd.vo.RevisionRuleVO;
+import com.vci.ubcs.omd.wrapper.BtmTypeWrapper;
+import com.vci.ubcs.omd.wrapper.RevisionRuleWrapper;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.util.Map2MPJLambdaUtil;
+import com.vci.ubcs.starter.util.MybatisParameterUtil;
+import com.vci.ubcs.starter.web.constant.RegExpConstant;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.starter.web.util.BeanUtil;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.cglib.beans.BeanMap;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * Description: 鐗堟湰瑙勫垯鐨勬湇鍔�
+ *
+ * @author LiHang
+ * @date 2023/5/17
+ */
+@Service
+public class RevisionRuleServiceImpl extends ServiceImpl<RevisionRuleMapper, RevisionRule> implements IRevisionRuleService {
+
+	private final Pattern pattern = Pattern.compile("\\d+");
+
+	@Resource
+	private BtmTypeMapper btmTypeMapper;
+
+	/**
+	 * 鑾峰彇鐗堟湰瑙勫垯鍒楄〃
+	 *
+	 * @param condition 鏌ヨ鏉′欢
+	 * @param query     鍒嗛〉淇℃伅鍜屾帓搴忎俊鎭紝榛樿浣跨敤id鎺掑簭
+	 * @return 鐗堟湰瑙勫垯瀵硅薄鍒楄〃
+	 * @throws VciBaseException 鏌ヨ鍑洪敊鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	public IPage<RevisionRuleVO> listRevisionRule(Map<String, String> condition, Query query) throws VciBaseException {
+		RevisionRule queryConditionObj = new RevisionRule();
+		BeanMap beanMap = BeanMap.create(queryConditionObj);
+		beanMap.putAll(condition);
+		return RevisionRuleWrapper.build().pageVO(baseMapper.selectPage(Condition.getPage(query),Condition.getQueryWrapper(queryConditionObj).lambda().orderByAsc(RevisionRule::getId)));
+	}
+
+	/**
+	 * 鏍规嵁涓婚敭鑾峰彇鐗堟湰瑙勫垯
+	 *
+	 * @param pkRevisionRule 鐗堟湰瑙勫垯涓婚敭
+	 * @return 鐗堟湰瑙勫垯锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public RevisionRuleVO getRevisionRuleByOid(String pkRevisionRule) throws VciBaseException {
+		VciBaseUtil.alertNotNull(pkRevisionRule,"鐗堟湰瑙勫垯涓婚敭");
+		return RevisionRuleWrapper.build().entityVO(getOne(Wrappers.<RevisionRule>query().lambda().eq(RevisionRule::getOid,pkRevisionRule)));
+	}
+
+	/**
+	 * 鏍规嵁涓婚敭鎵归噺鑾峰彇鐗堟湰瑙勫垯
+	 *
+	 * @param pkRevisionRules 鐗堟湰瑙勫垯涓婚敭锛岀敤閫楀彿鍒嗛殧
+	 * @return 鐗堟湰瑙勫垯鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<RevisionRuleVO> listRevisionRuleByOids(String pkRevisionRules) throws VciBaseException {
+		VciBaseUtil.alertNotNull(pkRevisionRules,"鐗堟湰瑙勫垯涓婚敭");
+		List<String> oidList = Func.toStrList(",", pkRevisionRules);
+		return RevisionRuleWrapper.build().listVO(list(MybatisParameterUtil.cutInParameter(Wrappers.<RevisionRule>query().lambda(),RevisionRule::getOid,oidList)));
+	}
+
+	/**
+	 * 鎵归噺鏍规嵁涓婚敭鑾峰彇鐗堟湰瑙勫垯
+	 *
+	 * @param pkRevisionRuleCollection 鐗堟湰瑙勫垯涓婚敭闆嗗悎
+	 * @return 鐗堟湰瑙勫垯鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<RevisionRuleVO> listRevisionRuleByOidCollection(Collection<String> pkRevisionRuleCollection) throws VciBaseException {
+		VciBaseUtil.alertNotNull(pkRevisionRuleCollection,"鐗堟湰瑙勫垯涓婚敭闆嗗悎");
+		return RevisionRuleWrapper.build().listVO(list(MybatisParameterUtil.cutInParameter(Wrappers.<RevisionRule>query().lambda(),RevisionRule::getOid, Arrays.asList(pkRevisionRuleCollection.toArray()))));
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鑾峰彇鐗堟湰瑙勫垯
+	 *
+	 * @param id 鑻辨枃鍚嶇О
+	 * @return 鐗堟湰瑙勫垯锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public RevisionRuleVO getRevisionRuleById(String id) throws VciBaseException {
+		VciBaseUtil.alertNotNull(id,"鑻辨枃鍚嶇О");
+		return RevisionRuleWrapper.build().entityVO(getOne(Wrappers.<RevisionRule>query().lambda().eq(RevisionRule::getId,id)));
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鑾峰彇鐗堟湰瑙勫垯
+	 *
+	 * @param ids 鑻辨枃鍚嶇О锛屼娇鐢ㄩ�楀彿鍒嗛殧
+	 * @return 鐗堟湰瑙勫垯鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<RevisionRuleVO> listRevisionRuleByIds(String ids) throws VciBaseException {
+		VciBaseUtil.alertNotNull(ids,"鑻辨枃鍚嶇О");
+		List<String> idList = Func.toStrList(",", ids);
+		return RevisionRuleWrapper.build().listVO(baseMapper.selectList(Wrappers.<RevisionRule>query().lambda().in(RevisionRule::getId,idList)));
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鎵归噺鑾峰彇鐗堟湰瑙勫垯
+	 *
+	 * @param revisionRuleIdCollection 鑻辨枃鍚嶇О闆嗗悎锛屼娇鐢ㄩ�楀彿鍒嗛殧
+	 * @return 鐗堟湰瑙勫垯鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<RevisionRuleVO> listRevisionRuleByIdCollection(Collection<String> revisionRuleIdCollection) throws VciBaseException {
+		VciBaseUtil.alertNotNull(revisionRuleIdCollection,"鑻辨枃鍚嶇О闆嗗悎");
+//		return RevisionRuleWrapper.build().listVO(list(MybatisParameterUtil.cutInParameter(Wrappers.<RevisionRule>query().lambda(),RevisionRule::getId, Collections.singletonList(revisionRuleIdCollection))));
+		List<RevisionRule> list = baseMapper.selectList(Wrappers.<RevisionRule>query().lambda().in(RevisionRule::getId, revisionRuleIdCollection));
+		return RevisionRuleWrapper.build().listVO(list);
+	}
+
+	/**
+	 * 鏍规嵁鐗堟湰瑙勫垯涓婚敭鑾峰彇涓枃鍚嶇О
+	 *
+	 * @param oid 鐗堟湰瑙勫垯涓婚敭锛屽涓娇鐢ㄩ�楀彿鍒嗛殧
+	 * @return 涓枃鍚嶇О锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull;澶氫釜浼氫互閫楀彿鍒嗛殧
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public String getNameByOid(String oid) throws VciBaseException {
+		VciBaseUtil.alertNotNull(oid,"鐗堟湰瑙勫垯涓婚敭");
+		return getRevisionRuleByOid(oid).getName();
+	}
+
+	/**
+	 * 鏍规嵁鐗堟湰瑙勫垯鑻辨枃鍚嶇О鑾峰彇涓枃鍚嶇О
+	 *
+	 * @param id 鐗堟湰瑙勫垯鑻辨枃鍚嶇О
+	 * @return 涓枃鍚嶇О锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull;澶氫釜浼氫互閫楀彿鍒嗛殧
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public String getNameById(String id) throws VciBaseException {
+		VciBaseUtil.alertNotNull(id,"鐗堟湰瑙勫垯鑻辨枃鍚嶇О");
+		return getRevisionRuleById(id).getName();
+	}
+
+	/**
+	 * 娣诲姞鐗堟湰瑙勫垯
+	 *
+	 * @param revisionRuleVO 鐗堟湰瑙勫垯鏄剧ず瀵硅薄锛堝拰DTO鍏辩敤锛�
+	 * @return 娣诲姞鍚庣殑鐗堟湰瑙勫垯
+	 * @throws VciBaseException 娣诲姞鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public RevisionRuleVO addSave(RevisionRuleDTO revisionRuleVO) throws VciBaseException {
+		VciBaseUtil.alertNotNull(revisionRuleVO,"瑕佹坊鍔犵殑鐗堟湰瑙勫垯",revisionRuleVO.getId(),"鐗堟湰瑙勫垯鑻辨枃鍚嶇О",revisionRuleVO.getName(),"鐗堟湰瑙勫垯涓枃鍚嶇О");
+		List<RevisionRuleVO> voList = batchAddSave(Collections.singletonList(revisionRuleVO));
+		if (!CollectionUtils.isEmpty(voList)){
+			return voList.get(0);
+		}
+		return null;
+	}
+
+	/**
+	 * 鎵归噺娣诲姞鐗堟湰瑙勫垯
+	 *
+	 * @param revisionRuleDTOList 鐗堟湰瑙勫垯鏄剧ず瀵硅薄鍒楄〃
+	 * @return 鎵归噺娣诲姞鍚庣殑鐗堟湰瑙勫垯
+	 * @throws VciBaseException 娣诲姞鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<RevisionRuleVO> batchAddSave(List<RevisionRuleDTO> revisionRuleDTOList) throws VciBaseException {
+		if(CollectionUtils.isEmpty(revisionRuleDTOList)){
+			throw new VciBaseException("瑕佹坊鍔犵殑鐗堟湰瑙勫垯瀵硅薄涓嶈兘涓虹┖");
+		}
+		//1. 鍒ゆ柇鍚勪釜灞炴�ф槸鍚﹀繀杈撻」閮借緭鍏ヤ簡
+		//2. 鍒ゆ柇鐨勮嫳鏂囧悕绉版槸鍚﹂噸澶�
+		Set<String> idSet = new HashSet<>();
+		String creator = AuthUtil.getUserAccount();
+		Date now = new Date();
+		String btmName = "revision-rule";
+		List<RevisionRule> revisionRuleList = new ArrayList<>();
+		revisionRuleDTOList.forEach(s -> {
+			//鍒ゆ柇涓虹┖
+			VciBaseUtil.alertNotNull(s.getId(),"鐗堟湰瑙勫垯鑻辨枃鍚嶇О",s.getName(),"鐗堟湰瑙勫垯涓枃鍚嶇О",s.getStartCode(),"璧峰瀛楃",s.getSerialStep(),"姝ラ暱");
+			//鍒ゆ柇鏈鏄惁瀛樺湪
+			if(idSet.contains(s.getId().toLowerCase().trim())){
+				throw new VciBaseException("鑻辨枃鍚嶇О涓簕0}鐨勭姸鎬佸凡缁忓瓨鍦�",new Object[]{s.getId()});
+			}else{
+				idSet.add(s.getId().toLowerCase().trim());
+			}
+			RevisionRule ruleDO = org.springblade.core.tool.utils.BeanUtil.copy(s, RevisionRule.class);
+			if(StringUtils.isBlank(ruleDO.getOid())){
+				ruleDO.setOid(VciBaseUtil.getPk());
+			}
+			//鍒ゆ柇灞炴�ф槸鍚︾鍚堣姹�
+			ruleDO.setCreator(creator);
+			ruleDO.setCreateTime(now);
+			ruleDO.setOwner(creator);
+			ruleDO.setBtmName(btmName);
+			ruleDO.setTs(now);
+			ruleDO.setLastModifier(creator);
+			ruleDO.setLastModifyTime(now);
+			ruleDO.setTs(now);
+			revisionRuleList.add(ruleDO);
+		});
+		//鍒ゆ柇鏄惁瀛樺湪
+		List<RevisionRuleVO> checkExistList = listRevisionRuleByIdCollection(idSet);
+		if(!CollectionUtils.isEmpty(checkExistList)){
+			String existIds = checkExistList.stream().map(RevisionRuleVO::getId).collect(Collectors.joining(","));
+			throw new VciBaseException("鑻辨枃鍚嶇О涓簕0}鐨勭増鏈鍒欑殑宸茬粡鍦ㄧ郴缁熶腑瀛樺湪锛堜笉鍖哄垎澶у皬鍐欙級锛屼笉鑳芥坊鍔�",new Object[]{existIds});
+		}
+		VciBaseUtil.switchCollectionForOracleIn(revisionRuleList,1000).forEach(this::saveOrUpdateBatch);
+		return RevisionRuleWrapper.build().listEntityVO(revisionRuleList);
+	}
+
+	/**
+	 * 淇敼鐗堟湰瑙勫垯
+	 *
+	 * @param revisionRuleDTO 鐗堟湰瑙勫垯鏄剧ず瀵硅薄锛堝拰DTO鍏辩敤锛�
+	 * @return 淇敼鍚庣殑鐗堟湰瑙勫垯
+	 * @throws VciBaseException 淇敼鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public RevisionRuleVO editSave(RevisionRuleDTO revisionRuleDTO) throws VciBaseException {
+		VciBaseUtil.alertNotNull(revisionRuleDTO,"瑕佷慨鏀圭殑鐗堟湰瑙勫垯瀵硅薄",revisionRuleDTO.getOid(),"瑕佷慨鏀圭殑鐗堟湰瑙勫垯瀵硅薄鐨勪富閿�");
+		List<RevisionRuleVO> voList = batchEditSave(Collections.singletonList(revisionRuleDTO));
+		if (!CollectionUtils.isEmpty(voList)){
+			return voList.get(0);
+		}
+		return null;
+	}
+
+	/**
+	 * 鎵归噺淇敼鐗堟湰瑙勫垯
+	 *
+	 * @param revisionRuleDTOList 鐗堟湰瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛堝拰DTO鍏辩敤锛�
+	 * @return 鎵归噺淇敼鍚庣殑鐗堟湰瑙勫垯
+	 * @throws VciBaseException 淇敼鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<RevisionRuleVO> batchEditSave(List<RevisionRuleDTO> revisionRuleDTOList) throws VciBaseException {
+		if(CollectionUtils.isEmpty(revisionRuleDTOList)){
+			throw new VciBaseException("瑕佷慨鏀圭殑鐗堟湰瑙勫垯瀵硅薄涓嶈兘涓虹┖");
+		}
+		//1. 鍒ゆ柇鍚勪釜灞炴�ф槸鍚﹀繀杈撻」閮借緭鍏ヤ簡
+		//2. 鍒ゆ柇鐨勮嫳鏂囧悕绉版槸鍚﹂噸澶�
+		Set<String> idSet = new HashSet<>();
+		Map<String,RevisionRuleDTO> oidObjectMap = new HashMap<>(16);
+		String creator = AuthUtil.getUserAccount();
+		Date now = new Date();
+		List<RevisionRule> revisionRuleList = new ArrayList<>();
+		revisionRuleDTOList.forEach(s -> {
+			//鍒ゆ柇涓虹┖
+			VciBaseUtil.alertNotNull(s.getOid(),"鐗堟湰瑙勫垯涓婚敭",s.getId(),"鐗堟湰瑙勫垯鑻辨枃鍚嶇О",s.getName(),"鐗堟湰瑙勫垯涓枃鍚嶇О",s.getStartCode(),"璧峰瀛楃",s.getSerialStep(),"姝ラ暱");
+			//鍒ゆ柇鏈鏄惁瀛樺湪
+			if(idSet.contains(s.getId().toLowerCase().trim())){
+				throw new VciBaseException("鑻辨枃鍚嶇О涓簕0}鐨勭増鏈鍒欏凡缁忓瓨鍦紙涓嶅尯鍒嗗ぇ灏忓啓锛�",new Object[]{s.getId()});
+			}else{
+				idSet.add(s.getId().toLowerCase().trim());
+			}
+			oidObjectMap.put(s.getOid(),s);
+			RevisionRule ruleDO = org.springblade.core.tool.utils.BeanUtil.copy(s, RevisionRule.class);
+			ruleDO.setLastModifier(creator);
+			ruleDO.setLastModifyTime(now);
+			ruleDO.setTs(now);
+			revisionRuleList.add(ruleDO);
+		});
+		//鍒ゆ柇鏄惁瀛樺湪
+		List<RevisionRuleVO> checkExistList = listRevisionRuleByOidCollection(oidObjectMap.keySet());
+		if(CollectionUtils.isEmpty(checkExistList)){
+			throw new VciBaseException("杩欎簺鐗堟湰瑙勫垯鍦ㄧ郴缁熶腑鍧囦笉瀛樺湪",new Object[]{});
+		}
+		//鍒ゆ柇灞炴�у悕绉版槸鍚︿慨鏀�
+		Set<String> oidInDbSet = new HashSet<>();
+		checkExistList.forEach(s -> {
+			RevisionRuleDTO revisionRuleDTO =  oidObjectMap.get(s.getOid());
+			if(!revisionRuleDTO.getId().equalsIgnoreCase(s.getId())){
+				throw new VciBaseException("鐗堟湰瑙勫垯[{0}]鐨勮嫳鏂囧悕绉颁笉鍏佽淇敼锛屽師鍚嶇О{1},鏂板悕绉皗2}",new Object[]{s.getName(),s.getId(),revisionRuleDTO.getId()});
+			}
+			BeanUtil.convert(revisionRuleDTO,s);
+			oidInDbSet.add(s.getOid());
+		});
+		//鐪嬬湅鏄惁鏈変笉鍦ㄧ郴缁熶腑瀛樺湪鐨�
+		oidObjectMap.forEach( (k,v) ->{
+			if(!oidInDbSet.contains(k)){
+				throw new VciBaseException("鐗堟湰瑙勫垯{0}[{1}]鍦ㄧ郴缁熶腑涓嶅瓨鍦�",new Object[]{v.getId(),v.getName()});
+			}
+		});
+		VciBaseUtil.switchCollectionForOracleIn(revisionRuleList,1000).forEach(this::saveOrUpdateBatch);
+		return RevisionRuleWrapper.build().listEntityVO(revisionRuleList);
+	}
+
+	/**
+	 * 鍒犻櫎鐗堟湰瑙勫垯
+	 *
+	 * @param revisionRuleVO 鐗堟湰瑙勫垯鏄剧ず瀵硅薄
+	 * @throws VciBaseException 濡傛灉鐗堟湰瑙勫垯琚紩鐢紝鎴栬�呭垹闄ゅ嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public void delete(RevisionRuleVO revisionRuleVO) throws VciBaseException {
+		VciBaseUtil.alertNotNull(revisionRuleVO,"瑕佸垹闄ょ殑鐗堟湰瀵硅薄",revisionRuleVO.getOid(),"瑕佸垹闄ょ殑鐗堟湰瀵硅薄鐨勪富閿�");
+		batchDelete(Collections.singletonList(revisionRuleVO));
+	}
+
+	/**
+	 * 鎵归噺鍒犻櫎鐗堟湰瑙勫垯
+	 *
+	 * @param revisionRuleVOList 瑕佸垹闄ょ殑鐗堟湰瑙勫垯鏄剧ず瀵硅薄鍒楄〃
+	 * @throws VciBaseException 濡傛灉鐗堟湰瑙勫垯琚紩鐢紝鎴栬�呭垹闄ゅ嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	@Transactional(rollbackFor = VciBaseException.class)
+	public void batchDelete(List<RevisionRuleVO> revisionRuleVOList) throws VciBaseException {
+		VciBaseUtil.alertNotNull(revisionRuleVOList,"鐗堟湰瑙勫垯");
+		Set<String> oidSet = revisionRuleVOList.stream().map(RevisionRuleVO::getOid).peek(s -> VciBaseUtil.alertNotNull(StringUtil.isBlank(s))).collect(Collectors.toSet());
+		List<RevisionRuleVO> revisionRuleList = listRevisionRuleByOidCollection(oidSet);
+		if(CollectionUtils.isEmpty(revisionRuleList)){
+			throw new VciBaseException("瑕佸垹闄ょ殑鐗堟湰瑙勫垯鍦ㄧ郴缁熶腑涓嶅瓨鍦�,鍙兘鎮ㄩ渶瑕佸埛鏂板悗鍐嶈瘯");
+		}
+		Set<String> oidInDbSet = revisionRuleList.stream().map(RevisionRuleVO::getOid).collect(Collectors.toSet());
+		oidSet.forEach( s -> {
+			if(!oidInDbSet.contains(s)){
+				throw new VciBaseException("瑕佸垹闄ょ殑鐗堟湰瑙勫垯鍦ㄧ郴缁熶腑涓嶅瓨鍦�,鍙兘鎮ㄩ渶瑕佸埛鏂板悗鍐嶈瘯");
+			}
+		});
+		//妫�鏌ュ睘鎬ф槸鍚﹁寮曠敤
+		if(batchCheckRevisionRuleUsed(oidSet)){
+			throw new VciBaseException("瑕佸垹闄ょ殑鐗堟湰瑙勫垯鍦ㄤ笟鍔$被鍨嬩腑琚娇鐢紝鏃犳硶鍒犻櫎");
+		}
+		//鎵ц鎵归噺鍒犻櫎
+		Collection<Collection<String>> oidCollections = VciBaseUtil.switchCollectionForOracleIn(oidInDbSet);
+		for(Collection<String> oidCollection : oidCollections){
+			baseMapper.delete(Wrappers.<RevisionRule>query().lambda().in(RevisionRule::getOid,oidCollection));
+		}
+
+	}
+
+	/**
+	 * 鎵归噺鏍¢獙鐗堟湰瑙勫垯鏄惁琚娇鐢�
+	 *
+	 * @param oidCollection 涓婚敭闆嗗悎
+	 * @return true琛ㄧず琚紩鐢�
+	 */
+	@Override
+	public boolean batchCheckRevisionRuleUsed(Collection<String> oidCollection) {
+		VciBaseUtil.alertNotNull("鏍¢獙鏄惁寮曠敤鐨勭増鏈鍒欑殑涓婚敭",oidCollection);
+		//妫�鏌ヤ笟鍔$被鍨�
+		Collection<Collection<String>> oidCollections = VciBaseUtil.switchCollectionForOracleIn(oidCollection);
+		for(Collection<String> oids : oidCollections) {
+			MPJLambdaWrapper<BtmType> join = Map2MPJLambdaUtil.getMPJLambdaWrapper(new BtmType())
+				.join("join", RevisionRule.class, RevisionRule::getId, BtmType::getRevisionRuleId)
+				.in(RevisionRule::getOid, oids);
+			Long count = btmTypeMapper.selectCount(join);
+			if(count>0){
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * 鑾峰彇浣跨敤鐗堟湰瑙勫垯鐨勪笟鍔$被鍨�
+	 *
+	 * @param pkRevisionRule 鐗堟湰瑙勫垯鐨勪富閿�
+	 * @return 寮曠敤鐨勪笟鍔$被鍨�
+	 * @throws VciBaseException 鏌ヨ鍑洪敊鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<BtmTypeVO> listRevisionRuleUsedInfo(String pkRevisionRule) throws VciBaseException {
+		VciBaseUtil.alertNotNull(pkRevisionRule,"鐗堟湰瑙勫垯瀵硅薄鐨勪富閿�");
+		List<BtmType> result = btmTypeMapper.selectList(
+			Map2MPJLambdaUtil.getMPJLambdaWrapper(new BtmType())
+				.join("join", RevisionRule.class, RevisionRule::getId, BtmType::getRevisionRuleId)
+				.eq(RevisionRule::getOid, pkRevisionRule));
+		return BtmTypeWrapper.build().listEntityVO(result);
+	}
+
+	/**
+	 * 鏍¢獙鐗堟湰瑙勫垯鏄惁琚紩鐢�
+	 *
+	 * @param pkRevisionRule 鐗堟湰瑙勫垯鐨勪富閿�
+	 * @return true琛ㄧず琚紩鐢紝 false琛ㄧず娌℃湁琚紩鐢�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public boolean checkRevisionRuleUsed(String pkRevisionRule) throws VciBaseException {
+		VciBaseUtil.alertNotNull(pkRevisionRule,"瑕佹牎楠屾槸鍚﹀紩鐢ㄧ殑鐗堟湰瑙勫垯瀵硅薄鐨勪富閿�");
+		return batchCheckRevisionRuleUsed(Func.toStrList(",",pkRevisionRule));
+	}
+
+	/**
+	 * 鍒ゆ柇鐗堟湰瑙勫垯鏄惁瀛樺湪
+	 *
+	 * @param revisionRuleId 鐗堟湰瑙勫垯鐨勮嫳鏂囧悕绉�
+	 * @return true琛ㄧず閮藉瓨鍦紝false琛ㄧず涓嶅瓨鍦�
+	 * @throws VciBaseException 鍙傛暟閿欒鎴栬�呮煡璇㈠嚭閿欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public boolean checkRevisionRuleExist(String revisionRuleId) throws VciBaseException {
+		VciBaseUtil.alertNotNull(revisionRuleId,"鐗堟湰瑙勫垯鐨勮嫳鏂囧悕绉�");
+		List<String> idList = Func.toStrList(",",revisionRuleId.toLowerCase(Locale.ROOT));
+		List<RevisionRuleVO> revisionRuleDOList = listRevisionRuleByIdCollection(idList);
+		if(CollectionUtils.isEmpty(revisionRuleDOList)){
+			return false;
+		}else{
+			Set<String> existIdList = revisionRuleDOList.stream().map(RevisionRuleVO::getId)
+				.collect(Collectors.toList()).stream()
+				.map(String::toLowerCase).collect(Collectors.toSet());
+			//涓婃柟宸茬粡杞崲涓轰簡灏忓啓
+			return idList.stream().allMatch(s -> existIdList.contains(s.toLowerCase().trim()));
+		}
+	}
+
+	/**
+	 * 鑾峰彇涓嬩竴涓増鏈殑鍊�
+	 *
+	 * @param ruleId               鐗堟湰鐨勮鍒�
+	 * @param currentRevisionValue 褰撳墠鐗堟湰鐨勫�硷紝涓虹┖鐨勬椂鍊欙紝璇存槑鏄柊澧�
+	 * @return 涓嬩竴涓増鏈彿
+	 * @throws VciBaseException 鐗堟湰瑙勫垯涓嶅瓨鍦ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public String getNextRevisionValue(String ruleId, String currentRevisionValue) throws VciBaseException {
+		VciBaseUtil.alertNotNull(ruleId,"瑙勫垯鐨勮嫳鏂囧悕绉�");
+		boolean isFirstRevision = StringUtils.isBlank(currentRevisionValue);
+		RevisionRuleVO revisionRuleVO = getRevisionRuleByOid(ruleId);
+		String ruleValue;
+		if(isFirstRevision){
+			//鍓嶇紑+ 璧峰 + 鍚庣紑
+			return (StringUtils.isBlank(revisionRuleVO.getPrefixCode())?"":revisionRuleVO.getPrefixCode().trim()) + revisionRuleVO.getStartCode() +
+				(StringUtils.isBlank(revisionRuleVO.getSuffixCode())?"":revisionRuleVO.getSuffixCode().trim());
+		}else{
+			ruleValue = replacePrefixAndSubfix(currentRevisionValue, revisionRuleVO.getPrefixCode(), revisionRuleVO.getSuffixCode());
+			String lastChar = ruleValue.substring(ruleValue.length()-1);
+			String unHasLastCharRule = ruleValue.substring(0,ruleValue.length()-1);
+			Integer step = revisionRuleVO.getSerialStep();
+			if(step == null){
+				step = 1;
+			}
+			if(lastChar.matches(RegExpConstant.LETTER)){
+				//鏄瓧姣嶇殑锛屽姞杩囧幓鍚庡鏋滆秴杩囦簡Z锛岄偅灏卞緱鍔犱竴浣�
+				//鐢╝scii鐮佹潵娣诲姞
+				int ascInt = lastChar.toCharArray()[0];
+				int ascForZ = "Z".toCharArray()[0];
+				int ascForA = "A".toCharArray()[0];
+				int newValueAsc;
+
+				if((ascInt + step) > ascForZ){
+					newValueAsc = (ascInt + step) - ascForZ  + ascForA;
+					ruleValue = unHasLastCharRule + "A" + (char)newValueAsc;
+				}else {
+					ruleValue = unHasLastCharRule + (char)(ascInt + step);
+				}
+			}else{
+				//鏄暟瀛�
+				String lastNumberInString  = getNumbers(ruleValue);
+				String nextNumber = String.valueOf(Integer.parseInt(lastNumberInString) + step);
+				if(ruleValue.length() > lastNumberInString.length()){
+					ruleValue = ruleValue.substring(0,ruleValue.length() - lastNumberInString.length()-1) + nextNumber;
+				}else{
+					ruleValue = nextNumber;
+				}
+			}
+		}
+		return ruleValue;
+	}
+
+	/**
+	 * 鑾峰彇瀛楃涓蹭腑鐨勬暟瀛楅儴鍒�
+	 * @param content 瀛楃涓插唴瀹�
+	 * @return 鏁板瓧鐨勯儴鍒�,鏈�鍚庣殑閭i儴鍒�
+	 */
+	private String getNumbers(String content) {
+		Matcher matcher = pattern.matcher(content);
+		while (matcher.find()) {
+			return matcher.group(matcher.groupCount()-1);
+		}
+		return "";
+	}
+
+
+	/**
+	 * 鏇挎崲鍓嶇紑鍜屽悗缂�
+	 * @param ruleValue 褰撳墠鐗堟湰鐨勫��
+	 * @param prefix 鍓嶇紑
+	 * @param subfix 鍚庣紑
+	 * @return 鍘婚櫎鍓嶇紑鍜屽悗缂�鐨勭増鏈鍒�
+	 */
+	private String replacePrefixAndSubfix(String ruleValue, String prefix, String subfix){
+		if(prefix==null){
+			prefix = "";
+		}
+		if(subfix == null){
+			subfix = "";
+		}
+		if(StringUtils.isNotBlank(prefix) && ruleValue.startsWith(prefix)){
+			ruleValue = ruleValue.substring(prefix.length());
+		}
+		if(StringUtils.isNotBlank(subfix) && ruleValue.endsWith(subfix)){
+			ruleValue = ruleValue.substring(0,ruleValue.length()-subfix.length()-1);
+		}
+		return ruleValue;
+	}
+
+	/**
+	 * 鍒嗛〉鏌ヨ
+	 *
+	 * @param baseQueryObject 鏌ヨ瀵硅薄
+	 * @return 鏌ヨ缁撴灉
+	 * @throws VciBaseException 鏌ヨ鍑洪敊鏃舵姏鍑哄紓甯�
+	 */
+	@Override
+	public IPage<RevisionRuleVO> pageQueryVO(BaseQueryObject baseQueryObject) throws VciBaseException {
+		Map<String, String> conditionMap = baseQueryObject.getConditionMap();
+		if (conditionMap == null){
+			conditionMap = new HashMap<>();
+		}
+		PageHelper pageHelper = baseQueryObject.getPageHelper();
+		Query query = new Query();
+		query.setCurrent(pageHelper.getPage());
+		query.setSize(pageHelper.getLimit());
+		query.setAscs(pageHelper.getSort());
+		RevisionRule queryConditionObj = new RevisionRule();
+		BeanMap beanMap = BeanMap.create(queryConditionObj);
+		beanMap.putAll(conditionMap);
+		return RevisionRuleWrapper.build().pageVO(baseMapper.selectPage(Condition.getPage(query),Condition.getQueryWrapper(queryConditionObj).lambda().orderByAsc(RevisionRule::getId)));
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/StatusServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/StatusServiceImpl.java
new file mode 100644
index 0000000..460ec37
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/StatusServiceImpl.java
@@ -0,0 +1,459 @@
+package com.vci.ubcs.omd.service.impl;
+
+import com.alibaba.cloud.commons.lang.StringUtils;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.omd.entity.Status;
+import com.vci.ubcs.omd.mapper.StatusMapper;
+import com.vci.ubcs.omd.service.IStatusService;
+import com.vci.ubcs.omd.vo.StatusVO;
+import com.vci.ubcs.omd.wrapper.StatusWrapper;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.starter.web.util.BeanUtil;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.cglib.beans.BeanMap;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * Description: 鐘舵�佹睜鐨勫疄鐜扮被
+ *
+ * @author LiHang
+ * @date 2023/5/23
+ */
+@Service
+public class StatusServiceImpl extends ServiceImpl<StatusMapper, Status> implements IStatusService {
+
+	private final String REGEXP = "^[A-Za-z]+$";
+
+	/**
+	 * 鑾峰彇鐘舵�佸垪琛�
+	 *
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper   鍒嗛〉淇℃伅鍜屾帓搴忎俊鎭紝榛樿浣跨敤id鎺掑簭
+	 * @return 鐘舵�佸璞″垪琛�
+	 * @throws VciBaseException 鏌ヨ鍑洪敊鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	public IPage<StatusVO> listStatus(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+		Query query = new Query();
+		query.setCurrent(pageHelper.getPage());
+		query.setSize(pageHelper.getLimit());
+		query.setAscs("id");
+		Status queryVO = new Status();
+		BeanMap.create(queryVO).putAll(conditionMap);
+		return StatusWrapper.build().pageVO(baseMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(queryVO).lambda().orderByAsc(Status::getId)));
+	}
+
+	/**
+	 * 鑾峰彇鐘舵�佸垪琛�
+	 *
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @return 鐘舵�佸璞″垪琛�
+	 * @throws VciBaseException 鏌ヨ鍑洪敊鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<StatusVO> listStatusNoPage(Map<String, String> conditionMap) throws VciBaseException {
+		Status queryVO = new Status();
+		BeanMap.create(queryVO).putAll(conditionMap);
+		return StatusWrapper.build().listEntityVO(baseMapper.selectList(Condition.getQueryWrapper(queryVO).lambda().orderByAsc(Status::getId)));
+	}
+
+	/**
+	 * 鏍规嵁涓婚敭鑾峰彇鐘舵��
+	 *
+	 * @param pkStatus 鐘舵�佷富閿�
+	 * @return 鐘舵�侊紝濡傛灉涓嶅瓨鍦ㄤ細杩斿洖null
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public StatusVO getStatusByOid(String pkStatus) throws VciBaseException {
+		List<StatusVO> statusVOList = listStatusByOids(pkStatus);
+		if (!CollectionUtils.isEmpty(statusVOList)){
+			return statusVOList.get(0);
+		}
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁涓婚敭鎵归噺鑾峰彇鐘舵��
+	 *
+	 * @param primaryKeys 鐘舵�佷富閿紝鐢ㄩ�楀彿鍒嗛殧
+	 * @return 鐘舵�佸垪琛紝濡傛灉鏈変笉瀛樺湪鐨勪笉浼氳繑鍥烇紝鍏ㄩ儴涓嶅瓨鍦ㄧ殑鍒欒繑鍥炵┖鍒楄〃
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<StatusVO> listStatusByOids(String primaryKeys) throws VciBaseException {
+		VciBaseUtil.alertNotNull(primaryKeys,"鐘舵�佺殑涓婚敭");
+		List<String> pkList = Func.toStrList(",", primaryKeys);
+		return listStatusByOidCollection(pkList);
+	}
+
+	/**
+	 * 鎵归噺鏍规嵁涓婚敭鑾峰彇鐘舵��
+	 *
+	 * @param pkStatusCollection 鐘舵�佷富閿泦鍚�
+	 * @return 鐘舵�佸垪琛紝濡傛灉鏈変笉瀛樺湪鐨勪笉浼氳繑鍥烇紝鍏ㄩ儴涓嶅瓨鍦ㄧ殑鍒欒繑鍥炵┖鍒楄〃
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<StatusVO> listStatusByOidCollection(Collection<String> pkStatusCollection) throws VciBaseException {
+		if(!CollectionUtils.isEmpty(pkStatusCollection)){
+			List<Status> statusDOList = listStatusByOidCollectionDO(pkStatusCollection);
+			if(!CollectionUtils.isEmpty(statusDOList)) {
+				return StatusWrapper.build().listEntityVO(statusDOList);
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁涓婚敭闆嗗悎鑾峰彇鏁版嵁瀵硅薄
+	 * @param oidCollection 涓婚敭闆嗗悎
+	 * @return 鏌ヨ鍑烘潵鐨勬暟鎹璞�
+	 * @throws VciBaseException mybatis鎵ц鍑洪敊鏃朵細鎶涘嚭寮傚父
+	 */
+	private List<Status> listStatusByOidCollectionDO(Collection<String> oidCollection) throws VciBaseException{
+		if(!CollectionUtils.isEmpty(oidCollection)){
+			List<Status> statusDOList = new ArrayList<>();
+			Collection<Collection<String>> pksCollections = VciBaseUtil.switchCollectionForOracleIn(oidCollection);
+			if(!CollectionUtils.isEmpty(pksCollections)) {
+				pksCollections.forEach(s -> {
+					List<Status> queryResult = baseMapper.selectList(Wrappers.<Status>query().lambda().in(Status::getOid,s));
+					if(!CollectionUtils.isEmpty(queryResult)){
+						statusDOList.addAll(queryResult);
+					}
+				});
+			}
+			return statusDOList;
+		}
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鑾峰彇鐘舵��
+	 *
+	 * @param id 鑻辨枃鍚嶇О
+	 * @return 鐘舵�侊紝濡傛灉涓嶅瓨鍦ㄤ細杩斿洖null
+	 * @throws VciBaseException 鏌ヨ鍑洪敊鎶涘嚭寮傚父
+	 */
+	@Override
+	public StatusVO getStatusById(String id) throws VciBaseException {
+		List<StatusVO> statusVOList = listStatusByIds(id);
+		if(!CollectionUtils.isEmpty(statusVOList)){
+			return statusVOList.get(0);
+		}
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鑾峰彇鐘舵��
+	 *
+	 * @param ids 鑻辨枃鍚嶇О锛屼娇鐢ㄩ�楀彿鍒嗛殧
+	 * @return 鐘舵�佸垪琛紝濡傛灉鏈変笉瀛樺湪鐨勪笉浼氳繑鍥烇紝鍏ㄩ儴涓嶅瓨鍦ㄧ殑鍒欒繑鍥炵┖鍒楄〃
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<StatusVO> listStatusByIds(String ids) throws VciBaseException {
+		VciBaseUtil.alertNotNull(ids,"鐘舵�佺殑鑻辨枃鍚嶇О");
+		List<String> idList = Func.toStrList(",", ids);
+		return listStatusByIdCollection(idList);
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鎵归噺鑾峰彇鐘舵��
+	 *
+	 * @param idCollection 鑻辨枃鍚嶇О闆嗗悎
+	 * @return 鐘舵�佸垪琛紝濡傛灉鏈変笉瀛樺湪鐨勪笉浼氳繑鍥烇紝鍏ㄩ儴涓嶅瓨鍦ㄧ殑鍒欒繑鍥炵┖鍒楄〃
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<StatusVO> listStatusByIdCollection(Collection<String> idCollection) throws VciBaseException {
+		if(!CollectionUtils.isEmpty(idCollection)){
+			List<Status> statusDOList = listStatusByIdCollectionDO(idCollection);
+			if(!CollectionUtils.isEmpty(statusDOList)) {
+				return StatusWrapper.build().listEntityVO(statusDOList);
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鑾峰彇鏁版嵁瀵硅薄
+	 * @param idCollection 鑻辨枃鍚嶇О闆嗗悎
+	 * @return 鏁版嵁瀵硅薄鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws VciBaseException mybatis鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	private List<Status> listStatusByIdCollectionDO(Collection<String> idCollection) throws VciBaseException {
+		if(CollectionUtils.isEmpty(idCollection)) {
+			return null;
+		}
+		List<Status> statusDOList = new ArrayList<>();
+		Collection<Collection<String>> idCollections = VciBaseUtil.switchCollectionForOracleIn(idCollection);
+		if(!CollectionUtils.isEmpty(idCollections)) {
+			idCollections.forEach(s -> {
+				List<Status> queryResult = baseMapper.selectList(Wrappers.<Status>query().lambda().in(Status::getId,s));
+				if(!CollectionUtils.isEmpty(queryResult)){
+					statusDOList.addAll(queryResult);
+				}
+			});
+		}
+		return statusDOList;
+	}
+
+	/**
+	 * 鏍规嵁鐘舵�佷富閿幏鍙栦腑鏂囧悕绉�
+	 *
+	 * @param oid 鐘舵�佷富閿紝澶氫釜浣跨敤閫楀彿鍒嗛殧
+	 * @return 涓枃鍚嶇О锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public String getNameByOid(String oid) throws VciBaseException {
+		VciBaseUtil.alertNotNull(oid,"鐘舵�佸璞′富閿�");
+		return Optional.ofNullable(getStatusByOid(oid)).orElseGet(StatusVO::new).getName();
+	}
+
+	/**
+	 * 鏍规嵁鐘舵�佽嫳鏂囧悕绉拌幏鍙栦腑鏂囧悕绉�
+	 *
+	 * @param id 鐘舵�佽嫳鏂囧悕绉�
+	 * @return 涓枃鍚嶇О锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public String getNameById(String id) throws VciBaseException {
+		VciBaseUtil.alertNotNull(id,"鐘舵�佸璞′富閿�");
+		return Optional.ofNullable(getStatusById(id)).orElseGet(StatusVO::new).getName();
+	}
+
+	/**
+	 * 娣诲姞鐘舵��
+	 *
+	 * @param statusVO 鐘舵�佹樉绀哄璞★紙鍜孌TO鍏辩敤锛�
+	 * @return 娣诲姞鍚庣殑鐘舵��
+	 * @throws VciBaseException 娣诲姞鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public StatusVO addSave(StatusVO statusVO) throws VciBaseException {
+		VciBaseUtil.alertNotNull(statusVO,"瑕佹坊鍔犵殑鐘舵��",statusVO.getId(),"鐘舵�佽嫳鏂囧悕绉�",statusVO.getName(),"鐘舵�佷腑鏂囧悕绉�");
+		List<StatusVO> statusVOS = new ArrayList<>();
+		statusVOS.add(statusVO);
+		List<StatusVO> statusVOList = batchAddSave(statusVOS);
+		if(CollectionUtils.isEmpty(statusVOList)){
+			return null;
+		}
+		return statusVOList.get(0);
+	}
+
+	/**
+	 * 鎵归噺娣诲姞鐘舵��
+	 *
+	 * @param statusVOList 鐘舵�佹樉绀哄璞″垪琛�(鍜孌TO鍏辩敤)
+	 * @return 鎵归噺娣诲姞鍚庣殑鐘舵��
+	 * @throws VciBaseException 娣诲姞鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<StatusVO> batchAddSave(List<StatusVO> statusVOList) throws VciBaseException {
+		if(CollectionUtils.isEmpty(statusVOList)){
+			throw new VciBaseException("瑕佹坊鍔犵殑鐘舵�佸璞′笉鑳戒负绌�");
+		}
+		//1. 鍒ゆ柇鍚勪釜灞炴�ф槸鍚﹀繀杈撻」閮借緭鍏ヤ簡
+		//2. 鍒ゆ柇鑻辨枃鍚嶇О鏄惁閲嶅
+		Set<String> idSet = new HashSet<>();
+		String creator = AuthUtil.getUserAccount();
+		Date now = new Date();
+		String btmName = "status";
+		Pattern pattern = Pattern.compile(REGEXP);
+		statusVOList.forEach(s -> {
+			if (!pattern.matcher(s.getId()).matches()){
+				throw new VciBaseException("鑻辨枃鍚嶇О{0}鍙兘鏄嫳鏂囧瓧姣�",new Object[]{s.getId()});
+			}
+			VciBaseUtil.alertNotNull(s.getId(),"鐘舵�佽嫳鏂囧悕绉�",s.getName(),"鐘舵�佷腑鏂囧悕绉�");
+			if(idSet.contains(s.getId().toLowerCase().trim())){
+				throw new VciBaseException("鑻辨枃鍚嶇О涓簕0}鐨勭姸鎬佸凡缁忓瓨鍦紙涓嶅尯鍒嗗ぇ灏忓啓锛�",new Object[]{s.getId()});
+			}else{
+				idSet.add(s.getId().toLowerCase().trim());
+			}
+			if(StringUtils.isBlank(s.getOid())){
+				s.setOid(VciBaseUtil.getPk());
+			}
+			s.setBtmName(btmName);
+			s.setOwner(creator);
+			s.setCreator(creator);
+			s.setCreateTime(now);
+			s.setLastModifier(creator);
+			s.setLastModifyTime(now);
+			s.setTs(now);
+		});
+		//鍒ゆ柇鏄惁瀛樺湪
+		List<Status> checkExistStatusDOList = listStatusByIdCollectionDO(idSet);
+		if(!CollectionUtils.isEmpty(checkExistStatusDOList)){
+			String existIds = checkExistStatusDOList.stream().map(Status::getId).collect(Collectors.joining(","));
+			throw new VciBaseException("鑻辨枃鍚嶇О涓簕0}鐨勭姸鎬佺殑宸茬粡鍦ㄧ郴缁熶腑瀛樺湪锛堜笉鍖哄垎澶у皬鍐欙級锛屼笉鑳芥坊鍔�",new Object[]{existIds});
+		}
+		List<Status> statusDOList = StatusWrapper.build().batchCopyVO2DO(statusVOList);
+		VciBaseUtil.switchCollectionForOracleIn(statusDOList,1000).forEach(this::saveBatch);
+		return statusVOList;
+	}
+
+	/**
+	 * 淇敼鐘舵��
+	 *
+	 * @param statusVO 鐘舵�佹樉绀哄璞★紙鍜孌TO鍏辩敤锛�
+	 * @return 淇敼鍚庣殑鐘舵��
+	 * @throws VciBaseException 淇敼鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public StatusVO editSave(StatusVO statusVO) throws VciBaseException {
+		VciBaseUtil.alertNotNull(statusVO,"瑕佷慨鏀圭殑鐘舵�佸璞�",statusVO.getOid(),"瑕佷慨鏀圭殑鐘舵�佸璞$殑涓婚敭");
+		List<StatusVO> needEditVOList = new ArrayList<>();
+		needEditVOList.add(statusVO);
+		List<StatusVO> statusVOList = batchEditSave(needEditVOList);
+		if(!CollectionUtils.isEmpty(statusVOList)){
+			return statusVOList.get(0);
+		}
+		return null;
+	}
+
+	/**
+	 * 鎵归噺淇敼鐘舵��
+	 *
+	 * @param statusVOList 鐘舵�佹樉绀哄璞″垪琛紙鍜孌TO鍏辩敤锛�
+	 * @return 鎵归噺淇敼鍚庣殑鐘舵��
+	 * @throws VciBaseException 淇敼鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<StatusVO> batchEditSave(List<StatusVO> statusVOList) throws VciBaseException {
+		if(CollectionUtils.isEmpty(statusVOList)){
+			throw new VciBaseException("瑕佷慨鏀圭殑鐘舵�佸璞′笉鑳戒负绌�");
+		}
+		//1. 鍒ゆ柇鍚勪釜灞炴�ф槸鍚﹀繀杈撻」閮借緭鍏ヤ簡
+		//2. 鍒ゆ柇鐘舵�佺殑鑻辨枃鍚嶇О鏄惁閲嶅
+		Set<String> idSet = new HashSet<>();
+		Map<String,StatusVO> oidObjectMap = new HashMap<>();
+		String creator = AuthUtil.getUserAccount();
+		Date now = new Date();
+		statusVOList.forEach(s -> {
+			//鍒ゆ柇涓虹┖
+			VciBaseUtil.alertNotNull(s.getOid(),"鐘舵�佷富閿�",s.getId(),"鐘舵�佽嫳鏂囧悕绉�",s.getName(),"鐘舵�佷腑鏂囧悕绉�");
+			//鍒ゆ柇鏈鏄惁瀛樺湪
+			if(idSet.contains(s.getId().toLowerCase().trim())){
+				throw new VciBaseException("鑻辨枃鍚嶇О涓簕0}鐨勭姸鎬佸凡缁忓瓨鍦紙涓嶅尯鍒嗗ぇ灏忓啓锛�",new Object[]{s.getId()});
+			}else{
+				idSet.add(s.getId().toLowerCase().trim());
+			}
+			oidObjectMap.put(s.getOid(),s);
+			s.setLastModifier(creator);
+			s.setLastModifyTime(now);
+			s.setTs(now);
+		});
+		//鍒ゆ柇鏄惁瀛樺湪
+		List<Status> statusDOList = listStatusByOidCollectionDO(oidObjectMap.keySet());
+		if(CollectionUtils.isEmpty(statusDOList)){
+			throw new VciBaseException("杩欎簺鐘舵�佸湪绯荤粺涓潎涓嶅瓨鍦�",new Object[]{});
+		}
+		//鍒ゆ柇灞炴�у悕绉版槸鍚︿慨鏀�
+		Set<String> oidInDbSet = new HashSet<>();
+		statusDOList.forEach(s -> {
+			StatusVO statusVO =  oidObjectMap.get(s.getOid());
+			if(!statusVO.getId().equalsIgnoreCase(s.getId())){
+				throw new VciBaseException("鐘舵�乕{0}]鐨勮嫳鏂囧悕绉颁笉鍏佽淇敼锛屽師鍚嶇О{1},鏂板悕绉皗2}",new Object[]{s.getName(),s.getId(),statusVO.getId()});
+			}
+			BeanUtil.convert(statusVO,s);
+			oidInDbSet.add(s.getOid());
+		});
+		oidObjectMap.forEach( (k,v) ->{
+			if(!oidInDbSet.contains(k)){
+				throw new VciBaseException("鐘舵�亄0}[{1}]鍦ㄧ郴缁熶腑涓嶅瓨鍦�",new Object[]{v.getId(),v.getName()});
+			}
+		});
+		//鐪嬬湅鏄惁鏈変笉鍦ㄧ郴缁熶腑瀛樺湪鐨�
+		VciBaseUtil.switchCollectionForOracleIn(statusDOList).forEach(this::saveOrUpdateBatch);
+		return statusVOList;
+	}
+
+	/**
+	 * 鍒犻櫎鐘舵��
+	 *
+	 * @param statusVO 鐘舵�佹樉绀哄璞�
+	 * @throws VciBaseException 濡傛灉鐘舵�佽寮曠敤锛屾垨鑰呭垹闄ゅ嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public void delete(StatusVO statusVO) throws VciBaseException {
+		VciBaseUtil.alertNotNull(statusVO,"瑕佸垹闄ょ殑鐘舵�佸璞�",statusVO.getOid(),"瑕佸垹闄ょ殑鐘舵�佸璞$殑涓婚敭");
+		List<StatusVO> needDeleteVOList = new ArrayList<>();
+		needDeleteVOList.add(statusVO);
+		batchDelete(needDeleteVOList);
+	}
+
+	/**
+	 * 鎵归噺鍒犻櫎鐘舵��
+	 *
+	 * @param statusVOList 瑕佸垹闄ょ殑鐘舵�佹樉绀哄璞″垪琛�
+	 * @throws VciBaseException 濡傛灉鐘舵�佽寮曠敤锛屾垨鑰呭垹闄ゅ嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public void batchDelete(List<StatusVO> statusVOList) throws VciBaseException {
+		if(CollectionUtils.isEmpty(statusVOList)){
+			throw new VciBaseException("瑕佸垹闄ょ殑鐘舵�佸璞′笉鑳戒负绌�");
+		}
+		Set<String> oidSet= new HashSet<>();
+		statusVOList.stream().forEach( s -> {
+			VciBaseUtil.alertNotNull(s.getOid(),"瑕佸垹闄ょ殑鐘舵�佸璞$殑涓婚敭");
+			oidSet.add(s.getOid());
+		});
+		//鏌ヨ
+		List<Status> statusDOList = listStatusByOidCollectionDO(oidSet);
+		if(CollectionUtils.isEmpty(statusDOList)){
+			throw new VciBaseException("瑕佸垹闄ょ殑鐘舵�佸湪绯荤粺涓笉瀛樺湪,鍙兘鎮ㄩ渶瑕佸埛鏂板悗鍐嶈瘯");
+		}
+		Set<String> oidInDbSet = statusDOList.stream().map(Status::getOid).collect(Collectors.toSet());
+		oidSet.forEach( s -> {
+			if(!oidInDbSet.contains(s)){
+				throw new VciBaseException("瑕佸垹闄ょ殑鐘舵�佸湪绯荤粺涓笉瀛樺湪,鍙兘鎮ㄩ渶瑕佸埛鏂板悗鍐嶈瘯");
+			}
+		});
+		//妫�鏌ュ睘鎬ф槸鍚﹁寮曠敤
+		if(checkStatusUseds(oidSet)){
+			throw new VciBaseException("瑕佸垹闄ょ殑鐘舵�佸湪鐢熷懡鍛ㄦ湡瀵硅薄涓浣跨敤锛屾棤娉曞垹闄�");
+		}
+		Collection<Collection<String>> oidCollections = VciBaseUtil.switchCollectionForOracleIn(oidInDbSet);
+		for(Collection<String> oidCollection : oidCollections){
+			baseMapper.delete(Wrappers.<Status>query().lambda().in(Status::getOid,oidCollection));
+		}
+	}
+
+	/**
+	 * 鎵归噺鏍¢獙鐘舵�佹槸鍚﹁浣跨敤
+	 *
+	 * @param oidCollection 涓婚敭闆嗗悎
+	 * @return true琛ㄧず琚紩鐢�
+	 */
+	@Override
+	public boolean checkStatusUseds(Collection<String> oidCollection) {
+		return false;
+	}
+
+	/**
+	 * 鏍¢獙鐘舵�佹槸鍚﹁寮曠敤
+	 *
+	 * @param pkStatus 鐘舵�佺殑涓婚敭
+	 * @return true琛ㄧず琚紩鐢紝 false琛ㄧず娌℃湁琚紩鐢�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public boolean checkStatusUsed(String pkStatus) throws VciBaseException {
+		return false;
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/RevisionRuleWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/RevisionRuleWrapper.java
new file mode 100644
index 0000000..407f696
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/RevisionRuleWrapper.java
@@ -0,0 +1,46 @@
+package com.vci.ubcs.omd.wrapper;
+
+import com.vci.ubcs.omd.dto.RevisionRuleDTO;
+import com.vci.ubcs.omd.entity.RevisionRule;
+import com.vci.ubcs.omd.vo.RevisionRuleVO;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * Description: 鐗堟湰瑙勫垯鐨勫寘瑁呯被
+ *
+ * @author LiHang
+ * @date 2023/5/17
+ */
+public class RevisionRuleWrapper  extends BaseEntityWrapper<RevisionRule, RevisionRuleVO> {
+
+	public static RevisionRuleWrapper build() {
+		return new RevisionRuleWrapper();
+	}
+
+	@Override
+	public RevisionRuleVO entityVO(RevisionRule entity) {
+		Objects.requireNonNull(entity);
+		RevisionRuleVO vo = BeanUtil.copy(entity, RevisionRuleVO.class);
+		// 鍦ㄨ繖閲屽鐞嗘灇涓惧�肩浉鍏崇殑鏄犲皠
+		return vo;
+	}
+
+	public List<RevisionRuleVO> listEntityVO(List<RevisionRule> entityList){
+		return entityList.stream().map(this::entityVO).collect(Collectors.toList());
+	}
+
+	public List<RevisionRule> batchCopyDTO2DO(List<RevisionRuleDTO> revisionRuleVOList) {
+		return revisionRuleVOList.stream().map(this::copyDTO2DO).collect(Collectors.toList());
+	}
+
+	public RevisionRule copyDTO2DO(RevisionRuleDTO vo){
+		Objects.requireNonNull(vo);
+		RevisionRule rule = BeanUtil.copy(vo, RevisionRule.class);
+		return rule;
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/StatusWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/StatusWrapper.java
new file mode 100644
index 0000000..0377794
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/StatusWrapper.java
@@ -0,0 +1,46 @@
+package com.vci.ubcs.omd.wrapper;
+
+import com.vci.ubcs.omd.entity.Status;
+import com.vci.ubcs.omd.vo.StatusVO;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * Description:鐘舵�佹睜鐨勫寘瑁呯被
+ *
+ * @author LiHang
+ * @date 2023/5/23
+ */
+public class StatusWrapper extends BaseEntityWrapper<Status, StatusVO> {
+
+	public static StatusWrapper build() {
+		return new StatusWrapper();
+	}
+
+	@Override
+	public StatusVO entityVO(Status entity) {
+		StatusVO vo = BeanUtil.copy(entity, StatusVO.class);
+		//杩欓噷澶勭悊鏋氫妇鐩稿叧鐨�
+		return vo;
+	}
+
+	public List<StatusVO> listEntityVO(List<Status> statusList){
+		return Optional.ofNullable(statusList).orElseGet(ArrayList::new).stream().map(this::entityVO).collect(Collectors.toList());
+	}
+
+	public List<Status> batchCopyVO2DO(List<StatusVO> statusVOList) {
+		return Optional.ofNullable(statusVOList).orElseGet(ArrayList::new).stream().map(this::copyVO2DO).collect(Collectors.toList());
+	}
+
+	private Status copyVO2DO(StatusVO statusVO) {
+		Status status = BeanUtil.copy(statusVO, Status.class);
+		return status;
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/RevisionRuleMapper.xml b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/RevisionRuleMapper.xml
new file mode 100644
index 0000000..e129aa4
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/RevisionRuleMapper.xml
@@ -0,0 +1,32 @@
+<?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.omd.mapper.RevisionRuleMapper">
+    <resultMap id="BaseResultMap" type="com.vci.ubcs.omd.entity.RevisionRule">
+        <id column="oid" jdbcType="VARCHAR" property="oid" />
+        <result column="id" jdbcType="VARCHAR" property="id" />
+        <result column="name" jdbcType="VARCHAR" property="name" />
+        <result column="description" jdbcType="VARCHAR" property="description" />
+        <result column="skip_code" jdbcType="VARCHAR" property="skipCode" />
+        <result column="start_code" jdbcType="VARCHAR" property="startCode" />
+        <result column="serial_step" jdbcType="DECIMAL" property="serialStep" />
+        <result column="prefix_code" jdbcType="VARCHAR" property="prefixCode" />
+        <result column="suffix_code" jdbcType="VARCHAR" property="suffixCode" />
+        <result column="btm_name" property="btmName" jdbcType="VARCHAR" />
+        <result column="owner" property="owner" jdbcType="VARCHAR" />
+        <result column="creator" jdbcType="VARCHAR" property="creator" />
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+        <result column="last_modifier" jdbcType="VARCHAR" property="lastModifier" />
+        <result column="last_modify_time" jdbcType="TIMESTAMP" property="lastModifyTime" />
+        <result column="ts" jdbcType="TIMESTAMP" property="ts" />
+    </resultMap>
+
+    <sql id="base_query_column">
+        oid, id, name, description, skip_code, start_code, serial_step, prefix_code, suffix_code,
+        btm_name, owner, creator, create_time, last_modifier, last_modify_time, ts
+    </sql>
+
+    <sql id="tableName">
+        pl_omd_revision_rule
+    </sql>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/StatusMapper.xml b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/StatusMapper.xml
new file mode 100644
index 0000000..ab1a809
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/StatusMapper.xml
@@ -0,0 +1,26 @@
+<?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.omd.mapper.StatusMapper">
+    <resultMap id="BaseResultMap" type="com.vci.ubcs.omd.entity.Status">
+        <id column="oid" jdbcType="VARCHAR" property="oid" />
+        <result column="id" jdbcType="VARCHAR" property="id" />
+        <result column="name" jdbcType="VARCHAR" property="name" />
+        <result column="description" jdbcType="VARCHAR" property="description" />
+        <result column="btm_name" property="btmname" jdbcType="VARCHAR" />
+        <result column="owner" property="owner" jdbcType="VARCHAR" />
+        <result column="creator" jdbcType="VARCHAR" property="creator" />
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+        <result column="last_modifier" jdbcType="VARCHAR" property="lastModifier" />
+        <result column="last_modify_time" jdbcType="TIMESTAMP" property="lastModifyTime" />
+        <result column="ts" jdbcType="TIMESTAMP" property="ts" />
+    </resultMap>
+
+    <sql id="base_query_column">
+        oid, id, name, description, btm_name, owner, creator, create_time, last_modifier, last_modify_time,ts
+    </sql>
+
+    <sql id="tableName">
+        pl_omd_status
+    </sql>
+
+</mapper>

--
Gitblit v1.9.3