lihang
2023-07-12 ea44fca5c2b4e0101a43bea607ce1de1bdc6e173
业务类型相关的修正,主要兼容达梦。
已修改18个文件
1119 ■■■■ 文件已修改
Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue 1050 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/VciSpringUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlDmMapperProcessor.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMsMapperProcessor.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMySqlMapperProcessor.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlOracleMapperProcessor.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllDmMapperProcessor.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMsMapperProcessor.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMySqlMapperProcessor.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllOracleMapperProcessor.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllSqlLiteMapperProcessor.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/BtmTypeAttributeMapper.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue
@@ -1,555 +1,575 @@
<template>
    <el-dialog
  <el-dialog
    title="业务类型"
    :visible.sync="showSubmitDialog"
    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"
             :rules="rules" @resetFields="resetForm" status-icon="true">
      <el-form-item label="英文名称" label-width="100px" required="true" prop="id">
        <el-input v-model="btmType.id" :prefix-icon="icons.key"></el-input>
      </el-form-item>
      <el-form-item label="中文名称" label-width="100px">
        <el-input v-model="btmType.name" :prefix-icon="icons.name"></el-input>
      </el-form-item>
      <el-form-item label="数据库表名" label-width="100px">
        <el-input v-model="btmType.tableName" :prefix-icon="icons.tableName"></el-input>
      </el-form-item>
      <el-form-item label="所属领域" label-width="100px" prop="domain" class="domainSelect">
        <el-select v-model="btmType.bizDomain" :prefix-icon="icons.domain">
          <el-option v-for="item in domainOption"
                     :label="item.label" :value="item.value" :key="item.value">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="版本规则" label-width="100px">
        <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>
      <el-form-item label="生命周期" label-width="100px">
        <el-input v-model="btmType.lifeCycleId" :prefix-icon="icons.lifeCycle">
          <i slot="suffix" class="el-input__icon el-icon-search"></i>
        </el-input>
      </el-form-item>
      <div>
        <el-form-item label="开启视图" label-width="100px" class="viewFlag">
          <el-switch v-model="btmType.viewFlag" active-color="#13ce66" @change="viewChange"></el-switch>
        </el-form-item>
        <el-form-item label="视图语句" label-width="100px" class="viewInput">
          <el-input v-model="btmType.view" :prefix-icon="icons.view" :disabled="!btmType.viewFlag"></el-input>
        </el-form-item>
      </div>
      <el-form-item label="描述" label-width="100px" class="description">
        <el-input v-model="btmType.description"
                  :prefix-icon="icons.desc"
                  class="descClass"
                  id="descId"
        ></el-input>
      </el-form-item>
    </el-form>
    <avue-crud :option="option"
               :data="btmType.attributes"
               :page.sync="page"
               ref="attrTable">
      <template slot-scope="scope" slot="menuLeft">
        <el-button type="danger"
                   icon="el-icon-plus"
                   size="small"
                   @click="rowAdd()">属性选择
        </el-button>
      </template>
      <template slot="attrDataTypeText" slot-scope="{row}">
        <el-tag>{{ row.attrDataTypeText }}</el-tag>
      </template>
      <template slot="menu" slot-scope="{row,index}">
        <el-button icon="el-icon-edit" size="small" type="text" v-if="!row.$cellEdit" @click="cellEditClick(row)">编辑
        </el-button>
        <el-button icon="el-icon-delete" size="small" type="text" v-if="!row.$cellEdit"
                   @click="removeFormAttrTable(row,index)">移除
        </el-button>
        <el-button icon="el-icon-check" size="small" type="text" v-if="row.$cellEdit" @click="cellEditSave(row,index)">
          保存
        </el-button>
      </template>
    </avue-crud>
    <div slot="footer" class="dialog-footer">
      <el-button type="primary" @click="submitBtmType">确定</el-button>
      <el-button @click="cancleSubmitBtmType">取消</el-button>
    </div>
    <!-- 属性池的选择 -->
    <el-dialog title="属性池"
               :visible="attrRef.visible"
               append-to-body
               @close="closeAttrDialog"
               width="80%"
    >
        <el-form ref="form" :model="btmType" show-message="true" inline size="medium" label-suffix=":" class="btmTypeForm" :rules="rules" @resetFields="resetForm" status-icon="true">
            <el-form-item label="英文名称" label-width="100px" required="true" prop="id">
                <el-input v-model="btmType.id" :prefix-icon="icons.key"></el-input>
            </el-form-item>
            <el-form-item label="中文名称" label-width="100px">
                <el-input v-model="btmType.name" :prefix-icon="icons.name"></el-input>
            </el-form-item>
            <el-form-item label="数据库表名" label-width="100px">
                <el-input v-model="btmType.tableName" :prefix-icon="icons.tableName"></el-input>
            </el-form-item>
            <el-form-item label="所属领域" label-width="100px" prop="domain">
                <el-select v-model="btmType.domain" :prefix-icon="icons.domain">
                    <el-option v-for="item in domainOption"
                    :label="item.label" :value="item.value" :key="item.value"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="版本规则" label-width="100px">
                <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>
            <el-form-item label="生命周期" label-width="100px">
                <el-input v-model="btmType.lifeCycleId" :prefix-icon="icons.lifeCycle">
                    <i slot="suffix" class="el-input__icon el-icon-search"></i>
                </el-input>
            </el-form-item>
            <div>
            <el-form-item label="开启视图" label-width="100px" class="viewFlag">
                <el-switch v-model="btmType.viewFlag" active-color="#13ce66" @change="viewChange"></el-switch>
            </el-form-item>
            <el-form-item label="视图语句" label-width="100px">
                <el-input v-model="btmType.view" :prefix-icon="icons.view" :disabled="!btmType.viewFlag"></el-input>
            </el-form-item>
        </div>
            <el-form-item label="描述" label-width="100px" class="description">
                <el-input v-model="btmType.description"
                :prefix-icon="icons.desc"
                class="descClass"
                id="descId"
                ></el-input>
            </el-form-item>
        </el-form>
        <avue-crud :option="option"
        :data="btmType.attributes"
        :page.sync="page"
        ref="attrTable">
            <template slot-scope="scope" slot="menuLeft">
                <el-button type="danger"
                icon="el-icon-plus"
                size="small"
                @click="rowAdd()">属性选择</el-button>
            </template>
          <template slot="menu" slot-scope="{row,index}">
            <el-button icon="el-icon-edit" size="small" type="text" v-if="!row.$cellEdit" @click="cellEditClick(row)">编辑</el-button>
            <el-button icon="el-icon-delete" size="small" type="text" v-if="!row.$cellEdit" @click="removeFormAttrTable(row,index)">移除</el-button>
            <el-button icon="el-icon-check" size="small" type="text" v-if="row.$cellEdit" @click="cellEditSave(row,index)">保存</el-button>
          </template>
        </avue-crud>
        <div slot="footer" class="dialog-footer">
            <el-button type="primary" @click="submitBtmType">确定</el-button>
            <el-button @click="cancleSubmitBtmType">取消</el-button>
        </div>
<!-- 属性池的选择 -->
        <el-dialog title="属性池"
            :visible="attrRef.visible"
            append-to-body
            @close="closeAttrDialog"
            width="80%"
        >
            <avue-crud class="attrRef"
            :option="attrRef.option"
            :data="attrRef.data"
            :page.sync="attrRef.page"
            ref="attrRef"
            @on-load="attrRefOnLoad"
            @search-change="attrRefSearch"
            @selection-change="selectionChange"
            v-loading="attrRef.loading">
                <template slot="typeValue" slot-scope="scope" >
                    <el-tag>{{scope.row.typeValue}}</el-tag>
                </template>
            </avue-crud>
            <div slot="footer" class="dialog-footer">
                <el-button @click="confirmSelectAttr">确定</el-button>
                <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>
      <avue-crud class="attrRef"
                 :option="attrRef.option"
                 :data="attrRef.data"
                 :page.sync="attrRef.page"
                 ref="attrRef"
                 @on-load="attrRefOnLoad"
                 @search-change="attrRefSearch"
                 @selection-change="selectionChange"
                 v-loading="attrRef.loading">
        <template slot="typeValue" slot-scope="scope">
          <el-tag>{{ scope.row.typeValue }}</el-tag>
        </template>
      </avue-crud>
      <div slot="footer" class="dialog-footer">
        <el-button @click="confirmSelectAttr">确定</el-button>
        <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>
<script>
import { add,update } from '@/api/omd/btmType';
import { queryPage } from '@/api/omd/OmdAttribute';
import { getPage } from '@/api/omd/revisionRule';
import {add, update} from '@/api/omd/btmType';
import {queryPage} from '@/api/omd/OmdAttribute';
import {getPage} from '@/api/omd/revisionRule';
export default {
    name: 'BusinessAdd',
    props: {
        btmType:{
            type: Object
        },
        domainOption:{
            type: Array
        },
        icons: {
            type: Array
        }
  name: 'BusinessAdd',
  props: {
    btmType: {
      type: Object
    },
  watch:{
    btmType:{
      handler(newval,oldval){
        console.log('监听',newval,oldval)
      },
      deep:true,
      immediate:true
    domainOption: {
      type: Array
    },
    icons: {
      type: Array
    }
  },
    data() {
        return {
            form: {},
            showSubmitDialog : false,
            option: {
                height: "330px",
                selection: false,
                headerAlign: 'center',
                border: true,
                index: true,
                rowKey: 'id',
                tabs: true,
                menu: true,
                editBtn: false,
                delBtn: false,
                menuWidth: 150,
                addBtn:false,
                highlightCurrentRow: true,
                column: [
                    {
                        label: '英文名称',
                        prop: 'id',
                        align: 'center'
                    }, {
                        label: '中文名称',
                        prop: 'name',
                        align: 'center',
                        cell: true
                    },
                    {
                        label: "类型",
                        prop: "attrDataType",
                        align: 'center',
                        slot: true
                    },
                    {
                        label: "默认值",
                        prop: "defaultValue",
                        align: 'center',
                        cell: true
                    },
                    {
                        label: "说明",
                        prop: "description",
                        align: 'center',
                        cell:true
                    }
                ]
            },
            attrRef:{
                visible:false,
                page: {
                    currentPage:1,
                    pageSize:10,
                },
                loading: false,
                key: null,
                option:{
                    height: 360,
                    addBtn: false,
                    refreshBtn: false,
                    columnBtn: false,
                    selection: true,
                    menu: false,
                    border: true,
                    reserveSelection: true,
                    searchMenuSpan:8,
                    highlightCurrentRow: true,
                    rowKey: 'id',
                    column: [
                        {
                        label: '英文名称',
                        prop: 'id',
                        align: 'left',
                        search: true,
                        width: 230
                    }, {
                        label: '中文名称',
                        prop: 'name',
                        align: 'center',
                    },
                    {
                        label: "类型",
                        prop: "typeValue",
                        align: 'center',
                        slot: true,
                    },
                    {
                        label: "默认值",
                        prop: "defaultValue",
                        align: 'center'
                    },
                    {
                        label: '允许为空',
                        prop: 'nullable',
                        type: 'switch',
                        display: false,
                        hide: true,
                        labelWidth: 132,
                        dicData: [{
                        label: '否',
                        value: 1
                        }, {
                        label: '是',
                        value: 0
                        }]
                    },
                    {
                        label: "说明",
                        prop: "description",
                        cell:true,
                        align: 'center'
                    }
                    ]
                },
                data: [],
                queryNotIn: ''
            },
            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"
                        }
                    ]
                },
            },
            rules: {
                id: [
                    { required: true, message: '请输入业务类型编号', trigger: 'blur' },
                    { pattern: /^[A-Za-z]+$/, message: '业务类型编号只能为英文', trigger: 'blur' },
                    { min: 2, max: 20, message: '长度在2到20个字符', trigger: 'blur' }
                ],
                domain: [
                    { required: true, message: '请选择所属领域', trigger: 'blur' }
                ]
            },
        }
    },
    created() {
    },
    methods: {
        // 关闭组件弹窗
        closeSubmitDialog(){
            this.showSubmitDialog = false;
            this.btmType.attributes = [];
            this.btmType = {};
            this.attrRef.selectData = [];
            this.attrRef.queryNotIn = null;
            this.resetForm();
        },
        // 关闭属性池查询弹窗
        closeAttrDialog(){
            this.attrRef.visible = false;
        },
        // 属性选择添加
        async rowAdd() {
            await this.attrRefOnLoad();
            this.attrRef.visible = true;
        },
        // 属性池加载
        attrRefOnLoad(){
            if (this.attrRef.queryNotIn != ''){
              this.attrRef.queryNotIn = '';
               this.btmType.attributes.forEach(item => {
                  this.attrRef.queryNotIn += (item.id + ",")
               })
            }
            this.attrRef.loading = true;
            queryPage(this.attrRef.key,this.attrRef.queryNotIn,this.attrRef.page.currentPage, this.attrRef.page.pageSize).then(res => {
                const data = res.data.data;
                this.attrRef.page.total = data.total;
                this.attrRef.data = data.records;
            });
            setTimeout(() => {
              this.attrRef.loading = false;
            },600)
            this.$nextTick(() => {
                this.$refs.attrRef.refreshTable();
            });
        },
        // 属性池检索
        attrRefSearch(form,done){
            this.attrRef.key = form.id;
            this.attrRefOnLoad();
            done();
            this.attrRef.key = null;
        },
        // 从属性池中移除
        removeFormAttrTable(row,index){
          this.btmType.attributes.splice(index,1);
          this.attrRef.queryNotIn = "";
          this.btmType.attributes.forEach(item => {
            this.attrRef.queryNotIn += (item.id + ",")
          })
        },
        // 属性池勾选事件
        selectionChange(list){
            this.attrRef.selectData = list;
        },
        // 确认属性池勾选
        confirmSelectAttr(){
            if(!this.btmType.attributes) {
              this.btmType.attributes = [];
            }
            this.attrRef.selectData.forEach(item => {
                this.btmType.attributes.push({
                    id: item.id,
                    name: item.name,
                    typeValue: item.typeValue,
                    typeKey: item.typeValue,
                    attrDataType : item.typeKey,
                    defaultValue: item.defaultValue,
                    description: item.description,
                    attributeLength: item.maxLength,
                    referBtmTypeId: item.referTypeCode,
                    referBtmTypeName: item.referToName,
                    enumId: item.dictCode,
                    // enumName: item,
                });
                this.attrRef.queryNotIn += (item.id + ",")
            });
            this.attrRef.data = [];
            this.closeAttrDialog();
        },
        // 取消属性池勾选
        cancleSelectAttr(){
            this.attrRef.selectData = [];
            this.closeAttrDialog();
        },
        // 添加业务类型
        submitBtmType(){
            console.log(this.btmType);
            add(this.btmType,true).then(res => {
                // 添加完成,回调父组件的刷新
                this.$message.success('保存成功');
                this.cancleSubmitBtmType();
                this.$emit('refreshTable');
            })
        },
        // 取消添加业务类型
        cancleSubmitBtmType(){
            this.btmType = {};
            this.btmType.attributes = [];
            this.showSubmitDialog = false;
        },
        // 刷新属性列表
        refreshAttrTable(){
            this.$nextTick( () => {
                this.$refs.attrTable.refreshTable();
            })
        },
        //
        viewChange(){
        },
        // 列表编辑
        cellEditClick(cell){
          console.log(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');
       },
       resetForm(){
        this.btmType = {};
        this.$refs.form.resetFields();
       }
  watch: {
    btmType: {
      handler(newval, oldval) {
        console.log('监听', newval, oldval)
      },
      deep: true,
      immediate: true
    }
  },
  data() {
    return {
      form: {},
      showSubmitDialog: false,
      option: {
        height: "330px",
        selection: false,
        headerAlign: 'center',
        border: true,
        index: true,
        rowKey: 'id',
        tabs: true,
        menu: true,
        editBtn: false,
        delBtn: false,
        columnBtn: false,
        menuWidth: 150,
        addBtn: false,
        highlightCurrentRow: true,
        column: [
          {
            label: '英文名称',
            prop: 'id',
            align: 'center'
          }, {
            label: '中文名称',
            prop: 'name',
            align: 'center',
            cell: true
          },{
            label: "类型",
            prop: "attrDataTypeText",
            align: 'center',
            slot: true
          },
          {
            label: "默认值",
            prop: "defaultValue",
            align: 'center',
            cell: true
          },
          {
            label: "说明",
            prop: "description",
            align: 'center',
            cell: true
          }
        ]
      },
      attrRef: {
        visible: false,
        page: {
          currentPage: 1,
          pageSize: 10,
        },
        loading: false,
        key: null,
        option: {
          height: 360,
          addBtn: false,
          refreshBtn: false,
          columnBtn: false,
          selection: true,
          menu: false,
          border: true,
          reserveSelection: true,
          searchMenuSpan: 8,
          highlightCurrentRow: true,
          rowKey: 'id',
          column: [
            {
              label: '英文名称',
              prop: 'id',
              align: 'left',
              search: true,
              width: 230
            }, {
              label: '中文名称',
              prop: 'name',
              align: 'center',
            },
            {
              label: "类型",
              prop: "typeValue",
              align: 'center',
              slot: true,
            },
            {
              label: "默认值",
              prop: "defaultValue",
              align: 'center'
            },
            {
              label: '允许为空',
              prop: 'nullable',
              type: 'switch',
              display: false,
              hide: true,
              labelWidth: 132,
              dicData: [{
                label: '否',
                value: 1
              }, {
                label: '是',
                value: 0
              }]
            },
            {
              label: "说明",
              prop: "description",
              cell: true,
              align: 'center'
            }
          ]
        },
        data: [],
        queryNotIn: ''
      },
      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"
            }
          ]
        },
      },
      rules: {
        id: [
          {required: true, message: '请输入业务类型编号', trigger: 'blur'},
          {pattern: /^[A-Za-z]+$/, message: '业务类型编号只能为英文', trigger: 'blur'},
          {min: 2, max: 20, message: '长度在2到20个字符', trigger: 'blur'}
        ],
        domain: [
          {required: true, message: '请选择所属领域', trigger: 'blur'}
        ]
      },
    }
  },
  created() {
  },
  methods: {
    // 关闭组件弹窗
    closeSubmitDialog() {
      this.showSubmitDialog = false;
      this.btmType.attributes = [];
      this.btmType = {};
      this.attrRef.selectData = [];
      this.attrRef.queryNotIn = null;
      this.resetForm();
    },
    // 关闭属性池查询弹窗
    closeAttrDialog() {
      this.attrRef.visible = false;
    },
    // 属性选择添加
    async rowAdd() {
      await this.attrRefOnLoad();
      this.attrRef.visible = true;
    },
    // 属性池加载
    attrRefOnLoad() {
      if (this.attrRef.queryNotIn != '' && this.btmType.attributes !== undefined && this.btmType.attributes.length > 0) {
        this.attrRef.queryNotIn = '';
        this.btmType.attributes.forEach(item => {
          this.attrRef.queryNotIn += (item.id + ",")
        })
      }
      this.attrRef.loading = true;
      queryPage(this.attrRef.key, this.attrRef.queryNotIn, this.attrRef.page.currentPage, this.attrRef.page.pageSize).then(res => {
        const data = res.data.data;
        this.attrRef.page.total = data.total;
        this.attrRef.data = data.records;
      });
      setTimeout(() => {
        this.attrRef.loading = false;
      }, 600)
      this.$nextTick(() => {
        this.$refs.attrRef.refreshTable();
      });
    },
    // 属性池检索
    attrRefSearch(form, done) {
      this.attrRef.key = form.id;
      this.attrRefOnLoad();
      done();
      this.attrRef.key = null;
    },
    // 从属性池中移除
    removeFormAttrTable(row, index) {
      this.btmType.attributes.splice(index, 1);
      this.attrRef.queryNotIn = "";
      this.btmType.attributes.forEach(item => {
        this.attrRef.queryNotIn += (item.id + ",")
      })
    },
    // 属性池勾选事件
    selectionChange(list) {
      this.attrRef.selectData = list;
    },
    // 确认属性池勾选
    confirmSelectAttr() {
      if (!this.btmType.attributes) {
        this.btmType.attributes = [];
      }
      console.log(this.attrRef.selectData);
      this.attrRef.selectData.forEach(item => {
        this.btmType.attributes.push({
          id: item.id,
          name: item.name,
          attrDataType: item.typeKey,
          attrDataTypeText: item.typeValue,
          defaultValue: item.defaultValue,
          description: item.description,
          attributeLength: item.maxLength,
          referBtmTypeId: item.referTypeCode,
          referBtmTypeName: item.referToName,
          enumId: item.dictCode,
        });
        this.attrRef.queryNotIn += (item.id + ",")
      });
      this.attrRef.data = [];
      this.closeAttrDialog();
    },
    // 取消属性池勾选
    cancleSelectAttr() {
      this.attrRef.selectData = [];
      this.closeAttrDialog();
    },
    // 添加业务类型
    submitBtmType() {
      console.log(this.btmType);
      add(this.btmType, true).then(res => {
        // 添加完成,回调父组件的刷新
        this.$message.success('保存成功');
        this.cancleSubmitBtmType();
        this.$emit('refreshTable');
      })
    },
    // 取消添加业务类型
    cancleSubmitBtmType() {
      this.btmType = {};
      this.btmType.attributes = [];
      this.showSubmitDialog = false;
    },
    // 刷新属性列表
    refreshAttrTable() {
      this.$nextTick(() => {
        this.$refs.attrTable.refreshTable();
      })
    },
    //
    viewChange() {
    },
    // 列表编辑
    cellEditClick(cell) {
      console.log(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');
    },
    resetForm() {
      this.btmType = {};
      this.$refs.form.resetFields();
    }
  }
}
</script>
<style>
/* 属性池参照列表 */
.attrRef > .el-card:nth-of-type(2) > .el-card__body > .avue-crud__menu{
    display: none !important;
.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;
.revisionRef > .el-card:nth-of-type(2) > .el-card__body > .avue-crud__menu {
  display: none !important;
}
.btmTypeForm > .el-form-item > .el-form-item__content > .el-input > .el-input__inner {
    width: 200px;
  width: 200px;
}
.domainSelect > .el-form-item__content > .el-select > .el-input > .el-input__inner {
  width: 200px;
}
.viewFlag {
    width: 305px;
  width: 305px;
}
.viewInput > .el-form-item__content > .el-input > .el-input__inner {
  width: 200px;
}
.descClass > .el-input__inner {
    width: 57vw
  width: 57vw
}
#descId {
    width: 57vw;
  width: 57vw;
}
</style>
Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java
@@ -59,16 +59,19 @@
    @Override
    public String toString() {
        StringBuilder stringBuilder = new StringBuilder().append(dataType);
        if (dataLength != null && dataPrecision != null){
            stringBuilder.append(StringPool.SPACE).append(StringPool.LEFT_BRACKET).append(dataLength).append(StringPool.COMMA).append(dataPrecision).append(StringPool.RIGHT_BRACKET).append(StringPool.SPACE);
        }else if (dataLength != null) {
            stringBuilder.append(StringPool.SPACE).append(StringPool.LEFT_BRACKET).append(dataLength).append(StringPool.RIGHT_BRACKET).append(StringPool.SPACE);
        if (dataLength != null){
            stringBuilder.append(StringPool.SPACE).append(StringPool.LEFT_BRACKET).append(dataLength);
            if (dataPrecision != null){
                stringBuilder.append(StringPool.COMMA).append(dataPrecision).append(StringPool.RIGHT_BRACKET).append(StringPool.SPACE);
            }else {
                stringBuilder.append(StringPool.RIGHT_BRACKET).append(StringPool.SPACE);
            }
        }
        if (!nullable){
            stringBuilder.append(StringPool.SPACE).append("not null").append(StringPool.SPACE);
        }
        if (StringUtil.isNotBlank(defaultValue)){
            stringBuilder.append(StringPool.SPACE).append("default").append(StringPool.SPACE).append(defaultValue).append(StringPool.SPACE);
            stringBuilder.append(StringPool.SPACE).append("default").append(StringPool.SPACE).append(StringPool.SINGLE_QUOTE).append(defaultValue).append(StringPool.SINGLE_QUOTE).append(StringPool.SPACE);
        }
        return stringBuilder.toString();
    }
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeDTO.java
@@ -147,5 +147,5 @@
    /**
     * 业务类型所属领域
     */
    private String domain;
    private String bizDomain;
}
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/VciSpringUtil.java
@@ -12,7 +12,7 @@
 * @author LiHang
 * @date 2023/4/26
 */
@Component
@Component("vciSpringUtil")
public class VciSpringUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext;
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlDmMapperProcessor.java
@@ -3,12 +3,14 @@
import com.vci.ubcs.ddl.mapper.DdlDmMapper;
import com.vci.ubcs.ddl.mapper.DdlMapper;
import com.vci.ubcs.starter.util.VciSpringUtil;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
/**
 * 达梦数据库执行表操作sql的处理器
 */
@Component
@DependsOn("vciSpringUtil")
public class DdlDmMapperProcessor extends DdlMapperProcessor{
    private static final DdlMapper MAPPER = VciSpringUtil.getBean(DdlDmMapper.class);
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java
@@ -9,6 +9,7 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@@ -21,6 +22,7 @@
 * @date 2023/4/24
 */
@Component
@DependsOn("vciSpringUtil")
public class DdlMapperProcessStrategy {
    @Value("${spring.datasource.driver-class-name}")
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMsMapperProcessor.java
@@ -5,6 +5,7 @@
import com.vci.ubcs.ddl.mapper.DdlMapper;
import com.vci.ubcs.starter.util.VciSpringUtil;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
@@ -20,6 +21,7 @@
 * @date 2023/4/24
 */
@Component
@DependsOn("vciSpringUtil")
public class DdlMsMapperProcessor extends DdlMapperProcessor{
    private static DdlMapper mapper = VciSpringUtil.getBean(DdlMSMapper.class);
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMySqlMapperProcessor.java
@@ -5,6 +5,7 @@
import com.vci.ubcs.ddl.mapper.DdlMySqlMapper;
import com.vci.ubcs.starter.util.VciSpringUtil;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.util.CollectionUtils;
@@ -20,6 +21,7 @@
 * @date 2023/4/24
 */
@Component
@DependsOn("vciSpringUtil")
public class DdlMySqlMapperProcessor extends DdlMapperProcessor{
    private static DdlMapper mapper = VciSpringUtil.getBean(DdlMySqlMapper.class);
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlOracleMapperProcessor.java
@@ -5,6 +5,7 @@
import com.vci.ubcs.starter.util.VciSpringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@@ -17,6 +18,7 @@
 * @date 2023/4/24
 */
@Component
@DependsOn("vciSpringUtil")
public class DdlOracleMapperProcessor extends DdlMapperProcessor{
    private static DdlMapper mapper = VciSpringUtil.getBean(DdlOracleMapper.class);
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllDmMapperProcessor.java
@@ -9,10 +9,12 @@
import org.apache.commons.collections4.BidiMap;
import org.springblade.core.tool.utils.StringPool;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Locale;
import java.util.Optional;
/**
 * Description: 应用于达梦数据,生成创建表操作sql的处理器
@@ -21,6 +23,7 @@
 * @date 2023/4/24
 */
@Component
@DependsOn("vciSpringUtil")
public class DllDmMapperProcessor extends DllMapperProcessor {
    private static final DllMapper MAPPER = VciSpringUtil.getBean(DllDmMapper.class);
@@ -29,8 +32,8 @@
    static {
        // 需要重新映射的字段类型在这里写
        FIELD_MAP.put(VciFieldTypeEnum.VTDouble, new DdlFieldMappingAttrBO("DOUBLE", 26, 8, true, null));
        FIELD_MAP.put(VciFieldTypeEnum.VTInteger, new DdlFieldMappingAttrBO("INTEGER", 10, null, true, null));
        FIELD_MAP.put(VciFieldTypeEnum.VTDouble, new DdlFieldMappingAttrBO("DOUBLE", 53, null, true, null));
        FIELD_MAP.put(VciFieldTypeEnum.VTInteger, new DdlFieldMappingAttrBO("INTEGER", null, null, true, null));
        FIELD_MAP.put(VciFieldTypeEnum.VTLong, new DdlFieldMappingAttrBO("NUMBER", 38, null, true, null));
        FIELD_MAP.put(VciFieldTypeEnum.VTBoolean, new DdlFieldMappingAttrBO("VARCHAR", 5, null, true, null));
        FIELD_MAP.put(VciFieldTypeEnum.VTDate, new DdlFieldMappingAttrBO("DATE", null, null, true, null));
@@ -64,17 +67,13 @@
    @Override
    public String getColumnTypeSql(VciFieldTypeEnum fieldType, BtmTypeAttributeVO attributeVO) {
        DdlFieldMappingAttrBO mappingBO = getMappingBO(fieldType);
        if (fieldType.equals(VciFieldTypeEnum.VTDouble)) {
            mappingBO.setDataPrecision(attributeVO.getPrecisionLength() == -1 ? 8 : attributeVO.getPrecisionLength());
        }
        //先只针对数字类型的进行处理
        if (fieldType.equals(VciFieldTypeEnum.VTInteger) ){
            mappingBO.setDataLength(null);
        } else if (fieldType.equals(VciFieldTypeEnum.VTDouble) || fieldType.equals(VciFieldTypeEnum.VTLong)) {
            if (attributeVO.getAttributeLength() <= mappingBO.getDataLength()) {
        if (mappingBO.getDataLength() != null) {
            //mappingBO用来做最后的校验,如果定义的BO没有字段长度,则说明这个类型生成的sql不应该指定长度。如果指定了长度,说明是字段长度的最大值,VARCHAR、CLOB除外
            if (!(fieldType.equals(VciFieldTypeEnum.VTClob) || fieldType.equals(VciFieldTypeEnum.VTString))
                && attributeVO.getAttributeLength() > mappingBO.getDataLength()) {
                mappingBO.setDataLength(attributeVO.getAttributeLength());
            }
        }else {
        } else {
            mappingBO.setDataLength(attributeVO.getAttributeLength());
        }
        mappingBO.setNullable(attributeVO.isNullableFlag());
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java
@@ -9,6 +9,7 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@@ -22,6 +23,7 @@
 * @date 2023/4/24
 */
@Component
@DependsOn("vciSpringUtil")
public class DllMapperProcessorStrategy {
    @Value("${spring.datasource.driver-class-name}")
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMsMapperProcessor.java
@@ -11,6 +11,7 @@
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import org.apache.commons.collections4.BidiMap;
import org.springblade.core.tool.utils.StringPool;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@@ -23,6 +24,7 @@
 * @date 2023/4/24
 */
@Component
@DependsOn("vciSpringUtil")
public class DllMsMapperProcessor extends DllMapperProcessor {
    private static DllMapper mapper = VciSpringUtil.getBean(DllMsMapper.class);
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMySqlMapperProcessor.java
@@ -7,6 +7,7 @@
import com.vci.ubcs.starter.util.VciSpringUtil;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import org.apache.commons.collections4.BidiMap;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import java.util.List;
@@ -18,6 +19,7 @@
 * @date 2023/4/24
 */
@Component
@DependsOn("vciSpringUtil")
public class DllMySqlMapperProcessor extends DllMapperProcessor {
    private static final DllMapper MAPPER = VciSpringUtil.getBean(DllMySqlMapper.class);
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllOracleMapperProcessor.java
@@ -6,6 +6,7 @@
import com.vci.ubcs.starter.util.VciSpringUtil;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import org.apache.commons.collections4.BidiMap;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import java.util.List;
@@ -18,6 +19,7 @@
 * @date 2023/4/24
 */
@Component
@DependsOn("vciSpringUtil")
public class DllOracleMapperProcessor extends DllMapperProcessor {
    private static DllMapper mapper = VciSpringUtil.getBean(DllOracleMapper.class);
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllSqlLiteMapperProcessor.java
@@ -6,6 +6,7 @@
import com.vci.ubcs.starter.util.VciSpringUtil;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import org.apache.commons.collections4.BidiMap;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import java.util.List;
@@ -17,6 +18,7 @@
 * @date 2023/4/24
 */
@Component
@DependsOn("vciSpringUtil")
public class DllSqlLiteMapperProcessor extends DllMapperProcessor{
    private static DllMapper mapper = VciSpringUtil.getBean(DllSqlLiteMapper.class);
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.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.vci.ubcs.omd.entity.BtmTypeAttribute;
import org.apache.ibatis.annotations.Param;
@@ -19,6 +20,7 @@
    int batchDelete(@Param("records") List<String> records);
    @InterceptorIgnore(tenantLine = "true")
    int batchUpdate(@Param("records") List<BtmTypeAttribute> btmTypeAttributeDOList);
    /**
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
@@ -495,7 +495,7 @@
        }
        checkBtmTypeBeforeSave(btmTypeDTO);
        BtmType btmTypeDO = Optional.ofNullable(BeanUtil.copy(btmTypeDTO, BtmType.class)).orElseGet(BtmType::new);
        btmTypeDO.setBizDomain(btmTypeDTO.getDomain());
        btmTypeDO.setBizDomain(btmTypeDTO.getBizDomain());
        List<BtmTypeLinkAttributesDTO> attributes = btmTypeDTO.getAttributes();
        List<BtmTypeAttributeVO> afterAttributes;
        if (StringUtils.isBlank(btmTypeDO.getOid())){
@@ -521,7 +521,7 @@
        try {
            if (autoCreateTable) {
//                checkTableSame(btmTypeVO);
                R result = DomainRepeater.submitBtmType(btmTypeDTO.getDomain(), btmTypeVO);
                R result = DomainRepeater.submitBtmType(btmTypeDTO.getBizDomain(), btmTypeVO);
                if (result.isSuccess()){
                    List<ModifyAttributeInfo> infoList = new ArrayList<>();
                    Object data = result.getData();
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/BtmTypeAttributeMapper.xml
@@ -41,7 +41,8 @@
        pl_omd_btm_type
    </sql>
    <update id="batchUpdate" parameterType="java.util.List">
        <foreach collection="records" item="item" index="index" open="begin" close=";end;" separator=";">
        BEGIN
        <foreach collection="records" item="item" index="index" separator=";">
            update <include refid="tableName"/> set
                id = #{item.id,jdbcType=VARCHAR},
                name = #{item.name,jdbcType=VARCHAR},
@@ -65,7 +66,9 @@
                last_modifier = #{item.lastModifier,jdbcType=VARCHAR},
                last_modify_time = #{item.lastModifyTime,jdbcType=TIMESTAMP},
                ts = #{item.ts,jdbcType=TIMESTAMP}
            where oid = #{item.oid,jdbcType=VARCHAR}
        </foreach>
        ;END;
    </update>
    <delete id="batchDelete">
        delete from