From 3fade6d3b27f5666672bb3af610020367f790bda Mon Sep 17 00:00:00 2001
From: lihang <lihang@vci-tech.com>
Date: 星期二, 25 四月 2023 18:41:40 +0800
Subject: [PATCH] 业务类型相关以及BaseUtil转移

---
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java                           |  103 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/annotation/VciUseEnum.java            |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/QueryOptionConstant.java     |    2 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllBehavior.java                         |  105 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java            |   35 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/OsCodeFillTypeEnum.java       |    2 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllSqlLiteMapper.java                           |   41 
 Source/UBCS/ubcs-service/pom.xml                                                                                        |    1 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/OmdAttributeMapper.xml                                      |   13 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/exception/VciBaseException.java           |    4 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLifeCycleVO.java                          |  233 +
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdBtmTypeAttribute.java                |  140 
 Source/UBCS/ubcs-service-api/ubcs-util-api/pom.xml                                                                      |   44 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsLinkTypeDTO.java                         |   86 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMsMapper.java                                |   13 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdBtmTypeClient.java                   |   83 
 Source/UBCS/ubcs-service/ubcs-omd/pom.xml                                                                               |    5 
 Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/properties/DdlPropertise.java                  |   40 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OmdBtmTypeDTO.java                         |  151 
 Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/DataBaseEnum.java                        |  106 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdBtmAttributeServiceImpl.java           |   99 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/ReadExcelOption.java               |    2 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlBehavior.java                         |   13 
 Source/UBCS/ubcs-service-api/ubcs-ddl-api/pom.xml                                                                       |   28 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/TreeQueryObject.java       |  137 
 Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlTableInDataBaseBO.java                   |   54 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/PoiTemplateProcesser.java        |    2 
 Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlTableBO.java                             |   35 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsModifyAttributeInfoVO.java                |  373 ++
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLifeCycleLineVO.java                      |  248 +
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsStatusDTO.java                           |   43 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsRevisionRuleVO.java                       |  247 +
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessor.java                  |  191 +
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/EnumIdConstant.java          |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITablePageVO.java          |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/UserSecretEnum.java           |    5 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMsMapperProcessor.java                |  173 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/annotation/ExcelColumn.java           |    2 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdBtmTypeAttributeVO.java                  |  161 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OmdBtmTypeLinkAttributesDTO.java           |   98 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLifeCycleEventVO.java                     |  177 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java                               |  242 +
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsLifeCycleLineDTO.java                    |   82 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessor.java                  |  156 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITableFieldVO.java         |    2 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsBtmTypeExportDTO.java                    |   55 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/Lunar.java                       |    2 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsLifeCycleDTO.java                        |   66 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/ExcelColumnMap.java                |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/constant/ExcelLangCodeConstant.java   |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/RevisionInfo.java          |    2 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsStatusVO.java                             |  178 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/Tree.java                   |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BaseEnum.java                 |    7 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/TreeWrapperOptions.java    |  121 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/OmdBtmTypeController.java                   |  138 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/SheetRowData.java                  |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/KeyValue.java               |    2 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsModifyAttributeInfoDO.java            |  150 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/MessageUtils.java                |    2 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdBtmTypeAttributeService.java               |   42 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/PageHelper.java             |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UIFormReferVO.java          |    4 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/SheetDataSet.java                  |    3 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdBtmTypeVO.java                           |  185 +
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/LangBaseUtil.java                |    2 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java                          |   68 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLifeCycleEventDO.java                 |   82 
 Source/UBCS/ubcs-service-api/pom.xml                                                                                    |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/MdmEnumIdConstant.java       |    2 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMySqlMapper.java                             |  121 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdBtmTypeAttributeWrapper.java                |   66 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/DataGrid.java               |    2 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMapper.java                                  |  127 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BaseEnumInt.java              |    2 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdAttributeService.java                      |   40 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMySqlMapperProcessor.java             |   72 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/service/VciSecretServiceI.java        |    8 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/OmdBtmTypeClient.java                            |  103 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsRevisionRuleDTO.java                     |   69 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdBtmTypeWrapper.java                         |   61 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/VciFieldTypeEnum.java         |    4 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/WebUtil.java                     |    8 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMapper.java                                  |   29 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdAttribute.java                       |    8 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlOracleMapper.java                            |   58 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdBtmTypeServiceImpl.java                |  610 +++
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLifeCycleRuleDO.java                  |   95 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/AppendDataExcelOption.java         |    2 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsLifeCycleLineEventDTO.java               |   44 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtilForVCI.java              |   18 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITableCustomDefineVO.java  |    2 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdAttributeServiceImpl.java              |  106 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/DownloadTempOption.java            |    2 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMsMapperProcessor.java                |   69 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java   |   14 
 Source/UBCS/ubcs-service/ubcs-code/pom.xml                                                                              |   12 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLinkTypeVO.java                           |  305 +
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java                 |   26 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/SessionInfo.java            |    2 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/OmdBtmTypeAttributeMapper.java                  |   13 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/annotation/VciFieldType.java          |    4 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLinkTypeAttributeDO.java              |  141 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdBtmTypeService.java                        |  290 +
 Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/properties/DdlExportWordFieldProperties.java   |   66 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UIFieldSortVO.java          |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/annotation/VciEnum.java                   |    2 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java          |   34 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsEnumDTO.java                             |  163 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMySqlMapperProcessor.java             |  160 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLifeCycleLineEventDO.java             |   86 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/LocalFileUtil.java                   |    6 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java             |  355 +
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/toolmodel/DateConverter.java          |    6 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/OmdCacheConstant.java                 |    8 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLinkTypeAttributeVO.java                  |  390 ++
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/ControllerUtil.java              |    2 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLifeCycleLineDO.java                  |  101 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/OmdBtmTypeConstant.java               |  140 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/ExcelUtil.java                   |   25 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlOracleMapperProcessor.java            |   45 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdBtmType.java                         |  176 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllOracleMapperProcessor.java            |  141 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/WebThreadLocalUtil.java          |    4 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/ReleasedObjDO.java         |    2 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllOracleMapper.java                            |   53 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMSMapper.java                                |  128 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/OmdAttributeController.java                 |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/WriteExcelOption.java              |    4 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/OmdRegExpConstant.java       |   28 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/BaseQueryObject.java        |    2 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/OmdBtmTypeMapper.java                           |  118 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/OmdBtmTypeCache.java                     |   80 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java                       |  654 +++
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLinkTypeDO.java                       |  111 
 /dev/null                                                                                                               |   37 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/annotation/Transient.java                 |    2 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLifeCycleLineEventVO.java                 |  192 +
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllSqlLiteMapperProcessor.java           |   50 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/VciRevisionServiceI.java |    6 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/bo/WriteExcelData.java                    |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/annotation/ExcelTitle.java            |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/PoiImportProcesser.java          |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciDateUtil.java                 |    2 
 Source/UBCS/ubcs-service/ubcs-ddl/pom.xml                                                                               |   42 
 145 files changed, 10,708 insertions(+), 162 deletions(-)

diff --git a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java
deleted file mode 100644
index 49fc37c..0000000
--- a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package com.vci.ubcs.common.constant;
-
-import org.springblade.core.launch.constant.AppConstant;
-
-import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;
-
-/**
- * 鍚姩甯搁噺
- *
- * @author Chill
- */
-public interface LauncherConstant {
-
-	/**
-	 * xxljob
-	 */
-	String APPLICATION_XXLJOB_NAME = APPLICATION_NAME_PREFIX + "xxljob";
-
-	/**
-	 * xxljob
-	 */
-	String APPLICATION_XXLJOB_ADMIN_NAME = APPLICATION_NAME_PREFIX + "xxljob-admin";
-
-	/**
-	 * nacos dev 鍦板潃
-	 */
-	//String NACOS_DEV_ADDR = "dev.vci-tech.com:38848";
-	String NACOS_DEV_ADDR = "192.168.93.161:38848";
-
-	/**
-	 * nacos prod 鍦板潃
-	 */
-	//String NACOS_PROD_ADDR = "dev.vci-tech.com:38848";
-	String NACOS_PROD_ADDR = "192.168.93.129:38848";
-
-	/**
-	 * nacos test 鍦板潃
-	 */
-	//String NACOS_TEST_ADDR = "dev.vci-tech.com:38848";
-	String NACOS_TEST_ADDR = "192.168.93.133:38848";
-
-	/**
-	 * sentinel dev 鍦板潃
-	 */
-	//String SENTINEL_DEV_ADDR = "127.0.0.1:8858";
-
-	/**
-	 * sentinel prod 鍦板潃
-	 */
-	//String SENTINEL_PROD_ADDR = "172.30.0.58:8858";
-
-	/**
-	 * sentinel test 鍦板潃
-	 */
-	//String SENTINEL_TEST_ADDR = "172.30.0.58:8858";
-
-	/**
-	 * seata dev 鍦板潃
-	 */
-	String SEATA_DEV_ADDR = "127.0.0.1:8091";
-
-	/**
-	 * seata prod 鍦板潃
-	 */
-	String SEATA_PROD_ADDR = "172.30.0.68:8091";
-
-	/**
-	 * seata test 鍦板潃
-	 */
-	String SEATA_TEST_ADDR = "172.30.0.68:8091";
-
-	/**
-	 * zipkin dev 鍦板潃
-	 */
-	String ZIPKIN_DEV_ADDR = "http://dev.vci-tech.com:38006";
-
-	/**
-	 * zipkin prod 鍦板潃
-	 */
-	String ZIPKIN_PROD_ADDR = "http://172.30.0.71:9411";
-
-	/**
-	 * zipkin test 鍦板潃
-	 */
-	String ZIPKIN_TEST_ADDR = "http://172.30.0.71:9411";
-
-	/**
-	 * elk dev 鍦板潃
-	 */
-	String ELK_DEV_ADDR = "dev.vci-tech.com:38002";
-
-	/**
-	 * elk prod 鍦板潃
-	 */
-	String ELK_PROD_ADDR = "dev.vci-tech.com:38002";
-
-	/**
-	 * elk test 鍦板潃
-	 */
-	String ELK_TEST_ADDR = "dev.vci-tech.com:38002";
-
-	/**
-	 * seata file妯″紡
-	 */
-	String FILE_MODE = "file";
-
-	/**
-	 * seata nacos妯″紡
-	 */
-	String NACOS_MODE = "nacos";
-
-	/**
-	 * seata default妯″紡
-	 */
-	String DEFAULT_MODE = "default";
-
-	/**
-	 * seata group鍚庣紑
-	 */
-	String GROUP_NAME = "-group";
-
-	/**
-	 * seata 鏈嶅姟缁勬牸寮�
-	 *
-	 * @param appName 鏈嶅姟鍚�
-	 * @return group
-	 */
-	static String seataServiceGroup(String appName) {
-		return appName.concat(GROUP_NAME);
-	}
-
-	/**
-	 * 鍔ㄦ�佽幏鍙杗acos鍦板潃
-	 *
-	 * @param profile 鐜鍙橀噺
-	 * @return addr
-	 */
-	static String nacosAddr(String profile) {
-		switch (profile) {
-			case (AppConstant.PROD_CODE):
-				return NACOS_PROD_ADDR;
-			case (AppConstant.TEST_CODE):
-				return NACOS_TEST_ADDR;
-			default:
-				return NACOS_DEV_ADDR;
-		}
-	}
-
-	/**
-	 * 鍔ㄦ�佽幏鍙杝entinel鍦板潃
-	 *
-	 * @param profile 鐜鍙橀噺
-	 * @return addr
-	 */
-/*	static String sentinelAddr(String profile) {
-		switch (profile) {
-			case (AppConstant.PROD_CODE):
-				return SENTINEL_PROD_ADDR;
-			case (AppConstant.TEST_CODE):
-				return SENTINEL_TEST_ADDR;
-			default:
-				return SENTINEL_DEV_ADDR;
-		}
-	}*/
-
-	/**
-	 * 鍔ㄦ�佽幏鍙杝eata鍦板潃
-	 *
-	 * @param profile 鐜鍙橀噺
-	 * @return addr
-	 */
-	static String seataAddr(String profile) {
-		switch (profile) {
-			case (AppConstant.PROD_CODE):
-				return SEATA_PROD_ADDR;
-			case (AppConstant.TEST_CODE):
-				return SEATA_TEST_ADDR;
-			default:
-				return SEATA_DEV_ADDR;
-		}
-	}
-
-	/**
-	 * 鍔ㄦ�佽幏鍙杬ipkin鍦板潃
-	 *
-	 * @param profile 鐜鍙橀噺
-	 * @return addr
-	 */
-	static String zipkinAddr(String profile) {
-		switch (profile) {
-			case (AppConstant.PROD_CODE):
-				return ZIPKIN_PROD_ADDR;
-			case (AppConstant.TEST_CODE):
-				return ZIPKIN_TEST_ADDR;
-			default:
-				return ZIPKIN_DEV_ADDR;
-		}
-	}
-
-	/**
-	 * 鍔ㄦ�佽幏鍙杄lk鍦板潃
-	 *
-	 * @param profile 鐜鍙橀噺
-	 * @return addr
-	 */
-	static String elkAddr(String profile) {
-		switch (profile) {
-			case (AppConstant.PROD_CODE):
-				return ELK_PROD_ADDR;
-			case (AppConstant.TEST_CODE):
-				return ELK_TEST_ADDR;
-			default:
-				return ELK_DEV_ADDR;
-		}
-	}
-
-}
diff --git a/Source/UBCS/ubcs-service-api/pom.xml b/Source/UBCS/ubcs-service-api/pom.xml
index 7d77920..e1875a9 100644
--- a/Source/UBCS/ubcs-service-api/pom.xml
+++ b/Source/UBCS/ubcs-service-api/pom.xml
@@ -23,6 +23,8 @@
         <module>ubcs-user-api</module>
         <module>ubcs-code-api</module>
         <module>ubcs-omd-api</module>
+        <module>ubcs-util-api</module>
+        <module>ubcs-ddl-api</module>
     </modules>
 
     <dependencies>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/util/VciBaseUtil.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/util/VciBaseUtil.java
deleted file mode 100644
index 657b225..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/util/VciBaseUtil.java
+++ /dev/null
@@ -1,1101 +0,0 @@
-package com.vci.ubcs.com.vci.starter.util;
-
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-
-import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.serializer.SerializerFeature;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.SessionInfo;
-import com.vci.ubcs.com.vci.starter.web.util.VciDateUtil;
-import com.vci.ubcs.com.vci.starter.web.util.WebThreadLocalUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.util.CollectionUtils;
-import org.springframework.util.ResourceUtils;
-
-import java.beans.IntrospectionException;
-import java.beans.PropertyDescriptor;
-import java.io.File;
-import java.io.IOException;
-import java.lang.Character.UnicodeBlock;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.net.InetAddress;
-import java.net.NetworkInterface;
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-public class VciBaseUtil {
-	private static Logger log = LoggerFactory.getLogger(VciBaseUtil.class);
-	public static final String NOTIN = "not in";
-	private static String localIp = null;
-
-	public VciBaseUtil() {
-	}
-
-	public static String getPk() {
-		return UUID.randomUUID().toString();
-	}
-
-	public static int getIntForBoolean(boolean b) {
-		return b ? 1 : 0;
-	}
-
-	public static int getIntFromHibernateResult(Object obj) {
-		if (obj == null) {
-			return 0;
-		} else if (obj instanceof BigDecimal) {
-			return ((BigDecimal)obj).intValue();
-		} else if (obj instanceof BigInteger) {
-			return ((BigInteger)obj).intValue();
-		} else if (obj instanceof Double) {
-			return ((Double)obj).intValue();
-		} else if (obj instanceof Long) {
-			return ((Long)obj).intValue();
-		} else if (obj instanceof Short) {
-			return ((Short)obj).intValue();
-		} else if (obj instanceof Float) {
-			return ((Float)obj).intValue();
-		} else if (obj instanceof String) {
-			try {
-				return Integer.valueOf(obj.toString());
-			} catch (Exception var2) {
-				return 0;
-			}
-		} else {
-			return 0;
-		}
-	}
-
-	public static long getLong(String s) {
-		long l = 0L;
-		if (s == null) {
-			return 0L;
-		} else {
-			try {
-				l = Long.parseLong(s);
-				return l;
-			} catch (Exception var4) {
-				return 0L;
-			}
-		}
-	}
-
-	public static float getFloat(String s) {
-		float f = 0.0F;
-		if (s == null) {
-			return 0.0F;
-		} else {
-			try {
-				f = Float.parseFloat(s);
-				return f;
-			} catch (Exception var3) {
-				return 0.0F;
-			}
-		}
-	}
-
-	public static int getInt(String string) {
-		//int i = false;
-		if (string != null && !"".equals(string.trim())) {
-			if (string.contains(".")) {
-				string = string.substring(0, string.indexOf("."));
-			}
-
-			try {
-				int i = Integer.parseInt(string);
-				return i;
-			} catch (Exception var3) {
-				return 0;
-			}
-		} else {
-			return 0;
-		}
-	}
-
-	public static double getDouble(String s) {
-		double d = 0.0D;
-		if (isNull(s)) {
-			return 0.0D;
-		} else {
-			try {
-				d = Double.parseDouble(s);
-				return d;
-			} catch (Exception var4) {
-				return 0.0D;
-			}
-		}
-	}
-
-	public static String removeComma(String s) {
-		if (s != null && s.trim().length() != 0) {
-			if (s.startsWith(",")) {
-				s = s.substring(1, s.length());
-			}
-
-			if (s.endsWith(",")) {
-				s = s.substring(0, s.length() - 1);
-			}
-
-			return s;
-		} else {
-			return s;
-		}
-	}
-
-	public static String toInSql(String s) {
-		s = removeComma(s);
-		if (s != null && s.trim().length() != 0) {
-			String[] temp = s.split(",");
-			return toInSql(temp);
-		} else {
-			return "";
-		}
-	}
-
-	public static String toInSql(String[] s) {
-		if (s != null && s.length > 0) {
-			StringBuilder sb = new StringBuilder();
-			if (s != null && s.length > 0) {
-				for(int i = 0; i < s.length; ++i) {
-					if (s[i] != null && s[i].trim().length() > 0 && !s[i].startsWith("'")) {
-						sb.append("'").append(s[i]).append("',");
-					}
-				}
-			}
-
-			return removeComma(sb.toString());
-		} else {
-			return "";
-		}
-	}
-
-	public static String toInSql(String field, String s) {
-		return !StringUtils.isBlank(field) && !StringUtils.isBlank(s) ? toInSql(field, removeComma(s).split(","), "") : "";
-	}
-
-	public static String toInSql(String field, String[] s) {
-		return toInSql(field, s, "in");
-	}
-
-	public static String toInSql(String field, String[] s, String operation) {
-		if (!StringUtils.isBlank(field) && s != null && s.length != 0) {
-			StringBuilder sb = new StringBuilder();
-			if (s != null && s.length > 0) {
-				String andOr = "or";
-				if (operation.trim().toLowerCase().equals("not in")) {
-					andOr = "and";
-				}
-
-				for(int i = 0; i < s.length; ++i) {
-					if (s[i] != null && s[i].trim().length() > 0 && !s[i].startsWith("'")) {
-						if (i == 0) {
-							sb.append(field).append(" ").append(operation).append(" (");
-						}
-
-						if (i % 500 == 0 && i != 0) {
-							sb.append(" ").append(andOr).append(" ").append(field).append(" ").append(operation).append(" (");
-						}
-
-						sb.append("'").append(s[i]).append("'");
-						if (i % 500 != 499 && i != s.length - 1) {
-							sb.append(",");
-						}
-
-						if (i % 500 == 499 || i == s.length - 1) {
-							sb.append(") ");
-						}
-					}
-				}
-			}
-
-			return sb.toString();
-		} else {
-			return "";
-		}
-	}
-
-	/** @deprecated */
-	@Deprecated
-	public static String arrayToString(String[] array) {
-		if (array != null && array.length > 0) {
-			StringBuilder sb = new StringBuilder();
-
-			for(int i = 0; i < array.length; ++i) {
-				String record = array[i];
-				if (StringUtils.isNotBlank(record)) {
-					sb.append(record).append(",");
-				}
-			}
-
-			return removeComma(sb.toString());
-		} else {
-			return "";
-		}
-	}
-
-	public static String collectionToString(Collection collection) {
-		if (CollectionUtils.isEmpty(collection)) {
-			return "";
-		} else {
-			StringBuilder sb = new StringBuilder();
-			Iterator it = collection.iterator();
-
-			while(true) {
-				Object record;
-				do {
-					do {
-						if (!it.hasNext()) {
-							return removeComma(sb.toString());
-						}
-
-						record = it.next();
-					} while(record == null);
-				} while(record instanceof String && !StringUtils.isNotBlank((String)record));
-
-				sb.append(record.toString()).append(",");
-			}
-		}
-	}
-
-	public static String toUpForFirst(String s) {
-		if (s != null && s.trim().length() != 0) {
-			String temp = s.substring(0, 1);
-			temp = temp.toUpperCase();
-			return temp + s.substring(1, s.length());
-		} else {
-			return "";
-		}
-	}
-
-	public static String toLowForFirst(String s) {
-		if (s != null && s.trim().length() != 0) {
-			String temp = s.substring(0, 1);
-			temp = temp.toLowerCase();
-			return temp + s.substring(1, s.length());
-		} else {
-			return "";
-		}
-	}
-
-	public static int countOfString(String s, char findC) {
-		Map<String, Integer> charMap = new HashMap();
-		char[] cs = s.toCharArray();
-		char[] var4 = cs;
-		int var5 = cs.length;
-
-		for(int var6 = 0; var6 < var5; ++var6) {
-			char c = var4[var6];
-			charMap.put(String.valueOf(c), !charMap.containsKey(String.valueOf(c)) ? 1 : (Integer)charMap.get(String.valueOf(c)) + 1);
-		}
-
-		return (Integer)charMap.get(String.valueOf(findC));
-	}
-
-	public static List<String> str2List(String s) {
-		if (isNull(s)) {
-			return null;
-		} else {
-			List<String> l = new ArrayList();
-			Collections.addAll(l, removeComma(s).split(","));
-			return l;
-		}
-	}
-
-	public static String list2String(List<String> ls) {
-		return ls != null && ls.size() != 0 ? (String)ls.stream().collect(Collectors.joining(",")) : "";
-	}
-
-	public static boolean isNull(String o) {
-		return StringUtils.isEmpty(o);
-	}
-
-	public static boolean isNotNull(String o) {
-		return !isNull(o);
-	}
-
-	public static boolean isNullOrNullString(String o) {
-		return StringUtils.isBlank(o);
-	}
-
-	public static boolean inArray(String[] arr, String s) {
-		if (arr != null && s != null) {
-			String[] var2 = arr;
-			int var3 = arr.length;
-
-			for(int var4 = 0; var4 < var3; ++var4) {
-				String a = var2[var4];
-				if (s.trim().equalsIgnoreCase(a)) {
-					return true;
-				}
-			}
-		}
-
-		return false;
-	}
-
-	public static boolean inArray(Object[] arr, Object o) {
-		if (arr != null && o != null) {
-			Object[] var2 = arr;
-			int var3 = arr.length;
-
-			for(int var4 = 0; var4 < var3; ++var4) {
-				Object a = var2[var4];
-				if (a.equals(o)) {
-					return true;
-				}
-			}
-		}
-
-		return false;
-	}
-
-	public static double round(double value, int scale, int roundingMode) {
-		BigDecimal bd = new BigDecimal(value);
-		bd = bd.setScale(scale, roundingMode);
-		double d = bd.doubleValue();
-		bd = null;
-		return d;
-	}
-
-	public static double round(double value, int scale) {
-		return round(value, scale, 4);
-	}
-
-	public static boolean isEmail(String string) {
-		if (StringUtils.isBlank(string)) {
-			return false;
-		} else {
-			String regEx1 = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
-			Pattern p = Pattern.compile(regEx1);
-			Matcher m = p.matcher(string);
-			return m.matches();
-		}
-	}
-
-	public static boolean isNumber(String s) {
-		return StringUtils.isNotBlank(s) && s.matches("\\d+\\.?\\d*");
-	}
-
-	public static Field getFieldForObject(String fieldName, List<Field> fieldsList) {
-		if (StringUtils.isBlank(fieldName)) {
-			return null;
-		} else {
-			if (fieldsList != null && fieldsList.size() > 0) {
-				Iterator var2 = fieldsList.iterator();
-
-				while(var2.hasNext()) {
-					Field field = (Field)var2.next();
-					if (field.getName().toLowerCase().equals(fieldName.toLowerCase())) {
-						return field;
-					}
-				}
-			}
-
-			return null;
-		}
-	}
-
-	public static Method getSetmethod(Class c, String fieldName) {
-		if (c != null && StringUtils.isNotBlank(fieldName)) {
-			try {
-				PropertyDescriptor pd = new PropertyDescriptor(fieldName, c);
-				return pd.getWriteMethod();
-			} catch (SecurityException var3) {
-				if (log.isErrorEnabled()) {
-					log.error("鑾峰彇getter鍑洪敊", var3);
-				}
-			} catch (IntrospectionException var4) {
-				if (log.isErrorEnabled()) {
-					log.error("鑾峰彇getter鍑洪敊", var4);
-				}
-			}
-		}
-
-		return null;
-	}
-
-	public static Method getGetmethod(Class c, String fieldName) {
-		if (c != null && StringUtils.isNotBlank(fieldName)) {
-			try {
-				PropertyDescriptor pd = new PropertyDescriptor(fieldName, c);
-				return pd.getReadMethod();
-			} catch (SecurityException var3) {
-				if (log.isErrorEnabled()) {
-					log.error("鑾峰彇getter鍑洪敊", var3);
-				}
-			} catch (IntrospectionException var4) {
-				if (log.isErrorEnabled()) {
-					log.error("鑾峰彇getter鍑洪敊", var4);
-				}
-			}
-		}
-
-		return null;
-	}
-
-	public static String getColumnAnnotaionNameValue(Annotation[] fieldAnnotaions) {
-		return getAnnotationValue("com.vci.starter.web.annotation.Column,javax.persistence.Column", "name", fieldAnnotaions);
-	}
-
-	public static String getAnnotationValue(String annotationName, String methodName, Annotation[] fieldAnnotaions) {
-		String[] annotaionNameArray = annotationName.split(",");
-		Annotation[] var4 = fieldAnnotaions;
-		int var5 = fieldAnnotaions.length;
-
-		for(int var6 = 0; var6 < var5; ++var6) {
-			Annotation annotation = var4[var6];
-			String anname = annotation.annotationType().getName();
-			if (inArray(annotaionNameArray, anname)) {
-				String name = null;
-
-				try {
-					name = (String)annotation.getClass().getMethod(methodName).invoke(annotation);
-				} catch (IllegalAccessException var11) {
-					var11.printStackTrace();
-				} catch (InvocationTargetException var12) {
-					var12.printStackTrace();
-				} catch (NoSuchMethodException var13) {
-					var13.printStackTrace();
-				}
-
-				return name;
-			}
-		}
-
-		return null;
-	}
-
-	public static Object getValueFromField(String fieldName, Object sourceObject) {
-		if (StringUtils.isNotBlank(fieldName)) {
-			try {
-				Method getMethod = getGetmethod(sourceObject.getClass(), fieldName);
-				if (getMethod != null) {
-					return getMethod.invoke(sourceObject);
-				}
-
-				Field field = getFieldForObject(fieldName, sourceObject);
-				if (field != null) {
-					field.setAccessible(true);
-					return field.get(sourceObject);
-				}
-			} catch (SecurityException var4) {
-				if (log.isErrorEnabled()) {
-					log.error("浠庡睘鎬т笂鑾峰彇鍊�", var4);
-				}
-			} catch (IllegalAccessException var5) {
-				if (log.isErrorEnabled()) {
-					log.error("浠庡睘鎬т笂鑾峰彇鍊�", var5);
-				}
-			} catch (IllegalArgumentException var6) {
-				if (log.isErrorEnabled()) {
-					log.error("浠庡睘鎬т笂鑾峰彇鍊�", var6);
-				}
-			} catch (InvocationTargetException var7) {
-				if (log.isErrorEnabled()) {
-					log.error("浠庡睘鎬т笂鑾峰彇鍊�", var7);
-				}
-			}
-		}
-
-		return null;
-	}
-
-	public static void setValueForMethod(Field field, Object obj, Object value) {
-		try {
-			if (field != null) {
-				field.setAccessible(true);
-				Method setMethod = getSetmethod(field.getDeclaringClass(), field.getName());
-				setMethod.invoke(obj, value);
-			}
-		} catch (Exception var4) {
-			log.error("鍙嶅皠璋冪敤鏂规硶鍑虹幇浜嗛敊璇�,", var4);
-		}
-
-	}
-
-	public static void alertNotNull(Object... s) throws VciBaseException {
-		if (s != null && s.length > 0) {
-			for(int i = 0; i < s.length; ++i) {
-				Object obj = s[i];
-				String param = "";
-
-				try {
-					++i;
-					param = s[i].toString();
-				} catch (Exception var5) {
-				}
-
-				if (obj == null) {
-					throw new VciBaseException("鍙傛暟[{0}]涓嶈兘涓虹┖", new String[]{param});
-				}
-
-				if (obj instanceof Collection) {
-					if (CollectionUtils.isEmpty((Collection)obj)) {
-						throw new VciBaseException("鍙傛暟[{0}]涓嶈兘涓虹┖", new String[]{param});
-					}
-				} else if (StringUtils.isBlank(obj.toString())) {
-					throw new VciBaseException("鍙傛暟[{0}]涓嶈兘涓虹┖", new String[]{param});
-				}
-			}
-		}
-
-	}
-
-	/** @deprecated */
-	@Deprecated
-	public static void alertCollectionNotNull(String param, Collection collections) throws VciBaseException {
-		if (CollectionUtils.isEmpty(collections)) {
-			throw new VciBaseException("鍙傛暟{0}涓嶈兘涓虹┖", new String[]{param});
-		}
-	}
-
-	public static <T> Set<Set<T>> switchSetForOracleIn(Set<T> set) {
-		Set<Set<T>> listHasList = new HashSet();
-		if (set == null) {
-			return listHasList;
-		} else {
-			int muti = 1;
-			if (set.size() > 500) {
-				int balance = set.size() % 500;
-				muti = (set.size() - balance) / 500 + (balance == 0 ? 0 : 1);
-			}
-
-			List list = new ArrayList();
-			Iterator it = set.iterator();
-
-			while(it.hasNext()) {
-				list.add(it.next());
-			}
-
-			for(int i = 0; i < muti; ++i) {
-				int start = i * 500;
-				int end = start + 500;
-				if (i == muti - 1 || end > set.size()) {
-					end = set.size();
-				}
-
-				List subList = list.subList(start, end);
-				Set subSet = new HashSet();
-				Iterator var10 = subList.iterator();
-
-				while(var10.hasNext()) {
-					Object obj = var10.next();
-					subSet.add(obj);
-				}
-
-				listHasList.add(subSet);
-			}
-
-			return listHasList;
-		}
-	}
-
-	public static <T> Vector<Vector<T>> switchVectorForOracleIn(Vector<T> vector) {
-		Vector<Vector<T>> listHasList = new Vector();
-		if (vector == null) {
-			return listHasList;
-		} else {
-			int muti = 1;
-			if (vector.size() > 500) {
-				int balance = vector.size() % 500;
-				muti = (vector.size() - balance) / 500 + (balance == 0 ? 0 : 1);
-			}
-
-			List list = new ArrayList();
-			Iterator it = vector.iterator();
-
-			while(it.hasNext()) {
-				list.add(it.next());
-			}
-
-			for(int i = 0; i < muti; ++i) {
-				int start = i * 500;
-				int end = start + 500;
-				if (i == muti - 1 || end > vector.size()) {
-					end = vector.size();
-				}
-
-				List subList = list.subList(start, end);
-				Vector subSet = new Vector();
-				Iterator var10 = subList.iterator();
-
-				while(var10.hasNext()) {
-					Object obj = var10.next();
-					subSet.add(obj);
-				}
-
-				listHasList.add(subSet);
-			}
-
-			return listHasList;
-		}
-	}
-
-	public static <T> T jsonString2JavaBean(String jsonString, Class<T> beanClass) {
-		return JSONObject.parseObject(jsonString, beanClass);
-	}
-
-	public static void ifNullSetDefautl(String str, String defaultValue) {
-		if (isNull(str)) {
-			;
-		}
-
-	}
-
-	public static <T> T getFristObjectFromJson(String jsonString, Class<T> beanClass) {
-		return !isNull(jsonString) ? JSONObject.parseArray(jsonString, beanClass).get(0) : null;
-	}
-
-	public static String getJSONStringWithDateFormat(Object obj) {
-		return JSONObject.toJSONStringWithDateFormat(obj, "yyyy-MM-dd HH:mm:ss.SSS", new SerializerFeature[]{SerializerFeature.WriteDateUseDateFormat});
-	}
-
-	public static Map<String, Object> objectToMap(Object o) {
-		Map<String, Object> map = new HashMap();
-		if (o != null) {
-			String jsonString = JSONObject.toJSONStringWithDateFormat(o, "yyyy-MM-dd HH:mm:ss.SSS", new SerializerFeature[]{SerializerFeature.WriteDateUseDateFormat});
-			if (StringUtils.isNotBlank(jsonString)) {
-				JSONObject jsonObject = JSONObject.parseObject(jsonString);
-				if (jsonObject != null) {
-					Iterator var4 = jsonObject.keySet().iterator();
-
-					while(var4.hasNext()) {
-						String key = (String)var4.next();
-						map.put(key, jsonObject.get(key));
-					}
-				}
-			}
-		}
-
-		return map;
-	}
-
-	public static Map<String, String> objectToMapString(Object o) {
-		Map<String, String> map = new HashMap();
-		if (o != null) {
-			String jsonString = JSONObject.toJSONStringWithDateFormat(o, "yyyy-MM-dd HH:mm:ss.SSS", new SerializerFeature[]{SerializerFeature.WriteDateUseDateFormat});
-			if (StringUtils.isNotBlank(jsonString)) {
-				JSONObject jsonObject = JSONObject.parseObject(jsonString);
-				if (jsonObject != null) {
-					Iterator var4 = jsonObject.keySet().iterator();
-
-					while(var4.hasNext()) {
-						String key = (String)var4.next();
-						map.put(key, jsonObject.getString(key));
-					}
-				}
-			}
-		}
-
-		return map;
-	}
-
-	public static boolean isNotNullForField(Object obj, Field f) {
-		return !"serialVersionUID".equalsIgnoreCase(f.getName()) && !"DEFAULT_INITIAL_CAPACITY".equalsIgnoreCase(f.getName()) && null != obj && !isNullOrNullString(obj.toString());
-	}
-
-	public static String array2String(String[] array) {
-		if (null != array && array.length != 0) {
-			String ss = "";
-			String[] var2 = array;
-			int var3 = array.length;
-
-			for(int var4 = 0; var4 < var3; ++var4) {
-				String s = var2[var4];
-				ss = ss + s + ",";
-			}
-
-			return removeComma(ss);
-		} else {
-			return "";
-		}
-	}
-
-	public static void copyValueForMap(Map source, Map target, String[] copyField) {
-		Map<String, String> copyFieldMap = new HashMap();
-		String[] var4 = copyField;
-		int var5 = copyField.length;
-
-		for(int var6 = 0; var6 < var5; ++var6) {
-			String field = var4[var6];
-			copyFieldMap.put(field, field);
-		}
-
-		copyValueForMap(source, target, (Map)copyFieldMap);
-	}
-
-	public static void copyValueForMap(Map source, Map target, Map<String, String> copyField) {
-		try {
-			Iterator it = copyField.keySet().iterator();
-
-			while(it.hasNext()) {
-				String field = (String)it.next();
-				target.put(field, source.get(copyField.get(field)));
-			}
-		} catch (Exception var5) {
-		}
-
-	}
-
-	public static Double getDoubleFromMap(String field, Map<String, Object> record) {
-		if (!isNullOrNullString(field) && record != null && record.containsKey(field)) {
-			Object v = record.get(field);
-			if (v instanceof BigDecimal) {
-				return ((BigDecimal)v).doubleValue();
-			} else {
-				return v instanceof Double ? (Double)v : getDouble((String)v);
-			}
-		} else {
-			return null;
-		}
-	}
-
-	public static String getDataByKey(String key, Map<String, Object> data) {
-		String value = "";
-		if (data.containsKey(key)) {
-			value = (String)data.get(key);
-		}
-
-		if (value == null) {
-			value = "";
-		}
-
-		return value;
-	}
-
-	public static Map getNotNullMap(Map map) {
-		if (map == null) {
-			return new HashMap();
-		} else {
-			Iterator it = map.keySet().iterator();
-			HashMap unNullMap = new HashMap();
-
-			while(true) {
-				while(true) {
-					String newKey;
-					Object value;
-					do {
-						if (!it.hasNext()) {
-							return unNullMap;
-						}
-
-						Object key = it.next();
-						newKey = key.toString().toLowerCase();
-						value = map.get(key);
-					} while(value == null);
-
-					if (value instanceof String && isNotNull(value.toString())) {
-						unNullMap.put(newKey, value);
-					} else if (!(value instanceof String)) {
-						unNullMap.put(newKey, value);
-					}
-				}
-			}
-		}
-	}
-
-	public static List<Field> getAllFieldForObj(Class c) {
-		List<Field> allField = new ArrayList();
-		Set<String> fieldNameSet = new HashSet();
-
-		for(Class classz = c; classz != Object.class; classz = classz.getSuperclass()) {
-			Field[] thisClassField = classz.getDeclaredFields();
-			Field[] var5 = thisClassField;
-			int var6 = thisClassField.length;
-
-			for(int var7 = 0; var7 < var6; ++var7) {
-				Field field = var5[var7];
-				if (!field.getName().equals("serialVersionUID")) {
-					String fieldLowerName = field.getName().toLowerCase();
-					if (!fieldNameSet.contains(fieldLowerName)) {
-						fieldNameSet.add(fieldLowerName);
-						allField.add(field);
-					}
-				}
-			}
-		}
-
-		return allField;
-	}
-
-	public static Field getTsField(Class c) {
-		List<Field> allField = getAllFieldForObj(c);
-		if (allField != null && allField.size() > 0) {
-			Iterator var2 = allField.iterator();
-
-			while(var2.hasNext()) {
-				Field field = (Field)var2.next();
-				if (field.getName().equals("ts")) {
-					return field;
-				}
-			}
-		}
-
-		return null;
-	}
-
-	public static Field getFieldForObject(String fieldName, Object obj) {
-		return obj == null ? null : getFieldForObject(fieldName, obj.getClass());
-	}
-
-	public static Field getFieldForObject(String fieldName, Class c) {
-		List<Field> allField = getAllFieldForObj(c);
-		if (allField != null && allField.size() > 0) {
-			Iterator var3 = allField.iterator();
-
-			while(var3.hasNext()) {
-				Field field = (Field)var3.next();
-				if (field.getName().toLowerCase().equalsIgnoreCase(fieldName.toLowerCase())) {
-					return field;
-				}
-			}
-		}
-
-		return null;
-	}
-
-	public static Method getSetmethod(Class c, Field field) {
-		return getSetmethod(c, field.getName());
-	}
-
-	public static Method getGetmethod(Class c, Field field) {
-		return getGetmethod(c, field.getName());
-	}
-
-	public static Method getMethodByName(Class<?> classObj, String methodName) {
-		alertNotNull(classObj, "鑾峰彇鏂规硶鐨勫璞℃墍灞炵殑绫�", methodName, "鏂规硶鐨勫悕瀛�");
-		Method[] methods = classObj.getMethods();
-		List<Method> sameMethods = (List)Arrays.stream(methods).filter((method) -> {
-			return method.getName().equalsIgnoreCase(methodName);
-		}).collect(Collectors.toList());
-		return !CollectionUtils.isEmpty(sameMethods) ? (Method)sameMethods.get(0) : null;
-	}
-
-	public static Map<String, String> whereSql2Map(String whereSql) {
-		Map<String, String> map = new HashMap();
-		if (isNotNull(whereSql)) {
-			String[] selects = whereSql.split("and");
-			if (selects != null && selects.length > 0) {
-				String[] var3 = selects;
-				int var4 = selects.length;
-
-				for(int var5 = 0; var5 < var4; ++var5) {
-					String s = var3[var5];
-					s = s.trim();
-					map.put(s.substring(0, s.indexOf(" ")).trim(), s.substring(s.indexOf(" ") + 1).trim());
-				}
-			}
-		}
-
-		return map;
-	}
-
-	public static synchronized String getRoundFilename(String prefix) {
-		if (prefix == null) {
-			prefix = "";
-		}
-
-		return prefix + System.currentTimeMillis();
-	}
-
-	public static String getLocalIp() {
-		if (localIp == null) {
-			try {
-				InetAddress inetAddress = getLocalHostLANAddress();
-				if (inetAddress == null) {
-					localIp = "127.0.0.1";
-				} else {
-					localIp = inetAddress.getHostAddress();
-				}
-			} catch (Exception var1) {
-				localIp = "127.0.0.1";
-			}
-		}
-
-		return localIp;
-	}
-
-	private static InetAddress getLocalHostLANAddress() throws Exception {
-		try {
-			InetAddress candidateAddress = null;
-			Enumeration ifaces = NetworkInterface.getNetworkInterfaces();
-
-			while(ifaces.hasMoreElements()) {
-				NetworkInterface iface = (NetworkInterface)ifaces.nextElement();
-				Enumeration inetAddrs = iface.getInetAddresses();
-
-				while(inetAddrs.hasMoreElements()) {
-					InetAddress inetAddr = (InetAddress)inetAddrs.nextElement();
-					if (!inetAddr.isLoopbackAddress()) {
-						if (inetAddr.isSiteLocalAddress()) {
-							return inetAddr;
-						}
-
-						if (candidateAddress == null) {
-							candidateAddress = inetAddr;
-						}
-					}
-				}
-			}
-
-			if (candidateAddress != null) {
-				return candidateAddress;
-			} else {
-				InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
-				return jdkSuppliedAddress;
-			}
-		} catch (Exception var5) {
-			var5.printStackTrace();
-			return null;
-		}
-	}
-
-	public static String getProjectPath() {
-		String path = "";
-
-		try {
-			String jarFilePath = ResourceUtils.getURL("classpath:").getPath();
-			if (jarFilePath.contains("!")) {
-				path = (new File(jarFilePath)).getParentFile().getParentFile().getParent();
-			} else {
-				path = (new File(jarFilePath)).getParent();
-			}
-		} catch (IOException var2) {
-			throw new VciBaseException("鑾峰彇褰撳墠鏈嶅姟鎵�鍦ㄧ殑鏂囦欢澶瑰嚭鐜颁簡閿欒");
-		}
-
-		if (path.startsWith("file:\\")) {
-			path = path.substring(6);
-		}
-
-		return path;
-	}
-
-	public static Map<String, String> getParamsByUrl(String url) {
-		if (StringUtils.isBlank(url)) {
-			return new HashMap();
-		} else {
-			String[] array = url.split("&");
-			Map<String, String> params = new HashMap();
-			String[] var3 = array;
-			int var4 = array.length;
-
-			for(int var5 = 0; var5 < var4; ++var5) {
-				String temp = var3[var5];
-				if (temp.contains("=")) {
-					String[] keyValues = temp.split("=");
-					params.put(keyValues[0], keyValues[1]);
-				} else {
-					params.put(temp, "");
-				}
-			}
-
-			return params;
-		}
-	}
-
-	public static boolean isChinese(char c) {
-		UnicodeBlock ub = UnicodeBlock.of(c);
-		return ub == UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS || ub == UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == UnicodeBlock.GENERAL_PUNCTUATION || ub == UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS;
-	}
-
-	public static boolean containsKeyUnCaseForMap(Map map, String key) {
-		if (!CollectionUtils.isEmpty(map)) {
-			boolean[] finded = new boolean[]{false};
-			map.forEach((k, value) -> {
-				if (k instanceof String && k.toString().toLowerCase(Locale.ROOT).equalsIgnoreCase(key)) {
-					finded[0] = true;
-				}
-			});
-			return finded[0];
-		} else {
-			return false;
-		}
-	}
-
-	public static boolean isChinese(String str) {
-		char[] ch = str.toCharArray();
-		char[] var2 = ch;
-		int var3 = ch.length;
-
-		for(int var4 = 0; var4 < var3; ++var4) {
-			char c = var2[var4];
-			if (isChinese(c)) {
-				return true;
-			}
-		}
-
-		return false;
-	}
-
-	public static String toDBC(String input) {
-		if (StringUtils.isBlank(input)) {
-			return input;
-		} else {
-			char[] c = input.toCharArray();
-
-			for(int i = 0; i < c.length; ++i) {
-				if (c[i] == 12288) {
-					c[i] = ' ';
-				} else if (c[i] > '\uff00' && c[i] < '锝�') {
-					c[i] -= '锘�';
-				}
-			}
-
-			return new String(c);
-		}
-	}
-
-	public static String toSBC(String input) {
-		if (StringUtils.isBlank(input)) {
-			return input;
-		} else {
-			char[] c = input.toCharArray();
-
-			for(int i = 0; i < c.length; ++i) {
-				if (c[i] == 12288) {
-					c[i] = ' ';
-				} else if (c[i] > '\uff00' && c[i] < '锝�') {
-					c[i] += '锘�';
-				}
-			}
-
-			return new String(c);
-		}
-	}
-
-	public static SessionInfo getCurrentUserSessionInfoNotException() {
-		return (SessionInfo) WebThreadLocalUtil.getCurrentUserSessionInfoInThread().get();
-	}
-
-	public static String getStringValueFromObject(Object obj) {
-		if (obj == null) {
-			return "";
-		} else if (!(obj instanceof Integer) && !(obj instanceof Float) && !(obj instanceof Long) && !(obj instanceof Double)) {
-			return obj instanceof Date ? VciDateUtil.date2Str((Date)obj, "yyyy-MM-dd HH:mm:ss.SSS") : obj.toString();
-		} else {
-			if (obj instanceof Double) {
-				Double aDouble = (Double)obj;
-				if (aDouble != null && aDouble % 1.0D == 0.0D) {
-					return String.valueOf(aDouble.intValue());
-				}
-			}
-
-			return String.valueOf(obj);
-		}
-	}
-
-}
-
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/BaseEnum.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/BaseEnum.java
deleted file mode 100644
index c9512ed..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/BaseEnum.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.enumpck;
-
-public interface BaseEnum {
-	String getValue();
-
-	String getText();
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-ddl-api/pom.xml b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/pom.xml
new file mode 100644
index 0000000..930e082
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/pom.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-service-api</artifactId>
+        <groupId>com.vci.ubcs</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-ddl-api</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-omd-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlTableBO.java b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlTableBO.java
new file mode 100644
index 0000000..be18f38
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlTableBO.java
@@ -0,0 +1,35 @@
+package com.vci.ubcs.ddl.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Data
+public class DdlTableBO implements Serializable {
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = -5850730702502494744L;
+
+	/**
+	 * 琛ㄦ牸鍚嶇О
+	 */
+	private String tableName;
+
+	/**
+	 * 琛ㄦ牸鐨勬弿杩�
+	 */
+	private String tableDesc;
+
+	/**
+	 * 鍖呭惈鐨勫瓧娈典俊鎭�
+	 */
+	private List<DdlTableInDataBaseBO> columns;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlTableInDataBaseBO.java b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlTableInDataBaseBO.java
new file mode 100644
index 0000000..13216a7
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlTableInDataBaseBO.java
@@ -0,0 +1,54 @@
+package com.vci.ubcs.ddl.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Data
+public class DdlTableInDataBaseBO implements Serializable {
+
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = -4749100343717030972L;
+	/**
+	 * 瀛楁鍚嶇О
+	 */
+	private String id;
+
+	/**
+	 * 瀛楁鎻忚堪
+	 */
+	private String name;
+
+	/**
+	 * 鏁版嵁绫诲瀷
+	 */
+	private String attrDataType;
+
+	/**
+	 * 灞炴�х殑闀垮害
+	 */
+	private Integer attributeLength;
+
+	/**
+	 * 鏄惁鍙互涓虹┖
+	 */
+	private String nullableFlag;
+
+	/**
+	 * 灏忔暟绮惧害浣嶆暟
+	 */
+	private Integer precisionLength;
+
+	/**
+	 * 灏忔暟鍒诲害浣嶆暟
+	 */
+	private Integer scaleLength;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/DataBaseEnum.java b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/DataBaseEnum.java
new file mode 100644
index 0000000..fcfe8c4
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/DataBaseEnum.java
@@ -0,0 +1,106 @@
+package com.vci.ubcs.ddl.enums;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+public enum DataBaseEnum {
+	/**
+	 * mysql
+	 */
+	MYSQL("mysql", "MYSQL"),
+	/**
+	 * oracle
+	 */
+	ORACLE("oracle", "ORACLE"),
+	/**
+	 * postgresql
+	 */
+	POSTGRESQL("postgresql", "POSTGRESQL"),
+	/**
+	 * db2
+	 */
+	DB2("db2", "DB2"),
+	/**
+	 * sql_server
+	 */
+	SQL_SERVER("mssql", "SQL_SERVER"),
+	/**
+	 * dm
+	 */
+	DM("dm", "杈炬ⅵ"),
+	/**
+	 * oceanbase
+	 */
+	OCEAN_BASE("oceanbase", "闃块噷宸村反OceanBase"),
+	/**
+	 * sqllite
+	 */
+	SQLITE("sqlite", "SQLITE");
+	private String value;
+	private String text;
+	private DataBaseEnum (String value,String text){
+		this.value = value;
+		this.text = text;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+	public String getText() {
+		return text;
+	}
+
+	public void setText(String text) {
+		this.text = text;
+	}
+
+	public static String getValueByText(String text) {
+		DataBaseEnum[] var1 = values();
+		int var2 = var1.length;
+
+		for(int var3 = 0; var3 < var2; ++var3) {
+			DataBaseEnum wenum = var1[var3];
+			if (wenum.getText().equalsIgnoreCase(text)) {
+				return wenum.getValue();
+			}
+		}
+
+		return "";
+	}
+
+	public static String getTextByValue(String value) {
+		DataBaseEnum[] var1 = values();
+		int var2 = var1.length;
+
+		for(int var3 = 0; var3 < var2; ++var3) {
+			DataBaseEnum wenum = var1[var3];
+			if (wenum.getValue().equalsIgnoreCase(value)) {
+				return wenum.getText();
+			}
+		}
+
+		return "";
+	}
+
+	public static DataBaseEnum forValue(String value) {
+		DataBaseEnum[] var1 = values();
+		int var2 = var1.length;
+
+		for(int var3 = 0; var3 < var2; ++var3) {
+			DataBaseEnum wenum = var1[var3];
+			if (wenum.getValue().equalsIgnoreCase(value)) {
+				return wenum;
+			}
+		}
+
+		return ORACLE;
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/properties/DdlExportWordFieldProperties.java b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/properties/DdlExportWordFieldProperties.java
new file mode 100644
index 0000000..0a34ffb
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/properties/DdlExportWordFieldProperties.java
@@ -0,0 +1,66 @@
+package com.vci.ubcs.ddl.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "vci.ubcs.ddl.exportword")
+public class DdlExportWordFieldProperties {
+	/**
+	 * 琛ㄦ牸鐨勫悕绉�
+	 */
+	private String tableName = "tableInfo";
+
+	/**
+	 * 琛ㄦ牸鐨勫悕绉�
+	 */
+	private String title = "tableTitle";
+
+	/**
+	 * 琛ㄦ牸鐨勬灇涓惧弬鐓х敓鍛藉懆鏈熺瓑鎻忚堪
+	 */
+	private String areaDesc = "tableAreaDesc";
+
+	/**
+	 * 瀛楁琛ㄦ牸鐨勫悕绉帮紝闇�瑕佸搴旀ā鏉夸腑鐨勫煙瀛楁
+	 */
+	private String columnTableName = "columnInfo";
+
+	/**
+	 * 瀛楁琛ㄦ牸鐨勫簭鍙�
+	 */
+	private String columnIndex = "tableColumnIndex";
+
+	/**
+	 * 瀛楁鐨勮嫳鏂囧悕绉�
+	 */
+	private String columnId = "columnId";
+
+	/**
+	 *瀛楁鐨勬樉绀哄悕绉�
+	 */
+	private String columnName = "columnName";
+
+	/**
+	 * 瀛楁鐨勭被鍨�
+	 */
+	private String columnType = "columnType";
+
+	/**
+	 * 瀛楁鐨勭害鏉�
+	 */
+	private String columnArea = "columnArea";
+
+	/**
+	 * 瀛楁鐨勭壒娈婃弿杩�
+	 */
+	private String columnDesc = "columnDesc";
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/properties/DdlPropertise.java b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/properties/DdlPropertise.java
new file mode 100644
index 0000000..17c2289
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/properties/DdlPropertise.java
@@ -0,0 +1,40 @@
+package com.vci.ubcs.ddl.properties;
+
+import com.vci.ubcs.ddl.enums.DataBaseEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Description: 鏁版嵁搴撴搷浣滅浉鍏崇殑閰嶇疆
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Configuration
+@ConfigurationProperties(prefix = "vci.ubcs.ddl")
+@Data
+public class DdlPropertise {
+	/**
+	 * 鏁版嵁搴撶殑骞冲彴锛岄粯璁や负oracle
+	 */
+	@ApiModelProperty(value = "鏁版嵁搴撶殑绫诲瀷")
+	private String databasePlatform = DataBaseEnum.ORACLE.getValue();
+
+	/**
+	 * 鏄惁妫�鏌ユ暟鎹〃鏄惁缂哄皯
+	 */
+	private String checkTableExist;
+
+	/**
+	 * 涓存椂鏂囦欢澶�
+	 */
+	@ApiModelProperty(value = "涓存椂鏂囦欢澶�")
+	private String tempFolder;
+
+	/**
+	 * 榛樿zip鐨勫瓧绗﹂泦
+	 */
+	private String zipCharset = "GBK";
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/OmdBtmTypeCache.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/OmdBtmTypeCache.java
new file mode 100644
index 0000000..13600a0
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/OmdBtmTypeCache.java
@@ -0,0 +1,80 @@
+package com.vci.ubcs.omd.cache;
+
+import com.vci.ubcs.omd.feign.IOmdBtmTypeClient;
+import com.vci.ubcs.omd.vo.OmdBtmTypeVO;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.core.tool.utils.StringPool;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+public class OmdBtmTypeCache {
+
+	private static final String BTM_DETAIL = "btm:id";
+
+	private static final String BTM_REF = "btm:list";
+
+	private static final String BTM_TYPE_CACHE = "ubcs:btm";
+
+	private static final String BTM_IDS = "btm:ids";
+
+	private static IOmdBtmTypeClient btmTypeClient;
+
+	private static IOmdBtmTypeClient getBtmTypeClient() {
+		if (btmTypeClient == null) {
+			btmTypeClient = SpringUtil.getBean(IOmdBtmTypeClient.class);
+		}
+		return btmTypeClient;
+	}
+
+	/**
+	 * 鑾峰彇涓氬姟绫诲瀷璇︽儏淇℃伅
+	 *
+	 * @param oid 涓婚敭
+	 * @return 涓氬姟绫诲瀷璇︽儏淇℃伅
+	 */
+	public static OmdBtmTypeVO getDetail(String oid){
+		String keyPrefix = BTM_DETAIL.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(BTM_TYPE_CACHE, keyPrefix, oid, () -> {
+			R<OmdBtmTypeVO> result = getBtmTypeClient().getDetail(oid);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鏌ヨ瀵硅薄
+	 * @param ids 瀵硅薄鑻辨枃鍚嶇О 浣嗘槸涓嶈兘瓒呰繃1000
+	 * @return 涓氬姟瀵硅薄
+	 */
+	public static List<OmdBtmTypeVO> selectByIdCollection(List<String> ids) {
+		String  keyPrefix = BTM_IDS.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(BTM_TYPE_CACHE,keyPrefix,Func.toStr(ids), () -> {
+			R<List<OmdBtmTypeVO>> result = getBtmTypeClient().selectByIdCollection(ids);
+			return result.getData();
+		});
+	}
+
+
+	/**
+	 * 鎵归噺鏍规嵁涓婚敭鑾峰彇涓氬姟绫诲瀷
+	 * @param pkBtmTypeCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 */
+	public static List<OmdBtmTypeVO> listBtmTypeByOidCollection(Collection<String> pkBtmTypeCollection) {
+		String  keyPrefix = BTM_IDS.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(BTM_TYPE_CACHE,keyPrefix,Func.toStr(pkBtmTypeCollection.stream().map(s -> s.substring(0,5))),() ->{
+			R<List<OmdBtmTypeVO>> result = getBtmTypeClient().listBtmTypeByOidCollection(pkBtmTypeCollection);
+			return result.getData();
+		});
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/OmdBtmTypeConstant.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/OmdBtmTypeConstant.java
new file mode 100644
index 0000000..671028f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/OmdBtmTypeConstant.java
@@ -0,0 +1,140 @@
+package com.vci.ubcs.omd.constant;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/23
+ */
+public class OmdBtmTypeConstant {
+
+	/**
+	 * 灞炴�х殑涓氬姟绫诲瀷鍚嶇О
+	 */
+	public static final String OMD_ATTRIBUTE_BTM_TYPE = "attribute";
+
+	/**
+	 * 涓氬姟绫诲瀷瀵硅薄鐨� 涓氬姟绫诲瀷鍚嶇О
+	 */
+	public static final String OMD_BTMTYPE = "btmtype";
+
+	/**
+	 * 涓氬姟绫诲瀷鍖呭惈鐨勫睘鎬х殑   涓氬姟绫诲瀷鍚嶇О
+	 */
+	public static final String OMD_BTNTYPE_ATTRIBUTE_BTM_TYPE = "btmtypeAttribute";
+
+	/**
+	 * 鏋氫妇鐨勪笟鍔$被鍨嬪悕绉�
+	 */
+	public static final String OMD_ENUM_BTM_TYPE = "enum";
+
+	/**
+	 * 鏋氫妇椤圭殑涓氬姟绫诲瀷鍚嶇О
+	 */
+	public static final String OMD_ENUM_ITEM_BTM_TYPE = "enumitem";
+
+	/**
+	 * 绫绘敞閲婄殑涓氬姟绫诲瀷鍚嶇О
+	 */
+	public static final String OMD_CLASS_ANNOTATION_BTM_TYPE = "classannotation";
+
+	/**
+	 * 灞炴�ф敞閲婄殑涓氬姟绫诲瀷鍚嶇О
+	 */
+	public static final String OMD_FIELD_ANNOTATION_BTM_TYPE = "fieldannotation";
+
+	/**
+	 * 鐢熷懡鍛ㄦ湡鐨勪笟鍔$被鍨嬪悕绉�
+	 */
+	public static final String OMD_LIFE_CYCLE_BTM_TYPE = "lifecycle";
+
+	/**
+	 * 鐢熷懡鍛ㄦ湡浜嬩欢鐨勪笟鍔$被鍨嬪悕绉�
+	 */
+	public static final String OMD_LIFE_CYCLE_EVENT_BTM_TYPE = "lifecycleevent";
+
+	/**
+	 * 鐢熷懡鍛ㄦ湡杩炴帴绾跨殑涓氬姟绫诲瀷鍚嶇О
+	 */
+	public static final String OMD_LIFE_CYCLE_LINE_BTM_TYPE = "lifecycleline";
+
+	/**
+	 * 鐢熷懡鍛ㄦ湡杩炴帴绾跨殑浜嬩欢  鐨勪笟鍔$被鍨嬪悕绉�
+	 */
+	public static final String OMD_LIFE_CYCLE_LINE_EVENT_BTM_TYPE = "lifecyclelineevent";
+
+	/**
+	 * 閾炬帴绫诲瀷鐨勫睘鎬� 鐨勪笟鍔$被鍨嬪悕绉�
+	 */
+	public static final String OMD_LINK_TYPE_ATTRIBUTE_BTM_TYPE = "linktypeattribute";
+
+	/**
+	 * 閾炬帴绫诲瀷 鐨勪笟鍔$被鍨嬪悕绉�
+	 */
+	public static final String OMD_LINK_TYPE_BTM_TYPE = "linktype";
+
+	/**
+	 * 鏂规硶娉ㄩ噴 鐨勪笟鍔$被鍨嬪悕绉�
+	 */
+	public static final String OMD_METHOD_ANNOTATION_BTM_TYPE = "methodannotation";
+
+	/**
+	 * 淇敼灞炴�х殑 涓氬姟绫诲瀷鍚嶇О
+	 */
+	public static final String OMD_MODIFY_ATTRIBUTE_BTM_TYPE = "modifyattribute";
+
+	/**
+	 * 鍙傛暟娉ㄩ噴 鐨勪笟鍔$被鍨嬪悕绉�
+	 */
+	public static final String OMD_PARAM_ANNOTATION_BTM_TYPE = "paramannotation";
+
+	/**
+	 * 鐗堟湰瑙勫垯 鐨勪笟鍔$被鍨嬪悕绉�
+	 */
+	public static final String OMD_REVISION_RULE_BTM_TYPE = "revisionrule";
+
+	/**
+	 * 鐘舵�� 鐨勪笟鍔$被鍨嬪悕绉�
+	 */
+	public static final String OMD_STATUS_BTM_TYPE = "status";
+
+	/**
+	 * 缂栫爜瑙勫垯 鐨勪笟鍔$被鍨嬪悕绉�
+	 */
+	public static final String OMD_CODE_RULE_BTM_TYPE = "codeRule";
+
+	/**
+	 * 缂栫爜瑙勫垯鍏冪礌鐨勪笟鍔$被鍨嬪悕绉�
+	 */
+	public static final String OMD_CODE_RULE_ELEMENT_BTM_TYPE = "codeRuleElement";
+
+	/**
+	 * 缂栫爜瑙勫垯涓殑鏋氫妇鍊兼槧灏�
+	 */
+	public static final String OMD_CODE_ENUM_BTM_TYPE = "codeEnum";
+
+	/**
+	 * 缂栫爜鍏冪礌涓殑鐗规畩鏄犲皠
+	 */
+	public static final String OMD_CODE_ELEMENT_MAP_BTM_TYPE = "codeElementMap";
+
+	/**
+	 * 缂栫爜鐨勬柇鍙�
+	 */
+	public static final String OMD_CODE_BREAK_CODE_BTM_TYPE = "codeBreakCode";
+
+	/**
+	 * 缂栫爜鐨勬祦姘村彿
+	 */
+	public static final String OMD_CODE_SERIAL_NUMBER_BTM_TYPE = "codeSerialNumber";
+
+	/**
+	 * 浠g爜鐢熸垚鏂规
+	 */
+	public static final String OMD_CODE_GEN_SCHEMA_BTM_TYPE =  "codeGenSchema";
+
+	/**
+	 * 浠g爜鐢熸垚鏂规js閰嶇疆
+	 */
+	public static final String OMD_CODE_GEN_SCHEMA_JS ="codeGenSchemaJs" ;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/OmdCacheConstant.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/OmdCacheConstant.java
index 16a6bca..9f4613f 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/OmdCacheConstant.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/OmdCacheConstant.java
@@ -11,4 +11,12 @@
 	 * 鍏冩暟鎹�
 	 */
 	public static final String ATTR_CACHE = "ubcs:attr";
+	/**
+	 * 涓氬姟绫诲瀷
+	 */
+	public static final String BTM_CACHE = "ubcs:btmtype";
+	/**
+	 * 閾炬帴绫诲瀷
+	 */
+	public static final String LINK_CACHE = "ubcs:linktype";
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OmdBtmTypeDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OmdBtmTypeDTO.java
new file mode 100644
index 0000000..505ae53
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OmdBtmTypeDTO.java
@@ -0,0 +1,151 @@
+package com.vci.ubcs.omd.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 涓氬姟绫诲瀷娣诲姞鎴栬�呬慨鏀规椂鐨勬暟鎹紶杈撳璞�
+ * @author weidy
+ * @date 2019/10/14 16:43
+ */
+@Data
+public class OmdBtmTypeDTO implements java.io.Serializable{
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 2009350578651813260L;
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 涓氬姟绫诲瀷鑻辨枃鍚嶇О
+     */
+    private String id;
+
+    /**
+     * 涓氬姟绫诲瀷涓枃鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鏁版嵁搴撹〃鐨勫悕绉�
+     */
+    private String tableName;
+
+    /**
+     * 鎻忚堪
+     */
+    private String description;
+
+
+    /**
+     * 鐗堟湰瑙勫垯鐨勭紪鍙�
+     */
+    private String revisionRuleId;
+
+    /**
+     * 鐗堟湰瑙勫垯鐨勫悕绉�
+     */
+    private String revisionRuleName;
+
+    /**
+     * 鍒嗛殧绗�
+     */
+    private String revisionSep;
+
+    /**
+     * 鏄惁鎵嬪姩杈撳叆鐗堟湰
+     */
+    private boolean inputRevisionFlag;
+
+    /**
+     * 鏄惁鎶借薄鍖�
+     */
+    private boolean abstractFlag;
+
+    /**
+     * 鏄惁鎺у埗鐗堟湰
+     */
+    private boolean revisionFlag;
+
+    /**
+     * 鏄惁鎺у埗鐢熷懡鍛ㄦ湡
+     */
+    private boolean lifeCycleFlag;
+
+    /**
+     * 鏄惁鎺у埗瀵嗙骇
+     */
+    private boolean secretFlag;
+
+
+    /**
+     * 瀹炰緥鍖栫被
+     */
+    private String implClass;
+
+    /**
+     * C#
+     */
+    private String shape;
+
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鐨勮嫳鏂囧悕绉�
+     */
+    private String lifeCycleId;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鐨勪腑鏂囧悕绉�
+     */
+    private String lifeCycleName;
+
+    /**
+     * 鐗堟瑙勫垯
+     */
+    private String versionRule;
+
+    /**
+     * 澶囩敤鐢熷懡鍛ㄦ湡鑻辨枃鍚嶇О
+     */
+    private String subLifeCycleId;
+
+    /**
+     * 澶囩敤鐢熷懡鍛ㄦ湡涓枃鍚嶇О
+     */
+    private String subLifeCycleName;
+
+    /**
+     * 鏄惁涓鸿鍥�
+     */
+    private boolean viewFlag;
+
+    /**
+     * 瑙嗗浘鍒涘缓鐨剆ql璇彞
+     */
+    private String viewCreateSql;
+
+    /**
+     * 绫荤殑鍏ㄨ矾寰�
+     */
+    private String classFullName;
+
+    /**
+     * 娣诲姞鎴栬�呯Щ闄ょ殑灞炴�т俊鎭�
+     */
+    private List<OmdBtmTypeLinkAttributesDTO> attributesDTOList;
+
+    /**
+     * 鏃堕棿鎴筹紝鐢ㄤ簬鏍¢獙鏄惁鏈�鏂版暟鎹�
+     */
+    private Date ts;
+
+	/**
+	 * 涓氬姟绫诲瀷鎵�灞為鍩�
+	 */
+	private String domain;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OmdBtmTypeLinkAttributesDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OmdBtmTypeLinkAttributesDTO.java
new file mode 100644
index 0000000..32e04ea
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OmdBtmTypeLinkAttributesDTO.java
@@ -0,0 +1,98 @@
+package com.vci.ubcs.omd.dto;
+
+import lombok.Data;
+
+/**
+ * 寰�涓氬姟绫诲瀷涓坊鍔�/绉婚櫎灞炴�х殑鏁版嵁浼犺緭瀵硅薄
+ * @author weidy
+ * @date 2019/10/14 16:17
+ */
+@Data
+public class OmdBtmTypeLinkAttributesDTO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 7635248565930948807L;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 灞炴�х殑瀛楁鍚嶇О
+     */
+    private String id;
+
+    /**
+     * 灞炴�х殑涓枃鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 灞炴�х殑闀垮害
+     */
+    private Integer attributeLength;
+
+    /**
+     * 鏄惁鍙互涓虹┖
+     */
+    private boolean nullableFlag;
+
+    /**
+     * 榛樿鍊�
+     */
+    private String defaultValue;
+
+    /**
+     * 灏忔暟绮惧害浣嶆暟
+     */
+    private Integer precisionLength;
+
+    /**
+     * 鍒诲害
+     */
+    private Integer scaleLength;
+
+    /**
+     * 鍙栧�艰寖鍥�
+     */
+    private String range;
+
+    /**
+     * 灞炴�у湪鏈笟鍔$被鍨嬩腑鐨勬弿杩�
+     */
+    private String description;
+
+    /**
+     * 鏁版嵁绫诲瀷
+     */
+    private String attrDataType;
+
+    /**
+     * 鍙傜収涓氬姟绫诲瀷
+     */
+    private String referBtmTypeId;
+
+    /**
+     * 鍙傜収涓氬姟绫诲瀷鍚嶇О
+     */
+    private String referBtmTypeName;
+
+    /**
+     * 鏋氫妇缂栧彿
+     */
+    private String enumId;
+
+    /**
+     * 鏋氫妇鍚嶇О
+     */
+    private String enumName;
+
+    /**
+     * 鏄惁涓哄垹闄ゅ睘鎬�
+     */
+    private boolean removeAttribute;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsBtmTypeExportDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsBtmTypeExportDTO.java
new file mode 100644
index 0000000..1550830
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsBtmTypeExportDTO.java
@@ -0,0 +1,55 @@
+package com.vci.ubcs.omd.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 瀵煎叆瀵煎嚭鐨勬暟鎹紶杈撳璞�
+ * 鍖呮嫭鏋氫妇锛岀姸鎬侊紝鐢熷懡鍛ㄦ湡锛岀増鏈鍒欙紝灞炴�э紝涓氬姟绫诲瀷锛岄摼鎺ョ被鍨嬬瓑
+ * @author weidy
+ * @date 2019/10/14 17:09
+ */
+@Data
+public class OsBtmTypeExportDTO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = -5279288274756092398L;
+    /**
+     * 鐘舵�佹暟鎹紶杈撳璞�
+     */
+    private List<OsStatusDTO> statusDTOList;
+
+    /**
+     * 鐗堟湰瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     */
+    private List<OsRevisionRuleDTO> revisionRuleDTOList;
+
+    /**
+     * 鏋氫妇鏁版嵁浼犺緭瀵硅薄
+     */
+    private List<OsEnumDTO> enumDTOList;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鏁版嵁浼犺緭瀵硅薄
+     */
+    private List<OsLifeCycleDTO> lifeCycleDTOList;
+
+    /**
+     * 灞炴�ф暟鎹紶杈撳璞�
+     */
+    private List<OmdAttributeDTO> attributeDTOList;
+
+    /**
+     * 涓氬姟绫诲瀷鏁版嵁浼犺緭瀵硅薄
+     */
+    private List<OmdBtmTypeDTO> btmTypeDTOList;
+
+    /**
+     * 閾炬帴绫诲瀷鏁版嵁浼犺緭瀵硅薄
+     */
+    private List<OsLinkTypeDTO> linkTypeDTOList;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsEnumDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsEnumDTO.java
new file mode 100644
index 0000000..87dc37e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsEnumDTO.java
@@ -0,0 +1,163 @@
+package com.vci.ubcs.omd.dto;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 鏋氫妇鏁版嵁浼犺緭瀵硅薄
+ * @author weidy
+ * @date 2019/10/14 17:25
+ */
+public class OsEnumDTO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 814342725285373312L;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 灞炴�ц嫳鏂囧悕绉�
+     */
+    private String id;
+
+    /**
+     * 灞炴�т腑鏂囧悕绉�
+     */
+    private String name;
+
+    /**
+     * 鎻忚堪
+     */
+    private String description;
+
+    /**
+     * 鏋氫妇鍊肩被鍨�
+     */
+    private String enumValueDataType;
+
+    /**
+     * 闀垮害
+     */
+    private Integer length;
+
+    /**
+     * 鏃堕棿鎴筹紝鏍煎紡鏄痽yyy-MM-dd HH:mm:ss.SSS
+     */
+    private Date ts;
+
+    /**
+     * 绫荤殑鍏ㄨ矾寰�
+     */
+    private String classFullName;
+
+    /**
+     * 鏋氫妇椤规槧灏勫��
+     */
+    private Map<String,String> itemMaps;
+
+    /**
+     * 鏋氫妇椤圭殑涓婚敭鏄犲皠锛宬ey鏄富閿紝value鏄灇涓鹃」鐨勮嫳鏂囧悕绉�
+     */
+    private Map<String,String> itemOidMaps;
+
+    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 getEnumValueDataType() {
+        return enumValueDataType;
+    }
+
+    public void setEnumValueDataType(String enumValueDataType) {
+        this.enumValueDataType = enumValueDataType;
+    }
+
+    public Integer getLength() {
+        return length;
+    }
+
+    public void setLength(Integer length) {
+        this.length = length;
+    }
+
+    public Date getTs() {
+        return ts;
+    }
+
+    public void setTs(Date ts) {
+        this.ts = ts;
+    }
+
+    public Map<String, String> getItemMaps() {
+        return itemMaps;
+    }
+
+    public void setItemMaps(Map<String, String> itemMaps) {
+        this.itemMaps = itemMaps;
+    }
+
+    public Map<String, String> getItemOidMaps() {
+        return itemOidMaps;
+    }
+
+    public void setItemOidMaps(Map<String, String> itemOidMaps) {
+        this.itemOidMaps = itemOidMaps;
+    }
+
+    public String getClassFullName() {
+        return classFullName;
+    }
+
+    public void setClassFullName(String classFullName) {
+        this.classFullName = classFullName;
+    }
+
+    @Override
+    public String toString() {
+        return "OsEnumDTO{" +
+                "oid='" + oid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", description='" + description + '\'' +
+                ", enumValueDataType='" + enumValueDataType + '\'' +
+                ", length=" + length +
+                ", ts=" + ts +
+                ", classFullName='" + classFullName + '\'' +
+                ", itemMaps=" + itemMaps +
+                ", itemOidMaps=" + itemOidMaps +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsLifeCycleDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsLifeCycleDTO.java
new file mode 100644
index 0000000..b581509
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsLifeCycleDTO.java
@@ -0,0 +1,66 @@
+package com.vci.ubcs.omd.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鐢熷懡鍛ㄦ湡鏁版嵁浼犺緭瀵硅薄
+ * @author weidy
+ * @date 2019/10/14 17:28
+ */
+@Data
+public class OsLifeCycleDTO implements java.io.Serializable {
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = -2896532706167604421L;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡缂栧彿
+     */
+    private String id;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鎻忚堪
+     */
+    private String description;
+
+    /**
+     * 璧峰鐘舵��
+     */
+    private String startStatus;
+
+    /**
+     * 璧峰鐘舵�佸悕绉�
+     */
+    private String startStatusName;
+
+    /**
+     * 鍦ㄦ壂鎻忕殑鏃跺�欒褰曡繖涓敓鍛藉懆鏈熷搴旂殑绫诲叏璺緞
+     */
+    private String classFullName;
+
+    /**
+     * 鏃堕棿鎴筹紝鏍煎紡鏄痽yyy-MM-dd HH:mm:ss.SSS
+     */
+    private Date ts;
+
+    /**
+     * 鍖呭惈鐨勮繛鎺ョ嚎
+     */
+    private List<OsLifeCycleLineDTO> lineDTOList;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsLifeCycleLineDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsLifeCycleLineDTO.java
new file mode 100644
index 0000000..b40fac1
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsLifeCycleLineDTO.java
@@ -0,0 +1,82 @@
+package com.vci.ubcs.omd.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鐢熷懡鍛ㄦ湡杩炴帴绾挎暟鎹紶杈撳璞�
+ * @author weidy
+ * @date 2019/10/14 17:31
+ */
+@Data
+public class OsLifeCycleLineDTO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = -7556637895235122903L;
+
+    /**
+     * 鎵�灞炵敓鍛藉懆鏈�
+     */
+    private String pkLifeCycle;
+
+    /**
+     * 婧愮姸鎬佷富閿�
+     */
+    private String sourceLifeStatusOid;
+
+    /**
+     * 婧愮姸鎬佷唬鍙�
+     */
+    private String sourceLifeStatus;
+
+    /**
+     * 婧愮姸鎬佸悕绉�
+     */
+    private String sourceLifeStatusName;
+
+    /**
+     * 鐩爣鐘舵�佷富閿�
+     */
+    private String targetLifeStatusOid;
+
+    /**
+     * 鐩爣鐘舵�佷唬鍙�
+     */
+    private String targetLifeStatus;
+
+    /**
+     * 鐩爣鐘舵�佸悕绉�
+     */
+    private String targetLifeStatusName;
+
+    /**
+     * 杩炴帴绾垮悕绉�
+     */
+    private String name;
+
+    /**
+     * 杩炴帴绾夸綅缃俊鎭�
+     */
+    private String transLineSiteInfo;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 鏃堕棿鎴筹紝鏍煎紡鏄痽yyy-MM-dd HH:mm:ss.SSS
+     */
+    private Date ts;
+
+    /**
+     * 鍖呭惈鐨勪簨浠�
+     */
+    private List<OsLifeCycleLineEventDTO> eventDTOList;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsLifeCycleLineEventDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsLifeCycleLineEventDTO.java
new file mode 100644
index 0000000..53cf623
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsLifeCycleLineEventDTO.java
@@ -0,0 +1,44 @@
+package com.vci.ubcs.omd.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 鐢熷懡鍛ㄦ湡浜嬩欢鏁版嵁浼犺緭瀵硅薄
+ * @author weidy
+ * @date 2019/10/14 17:47
+ */
+@Data
+public class OsLifeCycleLineEventDTO implements java.io.Serializable {
+
+	/**
+	 * 绂佹淇敼杩欎釜鍊�
+	 */
+	private static final long serialVersionUID = 6860210157516359420L;
+	/**
+	 * 涓婚敭
+	 */
+	private String oid;
+
+	/**
+	 * 鎵�灞炵敓鍛藉懆鏈熻繛鎺ョ嚎涓婚敭
+	 */
+	private String pkLifeCycleLine;
+
+	/**
+	 * 浜嬩欢鐨勫叏璺緞
+	 */
+	private String eventFullName;
+
+	/**
+	 * 浜嬩欢鐨勫悕绉�
+	 */
+	private String eventShowName;
+
+	/**
+	 * 鏃堕棿鎴筹紝鏍煎紡鏄痽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/dto/OsLinkTypeDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsLinkTypeDTO.java
new file mode 100644
index 0000000..ddc9491
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsLinkTypeDTO.java
@@ -0,0 +1,86 @@
+package com.vci.ubcs.omd.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 閾炬帴绫诲瀷鐨勬暟鎹紶杈撳璞�
+ * @author weidy
+ * @date 2019/10/14 17:53
+ */
+@Data
+public class OsLinkTypeDTO implements java.io.Serializable {
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 7723683851305095408L;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 閾炬帴绫诲瀷鑻辨枃鍚嶇О
+     */
+    private String id;
+
+    /**
+     * 閾炬帴绫诲瀷涓枃鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鎻忚堪
+     */
+    private String description;
+
+    /**
+     *
+     */
+    private String shape;
+
+    /**
+     * 瀹炵幇绫�
+     */
+    private String implClass;
+
+    /**
+     * from绔笟鍔$被鍨�
+     */
+    private String fromBtmType;
+
+    /**
+     * from绔笟鍔$被鍨嬪悕绉�
+     */
+    private String fromBtmTypeName;
+
+    /**
+     * to绔笟鍔$被鍨�
+     */
+    private String toBtmType;
+
+    /**
+     * to绔笟鍔$被鍨嬪悕绉�
+     */
+    private String toBtmTypeName;
+
+    /**
+     * 鏃堕棿鎴筹紝鏍煎紡鏄痽yyy-MM-dd HH:mm:ss.SSS
+     */
+    private Date ts;
+
+    /**
+     * 绫绘墍灞炵殑鍏ㄨ矾寰�
+     */
+    private String classFullName;
+
+    /**
+     * 鍖呭惈鐨勫睘鎬ф樉绀哄璞�
+     */
+    private List<OmdBtmTypeLinkAttributesDTO> attributesDTOList;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsRevisionRuleDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsRevisionRuleDTO.java
new file mode 100644
index 0000000..a22873a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsRevisionRuleDTO.java
@@ -0,0 +1,69 @@
+package com.vci.ubcs.omd.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 鐗堟湰瑙勫垯鐨勬暟鎹紶杈撳璞�
+ * @author weidy
+ * @date 2019/10/14 17:22
+ */
+@Data
+public class OsRevisionRuleDTO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = -75866403471953492L;
+
+    /**
+     * 涓婚敭
+     */
+    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;
+
+    /**
+     * 鏃堕棿鎴筹紝鏍煎紡鏄痽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/dto/OsStatusDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsStatusDTO.java
new file mode 100644
index 0000000..cf7a782
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OsStatusDTO.java
@@ -0,0 +1,43 @@
+package com.vci.ubcs.omd.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 鐘舵�佹暟鎹紶杈撳璞�
+ * @author weidy
+ * @date 2019/10/14 17:15
+ */
+@Data
+public class OsStatusDTO implements java.io.Serializable{
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 6832696922597736395L;
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 鐘舵�佽嫳鏂囧悕绉�
+     */
+    private String id;
+
+    /**
+     * 鐘舵�佷腑鏂囧悕绉�
+     */
+    private String name;
+
+    /**
+     * 鎻忚堪
+     */
+    private String description;
+
+    /**
+     * 鏃堕棿鎴筹紝鐢ㄤ簬鏍¢獙鏄惁鏈�鏂版暟鎹�
+     */
+    private Date ts;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdAttribute.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdAttribute.java
index bcb3582..2f5ac60 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdAttribute.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdAttribute.java
@@ -13,6 +13,7 @@
 import org.springframework.data.annotation.Transient;
 
 import javax.validation.constraints.NotNull;
+import java.util.Date;
 
 
 /**
@@ -163,6 +164,13 @@
 	 */
 	@ApiModelProperty("榛樿鍊�")
 	private String defaultValue;
+
+	/**
+	 * 鏃堕棿鎴�
+	 */
+	@ApiModelProperty(value = "鏃堕棿鎴�")
+	private Date ts;
+
 	/**
 	 * 姣旇緝鏂瑰紡
 	 */
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdBtmType.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdBtmType.java
new file mode 100644
index 0000000..9dce101
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdBtmType.java
@@ -0,0 +1,176 @@
+package com.vci.ubcs.omd.entity;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ *
+ * 涓氬姟绫诲瀷
+ * @author weidy
+ * @date 2019/10/11 3:12 PM
+ */
+@Data
+@TableName("pl_omd_btm_type")
+@ApiModel(value = "涓氬姟绫诲瀷", description = "涓氬姟绫诲瀷")
+public class OmdBtmType implements java.io.Serializable{
+
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 3004863827430218501L;
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 涓氬姟绫诲瀷鑻辨枃鍚嶇О
+     */
+    private String id;
+
+    /**
+     * 涓氬姟绫诲瀷涓枃鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鏁版嵁搴撹〃鐨勫悕绉�
+     */
+    private String tableName;
+
+    /**
+     * 鎻忚堪
+     */
+    private String description;
+
+
+    /**
+     * 鐗堟湰瑙勫垯鐨勭紪鍙�
+     */
+    private String revisionRuleId;
+
+    /**
+     * 鐗堟湰瑙勫垯鐨勫悕绉�
+     */
+    private String revisionRuleName;
+
+    /**
+     * 鍒嗛殧绗�
+     */
+    private String revisionSep;
+
+    /**
+     * 鏄惁鎵嬪姩杈撳叆鐗堟湰
+     */
+    private String inputRevisionFlag;
+
+    /**
+     * 鏄惁鎺у埗瀵嗙骇
+     */
+    private String secretFlag;
+
+    /**
+     * 鏄惁鎶借薄鍖�
+     */
+    private String abstractFlag;
+
+    /**
+     * 瀹炰緥鍖栫被
+     */
+    private String implClass;
+
+    /**
+     * C#
+     */
+    private String shape;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鐨勮嫳鏂囧悕绉�
+     */
+    private String lifeCycleId;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鐨勪腑鏂囧悕绉�
+     */
+    private String lifeCycleName;
+
+    /**
+     * 鐗堟瑙勫垯
+     */
+    private String versionRule;
+
+    /**
+     * 澶囩敤鐢熷懡鍛ㄦ湡鑻辨枃鍚嶇О
+     */
+    private String subLifeCycleId;
+
+    /**
+     * 澶囩敤鐢熷懡鍛ㄦ湡涓枃鍚嶇О
+     */
+    private String subLifeCycleName;
+
+    /**
+     * 鏄惁涓鸿鍥�
+     */
+    private String viewFlag;
+
+    /**
+     * 瑙嗗浘鍒涘缓鐨剆ql璇彞
+     */
+    private String viewCreateSql;
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    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;
+
+	/**
+	 * 涓氬姟绫诲瀷鎵�灞為鍩�
+	 */
+	private String domain;
+
+	/**
+	 * 涓�鑷存�ф爣璇�
+	 */
+	private String consistence;
+
+	/**
+	 * 鏁版嵁搴撹〃涓庝笟鍔$被鍨嬪悓姝ュけ璐ユ鏁�
+	private Integer syncFailTimes;
+	 */
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdBtmTypeAttribute.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdBtmTypeAttribute.java
new file mode 100644
index 0000000..9cd8fe0
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdBtmTypeAttribute.java
@@ -0,0 +1,140 @@
+package com.vci.ubcs.omd.entity;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ *
+ * 涓氬姟绫诲瀷鍖呭惈鐨勫睘鎬�
+ * @author weidy
+ * @date 2019/10/11 3:21 PM
+ */
+@Data
+@TableName("pl_omd_btm_type_attr")
+@ApiModel(value = "涓氬姟绫诲瀷鍖呭惈鐨勫睘鎬�", description = "涓氬姟绫诲瀷鍖呭惈鐨勫睘鎬�")
+public class OmdBtmTypeAttribute implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = -4431848943790920077L;
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 鎵�灞炰笟鍔$被鍨�
+     */
+    private String pkBtmType;
+
+    /**
+     * 灞炴�х殑瀛楁鍚嶇О
+     */
+    private String id;
+
+    /**
+     * 灞炴�х殑涓枃鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 灞炴�х殑闀垮害
+     */
+    private Integer attributeLength;
+
+    /**
+     * 灞炴�у湪鏈笟鍔$被鍨嬩腑鐨勬弿杩�
+     */
+    private String description;
+
+    /**
+     * 鏁版嵁绫诲瀷
+     */
+    private String attrDataType;
+
+    /**
+     * 鏄惁鍙互涓虹┖
+     */
+    private String nullableFlag;
+
+    /**
+     * 榛樿鍊�
+     */
+    private String defaultValue;
+
+    /**
+     * 灏忔暟绮惧害浣嶆暟
+     */
+    private Integer precisionLength;
+
+    /**
+     * 鍒诲害
+     */
+    private Integer scaleLength;
+
+    /**
+     * 鍙栧�艰寖鍥�
+     */
+    private String range;
+
+    /**
+     * 鍙傜収涓氬姟绫诲瀷
+     */
+    private String referBtmTypeId;
+
+    /**
+     * 鍙傜収涓氬姟绫诲瀷鍚嶇О
+     */
+    private String referBtmTypeName;
+
+    /**
+     * 鏋氫妇缂栧彿
+     */
+    private String enumId;
+
+    /**
+     * 鏋氫妇鍚嶇О
+     */
+    private String enumName;
+
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    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/OsLifeCycleEventDO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLifeCycleEventDO.java
new file mode 100644
index 0000000..e8f0da6
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLifeCycleEventDO.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.util.Date;
+
+/**
+ * 鐢熷懡鍛ㄦ湡浜嬩欢闆嗗悎
+ * 涓嶆槸鏌愪釜鎸囧畾鐨勭敓鍛藉懆鏈熶腑锛屾槸鎵�鏈夌殑浜嬩欢闆嗗悎锛屾柟渚垮湪閰嶇疆鐨勬椂鍊欓�夋嫨
+ * @author weidy
+ * @date 2019/10/17 9:32
+ */
+@Data
+@TableName("pl_omd_lift_cycle_event")
+@ApiModel(value = "鐢熷懡鍛ㄦ湡浜嬩欢闆嗗悎", description = "鐢熷懡鍛ㄦ湡浜嬩欢闆嗗悎")
+public class OsLifeCycleEventDO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 6950469551222671511L;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 浜嬩欢鐨勫叏璺緞
+     */
+    private String eventFullName;
+
+    /**
+     * 浜嬩欢鐨勫悕绉�
+     */
+    private String eventShowName;
+
+    /**
+     * 浜嬩欢鎻忚堪
+     */
+    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/OsLifeCycleLineDO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLifeCycleLineDO.java
new file mode 100644
index 0000000..b134092
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLifeCycleLineDO.java
@@ -0,0 +1,101 @@
+package com.vci.ubcs.omd.entity;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ *
+ * 鐢熷懡鍛ㄦ湡鐘舵�佽繛鎺ョ嚎
+ * @author weidy
+ * @date 2019/10/10 6:56 PM
+ */
+@Data
+@TableName("pl_omd_lift_cycle_line")
+@ApiModel(value = "鐢熷懡鍛ㄦ湡鐘舵�佽繛鎺ョ嚎", description = "鐢熷懡鍛ㄦ湡鐘舵�佽繛鎺ョ嚎")
+public class OsLifeCycleLineDO implements java.io.Serializable {
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 1220998076767353574L;
+
+    /**
+     * 鎵�灞炵敓鍛藉懆鏈�
+     */
+    private String pkLifeCycle;
+
+    /**
+     * 婧愮姸鎬佷唬鍙�
+     */
+    private String sourceLifeStatus;
+
+    /**
+     * 婧愮姸鎬佸悕绉�
+     */
+    private String sourceLifeStatusName;
+
+    /**
+     * 鐩爣鐘舵�佷唬鍙�
+     */
+    private String targetLifeStatus;
+
+    /**
+     * 鐩爣鐘舵�佸悕绉�
+     */
+    private String targetLifeStatusName;
+
+    /**
+     * 杩炴帴绾垮悕绉�
+     */
+    private String name;
+
+    /**
+     * 杩炴帴绾夸綅缃俊鎭�
+     */
+    private String transLineSiteInfo;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    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/OsLifeCycleLineEventDO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLifeCycleLineEventDO.java
new file mode 100644
index 0000000..7d9a88a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLifeCycleLineEventDO.java
@@ -0,0 +1,86 @@
+package com.vci.ubcs.omd.entity;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ *
+ * 鐢熷懡鍛ㄦ湡杩炴帴绾夸簨浠�
+ * @author weidy
+ * @date 2019/10/11 2:49 PM
+ */
+@Data
+@TableName("pl_omd_lift_cycle_line_event")
+@ApiModel(value = "鐢熷懡鍛ㄦ湡鐘舵�佽繛鎺ョ嚎", description = "鐢熷懡鍛ㄦ湡鐘舵�佽繛鎺ョ嚎")
+public class OsLifeCycleLineEventDO  implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = -842247029575668650L;
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 鎵�灞炵敓鍛藉懆鏈熻繛鎺ョ嚎涓婚敭
+     */
+    private String pkLifeCycleLine;
+
+    /**
+     * 浜嬩欢鐨勫叏璺緞
+     */
+    private String eventFullName;
+
+    /**
+     * 浜嬩欢鐨勫悕绉�
+     */
+    private String eventShowName;
+
+    /**
+     * 鎺掑簭鍙�
+     */
+    private Integer orderNum;
+
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    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/OsLifeCycleRuleDO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLifeCycleRuleDO.java
new file mode 100644
index 0000000..2d97cc0
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLifeCycleRuleDO.java
@@ -0,0 +1,95 @@
+package com.vci.ubcs.omd.entity;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ *
+ * 鐢熷懡鍛ㄦ湡瑙勫垯
+ * @author weidy
+ * @date 2019/10/10 5:59 PM
+ */
+@Data
+@TableName("pl_omd_lift_cycle_rule")
+@ApiModel(value = "鐢熷懡鍛ㄦ湡瑙勫垯", description = "鐢熷懡鍛ㄦ湡瑙勫垯")
+public class OsLifeCycleRuleDO implements java.io.Serializable {
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 1476717511843047292L;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡缂栧彿
+     */
+    private String id;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鎻忚堪
+     */
+    private String description;
+
+    /**
+     * 璧峰鐘舵��
+     */
+    private String startStatus;
+
+    /**
+     * 璧峰鐘舵�佸悕绉�
+     */
+    private String startStatusName;
+
+    /**
+     * 绫荤殑鍏ㄨ矾寰�
+     */
+    private String classFullName;
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    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/OsLinkTypeAttributeDO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLinkTypeAttributeDO.java
new file mode 100644
index 0000000..9fe9dfb
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLinkTypeAttributeDO.java
@@ -0,0 +1,141 @@
+package com.vci.ubcs.omd.entity;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ *
+ * 閾炬帴绫诲瀷鍖呭惈鐨勫睘鎬�
+ * @author weidy
+ * @date 2019/10/11 3:21 PM
+ */
+@Data
+@TableName("pl_omd_link_type_attr")
+@ApiModel(value = "閾炬帴绫诲瀷鍖呭惈鐨勫睘鎬�", description = "閾炬帴绫诲瀷鍖呭惈鐨勫睘鎬�")
+public class OsLinkTypeAttributeDO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = -2590096528345891496L;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 鎵�灞炰笟鍔$被鍨�
+     */
+    private String pkLinkType;
+
+
+    /**
+     * 灞炴�х殑瀛楁鍚嶇О
+     */
+    private String id;
+
+    /**
+     * 灞炴�х殑涓枃鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 灞炴�х殑闀垮害
+     */
+    private Integer attributeLength;
+
+    /**
+     * 灞炴�у湪鏈笟鍔$被鍨嬩腑鐨勬弿杩�
+     */
+    private String description;
+
+    /**
+     * 鏁版嵁绫诲瀷
+     */
+    private String attrDataType;
+
+    /**
+     * 鏄惁鍙互涓虹┖
+     */
+    private String nullableFlag;
+
+    /**
+     * 榛樿鍊�
+     */
+    private String defaultValue;
+
+    /**
+     * 灏忔暟绮惧害浣嶆暟
+     */
+    private Integer precisionLength;
+
+    /**
+     * 鍒诲害
+     */
+    private Integer scaleLength;
+
+    /**
+     * 鍙栧�艰寖鍥�
+     */
+    private String range;
+
+    /**
+     * 鍙傜収涓氬姟绫诲瀷
+     */
+    private String referBtmTypeId;
+
+    /**
+     * 鍙傜収涓氬姟绫诲瀷鍚嶇О
+     */
+    private String referBtmTypeName;
+
+    /**
+     * 鏋氫妇缂栧彿
+     */
+    private String enumId;
+
+    /**
+     * 鏋氫妇鍚嶇О
+     */
+    private String enumName;
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    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/OsLinkTypeDO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLinkTypeDO.java
new file mode 100644
index 0000000..7459787
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsLinkTypeDO.java
@@ -0,0 +1,111 @@
+package com.vci.ubcs.omd.entity;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 閾炬帴绫诲瀷
+ * @author weidy
+ * @date 2019/10/11 3:41 PM
+ */
+@Data
+@TableName("pl_omd_link_type")
+@ApiModel(value = "閾炬帴绫诲瀷", description = "閾炬帴绫诲瀷")
+public class OsLinkTypeDO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = -2973361863656603224L;
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 閾炬帴绫诲瀷鑻辨枃鍚嶇О
+     */
+    private String id;
+
+    /**
+     * 閾炬帴绫诲瀷涓枃鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鎻忚堪
+     */
+    private String description;
+
+    /**
+     * .net
+     */
+    private String shape;
+
+    /**
+     * 瀹炵幇绫�
+     */
+    private String implClass;
+
+    /**
+     * from绔笟鍔$被鍨�
+     */
+    private String fromBtmType;
+
+    /**
+     * from绔笟鍔$被鍨嬪悕绉�
+     */
+    private String fromBtmTypeName;
+
+
+    /**
+     * to绔笟鍔$被鍨�
+     */
+    private String toBtmType;
+
+    /**
+     * to绔笟鍔$被鍨嬪悕绉�
+     */
+    private String toBtmTypeName;
+
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    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/OsModifyAttributeInfoDO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsModifyAttributeInfoDO.java
new file mode 100644
index 0000000..7a88209
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OsModifyAttributeInfoDO.java
@@ -0,0 +1,150 @@
+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;
+
+/**
+ * 闇�瑕佷慨鏀规暟鎹簱琛ㄤ腑瀛楁鐨勪俊鎭�
+ *
+ * @author weidy
+ * @date 2019/10/18 11:48
+ */
+@Data
+@TableName("pl_omd_modify_attr_info")
+@ApiModel(value = "闇�瑕佷慨鏀规暟鎹簱琛ㄤ腑瀛楁鐨勪俊鎭�", description = "闇�瑕佷慨鏀规暟鎹簱琛ㄤ腑瀛楁鐨勪俊鎭�")
+public class OsModifyAttributeInfoDO implements Serializable {
+
+	/**
+	 * 绂佹淇敼杩欎釜鍊�
+	 */
+	private static final long serialVersionUID = 2996604298980606103L;
+	/**
+	 * 涓氬姟绫诲瀷缂栧彿
+	 */
+	private String id;
+
+	/**
+	 * 涓氬姟绫诲瀷鍚嶇О
+	 */
+	private String name;
+
+	/**
+	 * 鏄惁涓洪摼鎺ョ被鍨�
+	 */
+	private String linkTypeFlag;
+
+	/**
+	 * 琛ㄦ牸鍚嶇О
+	 */
+	private String tableName;
+
+	/**
+	 * 鏄惁鍒涘缓琛ㄦ牸
+	 */
+	private String createTableFlag;
+
+	/**
+	 * 娣诲姞鐨勫睘鎬�
+	 */
+	private String addAttributes;
+
+	/**
+	 * 淇敼鐨勫睘鎬�
+	 */
+	private String modifyAttributes;
+
+	/**
+	 * 鍒犻櫎鐨勫睘鎬�
+	 */
+	private String deleteAttibutes;
+
+	/**
+	 * 灞炴�т慨鏀瑰墠鐨勫唴瀹�
+	 */
+	private String beforeModifyAttributes;
+
+	/**
+	 * 璋冩暣鍘熷洜
+	 */
+	private String modifyColumnReason;
+
+	/**
+	 * 鐢宠璋冩暣鐢ㄦ埛
+	 */
+	private String orderModifyUserName;
+
+	/**
+	 * 鐢宠璋冩暣鏃堕棿
+	 */
+	private Date orderModifyDate;
+
+	/**
+	 * 鏄惁鎵ц瀹屾垚
+	 */
+	private String handleFinishFlag;
+
+	/**
+	 * 鎵ц浜�
+	 */
+	private String handleUserName;
+
+	/**
+	 * 鎵ц鏃堕棿
+	 */
+	private Date handleDate;
+
+	/**
+	 * 鎵ц缁撴灉
+	 */
+	private String handleResult;
+
+	/**
+	 * 涓婚敭
+	 */
+	private String oid;
+
+	/**
+	 * 鎻忚堪
+	 */
+	private String description;
+
+	/**
+	 * 涓氬姟绫诲瀷鍚嶇О
+	 */
+	private String btmname;
+	/**
+	 * 鍒涘缓浜�
+	 */
+	private String creator;
+
+	/**
+	 * 鍒涘缓鏃堕棿
+	 */
+	private Date createTime;
+
+	private String lastModifier;
+	private Date lastModifyTime;
+
+	private String revisionRule;
+	private int revisionSeq;
+	private String revisionValue;
+	private String versionRule;
+	private int versionSeq;
+	private String versionValue;
+	private String lctid;
+	private String lcStatus;
+	private String lcStatusText;
+	private Date ts;
+	private String owner;
+	private String checkInBy;
+	private Date checkInTime;
+	private String checkOutBy;
+	private Date checkOutTime;
+	private String copyFromVersion;
+	private Integer secretGrade;
+	private String secretGradeText;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdBtmTypeClient.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdBtmTypeClient.java
new file mode 100644
index 0000000..11e64f0
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdBtmTypeClient.java
@@ -0,0 +1,83 @@
+package com.vci.ubcs.omd.feign;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.omd.vo.OmdBtmTypeVO;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.support.Query;
+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;
+import java.util.Map;
+
+/**
+ * Description: 涓氬姟绫诲瀷Feign鎺ュ彛绫�
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_NAME_OMD,
+	fallback = IDictClientFallback.class
+)
+public interface IOmdBtmTypeClient {
+
+	/**
+	 * 鍓嶇紑
+	 */
+	String API_PREFIX = "/client";
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 */
+	String GET_REF = API_PREFIX + "/btm-type/get-ref";
+	/**
+	 * 鍙傜収鏄庣粏
+	 */
+	String GET_DETAIL = API_PREFIX + "/btm-type/get-detail";
+	/**
+	 * 鑻辨枃鍚嶇О鎵归噺鏌ヨ
+	 */
+	String GET_BY_IDS = API_PREFIX + "/btm-type/get-by-ids";
+	/**
+	 * 涓婚敭鎵归噺鏌ヨ
+	 */
+	String GET_BY_OIDS = API_PREFIX + "/btm-type/get-by-oids";
+
+	/**
+	 * 鑾峰彇涓氬姟绫诲瀷璇︽儏淇℃伅
+	 *
+	 * @param oid 涓婚敭
+	 * @return 涓氬姟绫诲瀷璇︽儏淇℃伅
+	 */
+	@GetMapping(GET_DETAIL)
+	R<OmdBtmTypeVO> getDetail(@RequestParam("oid") String oid);
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 * @param condition 鏌ヨ鏉′欢
+	 * @param query 鍒嗛〉鏉′欢
+	 * @param domain 棰嗗煙鍊�
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@GetMapping(GET_REF)
+	R<IPage<OmdBtmTypeVO>> getRef(@RequestParam("condition")Map<String,Object> condition, @RequestParam("query")Query query, @RequestParam("domain") String domain);
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鏌ヨ瀵硅薄
+	 * @param ids 瀵硅薄鑻辨枃鍚嶇О 浣嗘槸涓嶈兘瓒呰繃1000
+	 * @return 涓氬姟瀵硅薄
+	 */
+	@GetMapping(GET_BY_IDS)
+	R<List<OmdBtmTypeVO>> selectByIdCollection(List<String> ids);
+
+	/**
+	 * 鎵归噺鏍规嵁涓婚敭鑾峰彇涓氬姟绫诲瀷
+	 * @param pkBtmTypeCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 */
+	@GetMapping(GET_BY_OIDS)
+	R<List<OmdBtmTypeVO>> listBtmTypeByOidCollection(Collection<String> pkBtmTypeCollection);
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdBtmTypeAttributeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdBtmTypeAttributeVO.java
new file mode 100644
index 0000000..bf5dd76
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdBtmTypeAttributeVO.java
@@ -0,0 +1,161 @@
+package com.vci.ubcs.omd.vo;
+
+import com.vci.ubcs.omd.entity.OmdBtmTypeAttribute;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 涓氬姟绫诲瀷鍖呭惈鐨勫睘鎬у璞�
+ * @author weidy
+ * @date 2019/10/11 5:33 PM
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "涓氬姟绫诲瀷鍖呭惈鐨勫睘鎬у璞�", description = "涓氬姟绫诲瀷鍖呭惈鐨勫睘鎬у璞�")
+public class OmdBtmTypeAttributeVO extends OmdBtmTypeAttribute {
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 114224750717125698L;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 鎵�灞炰笟鍔$被鍨�
+     */
+    private String pkBtmType;
+
+    /**
+     * 涓氬姟绫诲瀷鐨勭紪鍙�
+     */
+    private String btmTypeId;
+
+    /**
+     * 灞炴�х殑瀛楁鍚嶇О
+     */
+    private String id;
+
+    /**
+     * 灞炴�х殑涓枃鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 灞炴�х殑闀垮害
+     */
+    private Integer attributeLength;
+
+    /**
+     * 灞炴�у湪鏈笟鍔$被鍨嬩腑鐨勬弿杩�
+     */
+    private String description;
+
+    /**
+     * 鏁版嵁绫诲瀷
+     */
+    private String attrDataType;
+
+    /**
+     * 鏄惁鍙互涓虹┖
+     */
+    private boolean nullableFlag;
+
+    /**
+     * 榛樿鍊�
+     */
+    private String defaultValue;
+
+
+    /**
+     * 灏忔暟绮惧害浣嶆暟
+     */
+    private Integer precisionLength;
+
+    /**
+     * 灏忔暟鍒诲害浣嶆暟
+     */
+    private Integer scaleLength;
+
+    /**
+     * 鍙栧�艰寖鍥�
+     */
+    private String range;
+
+    /**
+     * 鏄惁鍙傜収
+     */
+    private boolean referFlag;
+
+    /**
+     * 鍙傜収涓氬姟绫诲瀷
+     */
+    private String referBtmTypeId;
+
+    /**
+     * 鍙傜収涓氬姟绫诲瀷鍚嶇О
+     */
+    private String referBtmTypeName;
+
+    /**
+     * 鏋氫妇缂栧彿
+     */
+    private String enumId;
+
+    /**
+     * 鏋氫妇鍚嶇О
+     */
+    private String enumName;
+
+    /**
+     * 鏄惁鏋氫妇
+     */
+    private boolean enumFlag;
+
+    /**
+z     * 鍖呭惈鏋氫妇鐨勫��
+     */
+    private Map<String,String> enumItemMap;
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    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/vo/OmdBtmTypeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdBtmTypeVO.java
new file mode 100644
index 0000000..539967c
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdBtmTypeVO.java
@@ -0,0 +1,185 @@
+package com.vci.ubcs.omd.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 涓氬姟绫诲瀷鏄剧ず瀵硅薄
+ * @author weidy
+ * @date 2019/10/11 5:24 PM
+ */
+@Data
+public class OmdBtmTypeVO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 7683836259151573532L;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 涓氬姟绫诲瀷鑻辨枃鍚嶇О
+     */
+    private String id;
+
+    /**
+     * 涓氬姟绫诲瀷涓枃鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鏁版嵁搴撹〃鐨勫悕绉�
+     */
+    private String tableName;
+
+    /**
+     * 鎻忚堪
+     */
+    private String description;
+
+    /**
+     * 鐗堟湰瑙勫垯鐨勭紪鍙�
+     */
+    private String revisionRuleId;
+
+    /**
+     * 鐗堟湰瑙勫垯鐨勫悕绉�
+     */
+    private String revisionRuleName;
+
+    /**
+     * 鍒嗛殧绗�
+     */
+    private String revisionSep;
+
+    /**
+     * 鏄惁鎵嬪姩杈撳叆鐗堟湰
+     */
+    private boolean inputRevisionFlag;
+
+    /**
+     * 鐗堟湰瑙勫垯鏄剧ず瀵硅薄
+     */
+    private OsRevisionRuleVO revisionRuleVO;
+
+    /**
+     * 鏄惁鎶借薄鍖�
+     */
+    private boolean abstractFlag;
+
+    /**
+     * 鏄惁鎺у埗鐗堟湰
+     */
+    private boolean revisionFlag;
+
+    /**
+     * 鏄惁鎺у埗鐢熷懡鍛ㄦ湡
+     */
+    private boolean lifeCycleFlag;
+
+    /**
+     * 鏄惁鎺у埗瀵嗙骇
+     */
+    private boolean secretFlag;
+
+
+    /**
+     * 瀹炰緥鍖栫被
+     */
+    private String implClass;
+
+    /**
+     * C#
+     */
+    private String shape;
+
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鐨勮嫳鏂囧悕绉�
+     */
+    private String lifeCycleId;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鐨勪腑鏂囧悕绉�
+     */
+    private String lifeCycleName;
+
+    /**
+     * 鐗堟瑙勫垯
+     */
+    private String versionRule;
+
+
+    /**
+     * 澶囩敤鐢熷懡鍛ㄦ湡鑻辨枃鍚嶇О
+     */
+    private String subLifeCycleId;
+
+    /**
+     * 澶囩敤鐢熷懡鍛ㄦ湡涓枃鍚嶇О
+     */
+    private String subLifeCycleName;
+
+    /**
+     * 鏄惁涓鸿鍥�
+     */
+    private boolean viewFlag;
+
+    /**
+     * 瑙嗗浘鍒涘缓鐨剆ql璇彞
+     */
+    private String viewCreateSql;
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    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;
+
+	/**
+	 * 涓氬姟绫诲瀷鎵�灞為鍩�
+	 */
+	private String domain;
+
+    /**
+     * 鍖呭惈灞炴��
+     */
+    private List<OmdBtmTypeAttributeVO> attributes;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLifeCycleEventVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLifeCycleEventVO.java
new file mode 100644
index 0000000..89381ad
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLifeCycleEventVO.java
@@ -0,0 +1,177 @@
+package com.vci.ubcs.omd.vo;
+
+import java.util.Date;
+
+/**
+ * 鐢熷懡鍛ㄦ湡浜嬩欢鏄剧ず瀵硅薄
+ * @author weidy
+ * @date 2019/10/17 9:46
+ */
+public class OsLifeCycleEventVO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 8503381504954264216L;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 浜嬩欢鐨勫叏璺緞
+     */
+    private String eventFullName;
+
+    /**
+     * 浜嬩欢鐨勫悕绉�
+     */
+    private String eventShowName;
+
+    /**
+     * 浜嬩欢鎻忚堪
+     */
+    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;
+
+    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/OsLifeCycleLineEventVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLifeCycleLineEventVO.java
new file mode 100644
index 0000000..2bcd4e2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLifeCycleLineEventVO.java
@@ -0,0 +1,192 @@
+package com.vci.ubcs.omd.vo;
+
+
+import java.util.Date;
+
+/**
+ * 鐢熷懡鍛ㄦ湡杩炴帴绾夸簨浠�
+ * @author weidy
+ * @date 2019/10/11 4:54 PM
+ */
+public class OsLifeCycleLineEventVO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 216430078444875215L;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 鎵�灞炵敓鍛藉懆鏈熻繛鎺ョ嚎涓婚敭
+     */
+    private String pkLifeCycleLine;
+
+    /**
+     * 浜嬩欢鐨勫叏璺緞
+     */
+    private String eventFullName;
+
+    /**
+     * 浜嬩欢鐨勫悕绉�
+     */
+    private String eventShowName;
+
+    /**
+     * 鎺掑簭鍙�
+     */
+    private Integer orderNum;
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    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;
+
+    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/OsLifeCycleLineVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLifeCycleLineVO.java
new file mode 100644
index 0000000..b20cc62
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLifeCycleLineVO.java
@@ -0,0 +1,248 @@
+package com.vci.ubcs.omd.vo;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鐢熷懡鍛ㄦ湡杩炴帴绾�
+ * @author weidy
+ * @date 2019/10/11 4:48 PM
+ */
+public class OsLifeCycleLineVO implements java.io.Serializable {
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 1429889911601940640L;
+
+    /**
+     * 鎵�灞炵敓鍛藉懆鏈�
+     */
+    private String pkLifeCycle;
+
+    /**
+     * 婧愮姸鎬佷唬鍙�
+     */
+    private String sourceLifeStatus;
+
+    /**
+     * 婧愮姸鎬佸悕绉�
+     */
+    private String sourceLifeStatusName;
+
+    /**
+     * 鐩爣鐘舵�佷唬鍙�
+     */
+    private String targetLifeStatus;
+
+    /**
+     * 鐩爣鐘舵�佸悕绉�
+     */
+    private String targetLifeStatusName;
+
+    /**
+     * 杩炴帴绾垮悕绉�
+     */
+    private String name;
+
+    /**
+     * 杩炴帴绾夸綅缃俊鎭�
+     */
+    private String transLineSiteInfo;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    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;
+
+    /**
+     * 鍖呭惈浜嬩欢
+     */
+    private List<OsLifeCycleLineEventVO> 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<OsLifeCycleLineEventVO> getEvents() {
+        return events;
+    }
+
+    public void setEvents(List<OsLifeCycleLineEventVO> 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/OsLifeCycleVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLifeCycleVO.java
new file mode 100644
index 0000000..21133eb
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLifeCycleVO.java
@@ -0,0 +1,233 @@
+package com.vci.ubcs.omd.vo;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鐢熷懡鍛ㄦ湡鏄剧ず瀵硅薄
+ * @author weidy
+ * @date 2019/10/11 4:45 PM
+ */
+public class OsLifeCycleVO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 5567711696707791107L;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡缂栧彿
+     */
+    private String id;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鎻忚堪
+     */
+    private String description;
+
+    /**
+     * 绫荤殑鍏ㄨ矾寰�
+     */
+    private String classFullName;
+
+    /**
+     * 璧峰鐘舵��
+     */
+    private String startStatus;
+
+    /**
+     * 璧峰鐘舵�佸悕绉�
+     */
+    private String startStatusName;
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    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;
+
+    /**
+     * 鍖呭惈杩炴帴绾�
+     */
+    private List<OsLifeCycleLineVO> 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<OsLifeCycleLineVO> getLines() {
+        return lines;
+    }
+
+    public void setLines(List<OsLifeCycleLineVO> 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 +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLinkTypeAttributeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLinkTypeAttributeVO.java
new file mode 100644
index 0000000..b2a4e46
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLinkTypeAttributeVO.java
@@ -0,0 +1,390 @@
+package com.vci.ubcs.omd.vo;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 閾炬帴绫诲瀷鍖呭惈鐨勫睘鎬�
+ * @author weidy
+ * @date 2019/10/11 6:16 PM
+ */
+public class OsLinkTypeAttributeVO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 7591988478074135448L;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 鎵�灞炰笟鍔$被鍨�
+     */
+    private String pkLinkType;
+
+    /**
+     * 灞炴�х殑瀛楁鍚嶇О
+     */
+    private String id;
+
+    /**
+     * 灞炴�х殑涓枃鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 灞炴�у湪鏈笟鍔$被鍨嬩腑鐨勬弿杩�
+     */
+    private String description;
+
+    /**
+     * 灞炴�х殑闀垮害
+     */
+    private Integer attributeLength;
+
+    /**
+     * 鏁版嵁绫诲瀷
+     */
+    private String attrDataType;
+
+    /**
+     * 鏄惁鍙互涓虹┖
+     */
+    private boolean nullableFlag;
+
+    /**
+     * 榛樿鍊�
+     */
+    private String defaultValue;
+
+    /**
+     * 灏忔暟绮惧害浣嶆暟
+     */
+    private Integer precisionLength;
+
+    /**
+     * 鍒诲害
+     */
+    private Integer scaleLength;
+
+    /**
+     * 鍙栧�艰寖鍥�
+     */
+    private String range;
+
+    /**
+     * 鍙傜収涓氬姟绫诲瀷
+     */
+    private String referBtmTypeId;
+
+    /**
+     * 鍙傜収涓氬姟绫诲瀷鍚嶇О
+     */
+    private String referBtmTypeName;
+
+    /**
+     * 鏄惁鍙傜収
+     */
+    private boolean referFlag;
+
+    /**
+     * 鏋氫妇缂栧彿
+     */
+    private String enumId;
+
+    /**
+     * 鏋氫妇鍚嶇О
+     */
+    private String enumName;
+
+    /**
+     * 鏄惁鏋氫妇
+     */
+    private boolean enumFlag;
+
+    /**
+     * 鍖呭惈鏋氫妇鐨勫��
+     */
+    private Map<String,String> enumItemMap;
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    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;
+
+    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 void setOid(String oid) {
+        this.oid = oid;
+    }
+
+    public void setPkLinkType(String pkLinkType) {
+        this.pkLinkType = pkLinkType;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public void setAttrDataType(String attrDataType) {
+        this.attrDataType = attrDataType;
+    }
+
+    public void setReferBtmTypeId(String referBtmTypeId) {
+        this.referBtmTypeId = referBtmTypeId;
+    }
+
+    public void setReferBtmTypeName(String referBtmTypeName) {
+        this.referBtmTypeName = referBtmTypeName;
+    }
+
+    public void setReferFlag(boolean referFlag) {
+        this.referFlag = referFlag;
+    }
+
+    public void setEnumId(String enumId) {
+        this.enumId = enumId;
+    }
+
+    public void setEnumName(String enumName) {
+        this.enumName = enumName;
+    }
+
+    public void setEnumFlag(boolean enumFlag) {
+        this.enumFlag = enumFlag;
+    }
+
+    public void setEnumItemMap(Map<String, String> enumItemMap) {
+        this.enumItemMap = enumItemMap;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public void setLastModifier(String lastModifier) {
+        this.lastModifier = lastModifier;
+    }
+
+    public void setLastModifyTime(Date lastModifyTime) {
+        this.lastModifyTime = lastModifyTime;
+    }
+
+    public void setTs(Date ts) {
+        this.ts = ts;
+    }
+
+    public void setNullableFlag(boolean nullableFlag) {
+        this.nullableFlag = nullableFlag;
+    }
+
+    public void setDefaultValue(String defaultValue) {
+        this.defaultValue = defaultValue;
+    }
+
+    public void setPrecisionLength(Integer precisionLength) {
+        this.precisionLength = precisionLength;
+    }
+
+
+    public String getOid() {
+        return oid;
+    }
+
+    public String getPkLinkType() {
+        return pkLinkType;
+    }
+
+
+    public String getDescription() {
+        return description;
+    }
+
+    public String getAttrDataType() {
+        return attrDataType;
+    }
+
+    public String getReferBtmTypeId() {
+        return referBtmTypeId;
+    }
+
+    public String getReferBtmTypeName() {
+        return referBtmTypeName;
+    }
+
+    public boolean isReferFlag() {
+        return referFlag;
+    }
+
+    public String getEnumId() {
+        return enumId;
+    }
+
+    public String getEnumName() {
+        return enumName;
+    }
+
+    public boolean isEnumFlag() {
+        return enumFlag;
+    }
+
+    public Map<String, String> getEnumItemMap() {
+        return enumItemMap;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public String getLastModifier() {
+        return lastModifier;
+    }
+
+    public Date getLastModifyTime() {
+        return lastModifyTime;
+    }
+
+    public Date getTs() {
+        return ts;
+    }
+
+    public boolean isNullableFlag() {
+        return nullableFlag;
+    }
+
+    public String getDefaultValue() {
+        return defaultValue;
+    }
+
+    public Integer getPrecisionLength() {
+        return precisionLength;
+    }
+
+    public String getRange() {
+        return range;
+    }
+
+    public void setRange(String range) {
+        this.range = range;
+    }
+
+    public Integer getAttributeLength() {
+        return attributeLength;
+    }
+
+    public void setAttributeLength(Integer attributeLength) {
+        this.attributeLength = attributeLength;
+    }
+
+
+    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 Integer getScaleLength() {
+        return scaleLength;
+    }
+
+    public void setScaleLength(Integer scaleLength) {
+        this.scaleLength = scaleLength;
+    }
+
+    @Override
+    public String toString() {
+        return "OsLinkTypeAttributeVO{" +
+                "oid='" + oid + '\'' +
+                ", pkLinkType='" + pkLinkType + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", description='" + description + '\'' +
+                ", attributeLength=" + attributeLength +
+                ", attrDataType='" + attrDataType + '\'' +
+                ", nullableFlag=" + nullableFlag +
+                ", defaultValue='" + defaultValue + '\'' +
+                ", precisionLength=" + precisionLength +
+                ", scaleLength=" + scaleLength +
+                ", range='" + range + '\'' +
+                ", referBtmTypeId='" + referBtmTypeId + '\'' +
+                ", referBtmTypeName='" + referBtmTypeName + '\'' +
+                ", referFlag=" + referFlag +
+                ", enumId='" + enumId + '\'' +
+                ", enumName='" + enumName + '\'' +
+                ", enumFlag=" + enumFlag +
+                ", enumItemMap=" + enumItemMap +
+                ", 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/OsLinkTypeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLinkTypeVO.java
new file mode 100644
index 0000000..a412489
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsLinkTypeVO.java
@@ -0,0 +1,305 @@
+package com.vci.ubcs.omd.vo;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * 閾炬帴绫诲瀷鏄剧ず瀵硅薄
+ * @author weidy
+ * @date 2019/10/11 6:04 PM
+ */
+public class OsLinkTypeVO implements java.io.Serializable {
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 2289872385854194102L;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 閾炬帴绫诲瀷鑻辨枃鍚嶇О
+     */
+    private String id;
+
+    /**
+     * 閾炬帴绫诲瀷涓枃鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鎻忚堪
+     */
+    private String description;
+
+    /**
+     * c#
+     */
+    private String shape;
+
+    /**
+     * 瀹炵幇绫�
+     */
+    private String implClass;
+
+    /**
+     * from绔笟鍔$被鍨�
+     */
+    private String fromBtmType;
+
+    /**
+     * from绔笟鍔$被鍨嬫樉绀哄璞�
+     */
+    private List<OmdBtmTypeVO> fromBtmTypeVOS;
+
+    /**
+     * from绔笟鍔$被鍨嬪悕绉�
+     */
+    private String fromBtmTypeName;
+
+    /**
+     * to绔笟鍔$被鍨�
+     */
+    private String toBtmType;
+
+    /**
+     * to绔笟鍔$被鍨嬪悕绉�
+     */
+    private String toBtmTypeName;
+
+    /**
+     * to绔笟鍔$被鍨嬫樉绀哄璞�
+     */
+    private List<OmdBtmTypeVO> toBtmTypeVOS;
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    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;
+
+    /**
+     * 鍖呭惈灞炴��
+     */
+    private List<OsLinkTypeAttributeVO> attributes;
+
+    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 getShape() {
+        return shape;
+    }
+
+    public void setShape(String shape) {
+        this.shape = shape;
+    }
+
+    public String getImplClass() {
+        return implClass;
+    }
+
+    public void setImplClass(String implClass) {
+        this.implClass = implClass;
+    }
+
+    public String getFromBtmType() {
+        return fromBtmType;
+    }
+
+    public void setFromBtmType(String fromBtmType) {
+        this.fromBtmType = fromBtmType;
+    }
+
+    public List<OmdBtmTypeVO> getFromBtmTypeVOS() {
+        return fromBtmTypeVOS;
+    }
+
+    public void setFromBtmTypeVOS(List<OmdBtmTypeVO> fromBtmTypeVOS) {
+        this.fromBtmTypeVOS = fromBtmTypeVOS;
+    }
+
+    public String getFromBtmTypeName() {
+        return fromBtmTypeName;
+    }
+
+    public void setFromBtmTypeName(String fromBtmTypeName) {
+        this.fromBtmTypeName = fromBtmTypeName;
+    }
+
+    public String getToBtmType() {
+        return toBtmType;
+    }
+
+    public void setToBtmType(String toBtmType) {
+        this.toBtmType = toBtmType;
+    }
+
+    public String getToBtmTypeName() {
+        return toBtmTypeName;
+    }
+
+    public void setToBtmTypeName(String toBtmTypeName) {
+        this.toBtmTypeName = toBtmTypeName;
+    }
+
+    public List<OmdBtmTypeVO> getToBtmTypeVOS() {
+        return toBtmTypeVOS;
+    }
+
+    public void setToBtmTypeVOS(List<OmdBtmTypeVO> toBtmTypeVOS) {
+        this.toBtmTypeVOS = toBtmTypeVOS;
+    }
+
+    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<OsLinkTypeAttributeVO> getAttributes() {
+        return attributes;
+    }
+
+    public void setAttributes(List<OsLinkTypeAttributeVO> attributes) {
+        this.attributes = attributes;
+    }
+
+
+    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 "OsLinkTypeVO{" +
+                "oid='" + oid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", description='" + description + '\'' +
+                ", shape='" + shape + '\'' +
+                ", implClass='" + implClass + '\'' +
+                ", fromBtmType='" + fromBtmType + '\'' +
+                ", fromBtmTypeVOS=" + fromBtmTypeVOS +
+                ", fromBtmTypeName='" + fromBtmTypeName + '\'' +
+                ", toBtmType='" + toBtmType + '\'' +
+                ", toBtmTypeName='" + toBtmTypeName + '\'' +
+                ", toBtmTypeVOS=" + toBtmTypeVOS +
+                ", btmname='" + btmname + '\'' +
+                ", owner='" + owner + '\'' +
+                ", creator='" + creator + '\'' +
+                ", createTime=" + createTime +
+                ", lastModifier='" + lastModifier + '\'' +
+                ", lastModifyTime=" + lastModifyTime +
+                ", ts=" + ts +
+                ", attributes=" + attributes +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsModifyAttributeInfoVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsModifyAttributeInfoVO.java
new file mode 100644
index 0000000..3dc5025
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsModifyAttributeInfoVO.java
@@ -0,0 +1,373 @@
+package com.vci.ubcs.omd.vo;
+
+import java.util.Date;
+
+/**
+ * 闇�瑕佷慨鏀规暟鎹簱琛ㄤ腑瀛楁鐨勪俊鎭�
+ * @author weidy
+ * @date 2019/10/18 11:48
+ */
+public class OsModifyAttributeInfoVO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 5948961912171046275L;
+    /**
+     * 涓氬姟绫诲瀷缂栧彿
+     */
+    private String btmTypeId;
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    private String btmTypeName;
+
+    /**
+     * 鏄惁涓洪摼鎺ョ被鍨�
+     */
+    private String linkTypeFlag;
+
+    /**
+     * 琛ㄦ牸鍚嶇О
+     */
+    private String tableName;
+
+    /**
+     * 淇敼灞炴�х被鍨�
+     */
+    private String modifyAttributeType;
+
+    /**
+     * 淇敼灞炴�х被鍨嬫樉绀烘枃鏈�
+     */
+    private String modifyAttributeTypeText;
+
+    /**
+     * 灞炴�у悕瀛�
+     */
+    private String columnName;
+
+    /**
+     * 璋冩暣鍘熷洜
+     */
+    private String modifyColumnReason;
+
+    /**
+     * 鐢宠璋冩暣鐢ㄦ埛
+     */
+    private String orderModifyUserName;
+
+    /**
+     * 鐢宠璋冩暣鏃堕棿
+     */
+    private Date orderModifyDate;
+
+    /**
+     * 淇敼鍓嶇殑绫诲瀷
+     */
+    private String attributeDataTypeBefore;
+
+    /**
+     * 淇敼鍚庣殑绫诲瀷
+     */
+    private String attributeDataTypeAfter;
+
+    /**
+     * 鏄惁鍒犻櫎灞炴��
+     */
+    private String deleteColumnFlag;
+
+    /**
+     * 鏄惁鎵ц瀹屾垚
+     */
+    private boolean handleFinishFlag;
+
+    /**
+     *鎵ц浜�
+     */
+    private String handleUserName;
+
+    /**
+     * 鎵ц鏃堕棿
+     */
+    private Date handleDate;
+
+    /**
+     * 鎵ц缁撴灉
+     */
+    private String handleResult;
+
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    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;
+
+    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/OsRevisionRuleVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsRevisionRuleVO.java
new file mode 100644
index 0000000..7b55f1e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsRevisionRuleVO.java
@@ -0,0 +1,247 @@
+package com.vci.ubcs.omd.vo;
+
+import java.util.Date;
+
+/**
+ * 鐗堟湰瑙勫垯鏄剧ず瀵硅薄
+ * @author weidy
+ * @date 2019/10/11 5:19 PM
+ */
+public class OsRevisionRuleVO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 3660658005636583687L;
+
+    /**
+     * 涓婚敭
+     */
+    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;
+
+    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/OsStatusVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsStatusVO.java
new file mode 100644
index 0000000..73715cc
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OsStatusVO.java
@@ -0,0 +1,178 @@
+package com.vci.ubcs.omd.vo;
+
+import java.util.Date;
+
+/**
+ * 鐘舵��
+ * @author weidy
+ * @date 2019/10/11 4:40 PM
+ */
+public class OsStatusVO implements java.io.Serializable {
+
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 6084862289020441069L;
+
+    /**
+     * 涓婚敭
+     */
+    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;
+
+    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-api/ubcs-util-api/pom.xml b/Source/UBCS/ubcs-service-api/ubcs-util-api/pom.xml
new file mode 100644
index 0000000..22f6d7c
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/pom.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-service-api</artifactId>
+        <groupId>com.vci.ubcs</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-util-api</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml-schemas</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/annotation/Transient.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/annotation/Transient.java
similarity index 88%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/annotation/Transient.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/annotation/Transient.java
index 8b248b4..d889950 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/annotation/Transient.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/annotation/Transient.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.annotation;
+package com.vci.ubcs.starter.annotation;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/annotation/VciEnum.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/annotation/VciEnum.java
similarity index 91%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/annotation/VciEnum.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/annotation/VciEnum.java
index 706be18..9489525 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/annotation/VciEnum.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/annotation/VciEnum.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.annotation;
+package com.vci.ubcs.starter.annotation;
 //
 // Source code recreated from a .class file by IntelliJ IDEA
 // (powered by FernFlower decompiler)
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/bo/WriteExcelData.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/bo/WriteExcelData.java
similarity index 98%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/bo/WriteExcelData.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/bo/WriteExcelData.java
index b8f13ac..ca21b2b 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/bo/WriteExcelData.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/bo/WriteExcelData.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.bo;
+package com.vci.ubcs.starter.bo;
 
 import java.util.List;
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/exception/VciBaseException.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/exception/VciBaseException.java
similarity index 95%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/exception/VciBaseException.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/exception/VciBaseException.java
index 2c5e599..eadbff9 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/exception/VciBaseException.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/exception/VciBaseException.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.exception;
+package com.vci.ubcs.starter.exception;
 
 //
 // Source code recreated from a .class file by IntelliJ IDEA
@@ -6,7 +6,7 @@
 //
 
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.vci.ubcs.com.vci.starter.web.util.MessageUtils;
+import com.vci.ubcs.starter.web.util.MessageUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/annotation/ExcelColumn.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/annotation/ExcelColumn.java
similarity index 90%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/annotation/ExcelColumn.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/annotation/ExcelColumn.java
index 846e998..93e207a 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/annotation/ExcelColumn.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/annotation/ExcelColumn.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.poi.annotation;
+package com.vci.ubcs.starter.poi.annotation;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/annotation/ExcelTitle.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/annotation/ExcelTitle.java
similarity index 84%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/annotation/ExcelTitle.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/annotation/ExcelTitle.java
index f5f6359..4ae56b1 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/annotation/ExcelTitle.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/annotation/ExcelTitle.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.poi.annotation;
+package com.vci.ubcs.starter.poi.annotation;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/AppendDataExcelOption.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/AppendDataExcelOption.java
similarity index 96%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/AppendDataExcelOption.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/AppendDataExcelOption.java
index 19c179d..31dc3a6 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/AppendDataExcelOption.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/AppendDataExcelOption.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.poi.bo;
+package com.vci.ubcs.starter.poi.bo;
 
 import java.io.Serializable;
 import java.util.List;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/DownloadTempOption.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/DownloadTempOption.java
similarity index 94%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/DownloadTempOption.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/DownloadTempOption.java
index 6637221..62deb09 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/DownloadTempOption.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/DownloadTempOption.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.poi.bo;
+package com.vci.ubcs.starter.poi.bo;
 
 
 import java.io.Serializable;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/ExcelColumnMap.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/ExcelColumnMap.java
similarity index 96%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/ExcelColumnMap.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/ExcelColumnMap.java
index 48b5c29..c4382ad 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/ExcelColumnMap.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/ExcelColumnMap.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.poi.bo;
+package com.vci.ubcs.starter.poi.bo;
 
 public class ExcelColumnMap {
 	private String title;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/ReadExcelOption.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/ReadExcelOption.java
similarity index 96%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/ReadExcelOption.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/ReadExcelOption.java
index 909ea59..3300904 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/ReadExcelOption.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/ReadExcelOption.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.poi.bo;
+package com.vci.ubcs.starter.poi.bo;
 
 
 import java.util.List;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/SheetDataSet.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/SheetDataSet.java
similarity index 94%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/SheetDataSet.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/SheetDataSet.java
index 21061da..7a20065 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/SheetDataSet.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/SheetDataSet.java
@@ -1,4 +1,5 @@
-package com.vci.ubcs.com.vci.starter.poi.bo;
+package com.vci.ubcs.starter.poi.bo;
+
 
 
 import java.util.ArrayList;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/SheetRowData.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/SheetRowData.java
similarity index 92%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/SheetRowData.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/SheetRowData.java
index 590a2f2..fe8bd0b 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/SheetRowData.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/SheetRowData.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.poi.bo;
+package com.vci.ubcs.starter.poi.bo;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/WriteExcelOption.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/WriteExcelOption.java
similarity index 95%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/WriteExcelOption.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/WriteExcelOption.java
index 19dcd25..94ebd20 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/WriteExcelOption.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/WriteExcelOption.java
@@ -1,7 +1,7 @@
-package com.vci.ubcs.com.vci.starter.poi.bo;
+package com.vci.ubcs.starter.poi.bo;
 
 
-import com.vci.ubcs.com.vci.starter.bo.WriteExcelData;
+import com.vci.ubcs.starter.bo.WriteExcelData;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/constant/ExcelLangCodeConstant.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/constant/ExcelLangCodeConstant.java
similarity index 94%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/constant/ExcelLangCodeConstant.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/constant/ExcelLangCodeConstant.java
index 5edd706..31b56a3 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/constant/ExcelLangCodeConstant.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/constant/ExcelLangCodeConstant.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.poi.constant;
+package com.vci.ubcs.starter.poi.constant;
 
 public class ExcelLangCodeConstant {
 	public static final String READ_IMPORT_FILE_FAIL = "readImportFileFail";
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/util/ExcelUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/ExcelUtil.java
similarity index 98%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/util/ExcelUtil.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/ExcelUtil.java
index f43b6bd..4d48b36 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/util/ExcelUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/ExcelUtil.java
@@ -1,15 +1,15 @@
-package com.vci.ubcs.com.vci.starter.poi.util;
+package com.vci.ubcs.starter.poi.util;
 
-import com.vci.ubcs.com.vci.starter.bo.WriteExcelData;
-import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
-import com.vci.ubcs.com.vci.starter.poi.annotation.ExcelColumn;
-import com.vci.ubcs.com.vci.starter.poi.annotation.ExcelTitle;
-import com.vci.ubcs.com.vci.starter.poi.bo.*;
-import com.vci.ubcs.com.vci.starter.util.LocalFileUtil;
-import com.vci.ubcs.com.vci.starter.web.annotation.VciFieldType;
-import com.vci.ubcs.com.vci.starter.web.enumpck.VciFieldTypeEnum;
-import com.vci.ubcs.com.vci.starter.web.util.LangBaseUtil;
-import com.vci.ubcs.com.vci.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.bo.WriteExcelData;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.poi.annotation.ExcelColumn;
+import com.vci.ubcs.starter.poi.annotation.ExcelTitle;
+import com.vci.ubcs.starter.poi.bo.*;
+import com.vci.ubcs.starter.util.LocalFileUtil;
+import com.vci.ubcs.starter.web.annotation.VciFieldType;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.ubcs.starter.web.util.LangBaseUtil;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.apache.commons.io.IOUtils;
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFDataFormat;
@@ -52,9 +52,6 @@
 
 import java.io.*;
 import java.lang.reflect.Field;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Proxy;
-import sun.reflect.annotation.*;
 import java.math.BigDecimal;
 import java.nio.channels.FileChannel;
 import java.util.*;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/util/PoiImportProcesser.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/PoiImportProcesser.java
similarity index 75%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/util/PoiImportProcesser.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/PoiImportProcesser.java
index bd32f6c..b9054f6 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/util/PoiImportProcesser.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/PoiImportProcesser.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.poi.util;
+package com.vci.ubcs.starter.poi.util;
 
 import java.lang.reflect.Field;
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/util/PoiTemplateProcesser.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/PoiTemplateProcesser.java
similarity index 80%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/util/PoiTemplateProcesser.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/PoiTemplateProcesser.java
index 143d945..4feaee2 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/util/PoiTemplateProcesser.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/PoiTemplateProcesser.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.poi.util;
+package com.vci.ubcs.starter.poi.util;
 
 import java.lang.reflect.Field;
 import java.util.Map;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java
new file mode 100644
index 0000000..bb25c59
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java
@@ -0,0 +1,355 @@
+package com.vci.ubcs.starter.revision.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.data.annotation.Transient;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Map;
+
+public class BaseModel implements Serializable {
+	@JsonSerialize(
+		using = ToStringSerializer.class
+	)
+	@ApiModelProperty("涓婚敭id")
+	@TableId(value = "OID",type = IdType.ASSIGN_UUID)
+	private String oid;
+
+	private String id;
+
+	private String name;
+
+	private String description;
+
+	private String revisionOid;
+
+	private String nameOid;
+
+	private String btmname;
+
+	private String lastR;
+
+	private String firstR;
+
+	private String lastV;
+
+	private String firstV;
+
+	private String creator;
+	@DateTimeFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@JsonFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	private Date createTime;
+
+	private String lastModifier;
+	@DateTimeFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@JsonFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	private Date lastModifyTime;
+
+	private String revisionRule;
+
+	private Integer revisionSeq;
+
+	private String revisionValue;
+
+	private String versionRule;
+
+	private Integer versionSeq;
+
+	private String versionValue;
+
+	@Transient
+	private String lctid;
+
+	private String lcStatus;
+
+	@TableField(exist = false)
+	private String lcStatusText;
+
+	@JsonFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss.SSS"
+	)
+	private Date ts;
+
+	private String owner;
+
+	private String copyFromVersion;
+
+	//	@VciUseEnum(
+//		value = "Enumsecretgrade",
+//		showTextField = "secretGradeText"
+//	)
+	@TableField(exist = false)
+	private Integer secretGrade;
+
+	@Transient
+	@TableField(exist = false)
+	private String secretGradeText;
+
+	@Transient
+	@TableField(exist = false)
+	private Map<String, String> data;
+
+	public BaseModel() {
+	}
+
+	public String getOid() {
+		return this.oid;
+	}
+
+	public void setOid(String oid) {
+		this.oid = oid;
+	}
+
+	public String getId() {
+		return this.id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getDescription() {
+		return this.description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getRevisionOid() {
+		return this.revisionOid;
+	}
+
+	public void setRevisionOid(String revisionOid) {
+		this.revisionOid = revisionOid;
+	}
+
+	public String getNameOid() {
+		return this.nameOid;
+	}
+
+	public void setNameOid(String nameOid) {
+		this.nameOid = nameOid;
+	}
+
+	public String getBtmname() {
+		return this.btmname;
+	}
+
+	public void setBtmname(String btmname) {
+		this.btmname = btmname;
+	}
+
+	public String getLastR() {
+		return this.lastR;
+	}
+
+	public void setLastR(String lastR) {
+		this.lastR = lastR;
+	}
+
+	public String getFirstR() {
+		return this.firstR;
+	}
+
+	public void setFirstR(String firstR) {
+		this.firstR = firstR;
+	}
+
+	public String getLastV() {
+		return this.lastV;
+	}
+
+	public void setLastV(String lastV) {
+		this.lastV = lastV;
+	}
+
+	public String getFirstV() {
+		return this.firstV;
+	}
+
+	public void setFirstV(String firstV) {
+		this.firstV = firstV;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getLastModifier() {
+		return this.lastModifier;
+	}
+
+	public void setLastModifier(String lastModifier) {
+		this.lastModifier = lastModifier;
+	}
+
+	public Date getLastModifyTime() {
+		return this.lastModifyTime;
+	}
+
+	public void setLastModifyTime(Date lastModifyTime) {
+		this.lastModifyTime = lastModifyTime;
+	}
+
+	public String getRevisionRule() {
+		return this.revisionRule;
+	}
+
+	public void setRevisionRule(String revisionRule) {
+		this.revisionRule = revisionRule;
+	}
+
+	public String getVersionRule() {
+		return this.versionRule;
+	}
+
+	public void setVersionRule(String versionRule) {
+		this.versionRule = versionRule;
+	}
+
+	public Integer getRevisionSeq() {
+		return this.revisionSeq;
+	}
+
+	public void setRevisionSeq(Integer revisionSeq) {
+		this.revisionSeq = revisionSeq;
+	}
+
+	public String getRevisionValue() {
+		return this.revisionValue;
+	}
+
+	public void setRevisionValue(String revisionValue) {
+		this.revisionValue = revisionValue;
+	}
+
+	public Integer getVersionSeq() {
+		return this.versionSeq;
+	}
+
+	public void setVersionSeq(Integer versionSeq) {
+		this.versionSeq = versionSeq;
+	}
+
+	public String getVersionValue() {
+		return this.versionValue;
+	}
+
+	public void setVersionValue(String versionValue) {
+		this.versionValue = versionValue;
+	}
+
+	public String getLcStatus() {
+		return this.lcStatus;
+	}
+
+	public void setLcStatus(String lcStatus) {
+		this.lcStatus = lcStatus;
+	}
+
+	public Date getTs() {
+		return this.ts;
+	}
+
+	public void setTs(Date ts) {
+		this.ts = ts;
+	}
+
+	public String getOwner() {
+		return this.owner;
+	}
+
+	public void setOwner(String owner) {
+		this.owner = owner;
+	}
+
+	public String getCopyFromVersion() {
+		return this.copyFromVersion;
+	}
+
+	public void setCopyFromVersion(String copyFromVersion) {
+		this.copyFromVersion = copyFromVersion;
+	}
+
+	public String getLcStatusText() {
+		return this.lcStatusText;
+	}
+
+	public void setLcStatusText(String lcStatusText) {
+		this.lcStatusText = lcStatusText;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Integer getSecretGrade() {
+		return this.secretGrade;
+	}
+
+	public void setSecretGrade(Integer secretGrade) {
+		this.secretGrade = secretGrade;
+	}
+
+	public String getSecretGradeText() {
+		return this.secretGradeText;
+	}
+
+	public void setSecretGradeText(String secretGradeText) {
+		this.secretGradeText = secretGradeText;
+	}
+
+	public String getLctid() {
+		return this.lctid;
+	}
+
+	public void setLctid(String lctid) {
+		this.lctid = lctid;
+	}
+
+	public Map<String, String> getData() {
+		return this.data;
+	}
+
+	public void setData(Map<String, String> data) {
+		this.data = data;
+	}
+
+	@Override
+	public String toString() {
+		return "BaseModel{oid='" + this.oid + '\'' + ", id='" + this.id + '\'' + ", name='" + this.name + '\'' + ", description='" + this.description + '\'' + ", revisionOid='" + this.revisionOid + '\'' + ", nameOid='" + this.nameOid + '\'' + ", btmname='" + this.btmname + '\'' + ", lastR='" + this.lastR + '\'' + ", firstR='" + this.firstR + '\'' + ", lastV='" + this.lastV + '\'' + ", firstV='" + this.firstV + '\'' + ", creator='" + this.creator + '\'' + ", createTime=" + this.createTime + ", lastModifier='" + this.lastModifier + '\'' + ", lastModifyTime=" + this.lastModifyTime + ", revisionRule='" + this.revisionRule + '\'' + ", revisionSeq=" + this.revisionSeq + ", revisionValue='" + this.revisionValue + '\'' + ", versionRule='" + this.versionRule + '\'' + ", versionSeq=" + this.versionSeq + ", versionValue='" + this.versionValue + '\'' + ", lctid='" + this.lctid + '\'' + ", lcStatus='" + this.lcStatus + '\'' + ", lcStatusText='" + this.lcStatusText + '\'' + ", ts=" + this.ts + ", owner='" + this.owner + '\''  + ", copyFromVersion='" + this.copyFromVersion + '\'' + ", secretGrade=" + this.secretGrade + ", secretGradeText='" + this.secretGradeText + '\'' + ", data=" + this.data + '}';
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/model/ReleasedObjDO.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/ReleasedObjDO.java
similarity index 95%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/model/ReleasedObjDO.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/ReleasedObjDO.java
index 65e46bc..5108784 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/model/ReleasedObjDO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/ReleasedObjDO.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.revision.model;
+package com.vci.ubcs.starter.revision.model;
 
 //
 // Source code recreated from a .class file by IntelliJ IDEA
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/model/RevisionInfo.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/RevisionInfo.java
similarity index 98%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/model/RevisionInfo.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/RevisionInfo.java
index a3c2c3a..8af3891 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/model/RevisionInfo.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/RevisionInfo.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.revision.model;
+package com.vci.ubcs.starter.revision.model;
 //
 // Source code recreated from a .class file by IntelliJ IDEA
 // (powered by FernFlower decompiler)
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/TreeQueryObject.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/TreeQueryObject.java
new file mode 100644
index 0000000..60f5780
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/TreeQueryObject.java
@@ -0,0 +1,137 @@
+package com.vci.ubcs.starter.revision.model;
+
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+import java.io.Serializable;
+import java.util.Map;
+
+public class TreeQueryObject implements Serializable {
+	private static final long serialVersionUID = -7570704940199743059L;
+	private Map<String, String> conditionMap;
+	private boolean multipleSelect;
+	private boolean showCheckBox;
+	private boolean queryAllLevel;
+	private String parentOid;
+	private String parentBtmName;
+	private String valueField = "oid";
+	private String textField = "name";
+	private String parentFieldName;
+	private Map<String, String> extandParamsMap;
+	private boolean queryAllRev;
+	private String sort;
+	private String order;
+
+	public TreeQueryObject() {
+	}
+
+	public String getValueField() {
+		return this.valueField;
+	}
+
+	public void setValueField(String valueField) {
+		this.valueField = valueField;
+	}
+
+	public String getTextField() {
+		return this.textField;
+	}
+
+	public void setTextField(String textField) {
+		this.textField = textField;
+	}
+
+	public String getParentFieldName() {
+		return this.parentFieldName;
+	}
+
+	public void setParentFieldName(String parentFieldName) {
+		this.parentFieldName = parentFieldName;
+	}
+
+	public Map<String, String> getConditionMap() {
+		return this.conditionMap;
+	}
+
+	public void setConditionMap(Map<String, String> conditionMap) {
+		this.conditionMap = conditionMap;
+	}
+
+	public boolean isMultipleSelect() {
+		return this.multipleSelect;
+	}
+
+	public void setMultipleSelect(boolean multipleSelect) {
+		this.multipleSelect = multipleSelect;
+	}
+
+	public boolean isShowCheckBox() {
+		return this.showCheckBox;
+	}
+
+	public void setShowCheckBox(boolean showCheckBox) {
+		this.showCheckBox = showCheckBox;
+	}
+
+	public String getParentOid() {
+		return this.parentOid;
+	}
+
+	public void setParentOid(String parentOid) {
+		this.parentOid = parentOid;
+	}
+
+	public String getParentBtmName() {
+		return this.parentBtmName;
+	}
+
+	public void setParentBtmName(String parentBtmName) {
+		this.parentBtmName = parentBtmName;
+	}
+
+	public Map<String, String> getExtandParamsMap() {
+		return this.extandParamsMap;
+	}
+
+	public void setExtandParamsMap(Map<String, String> extandParamsMap) {
+		this.extandParamsMap = extandParamsMap;
+	}
+
+	public boolean isQueryAllLevel() {
+		return this.queryAllLevel;
+	}
+
+	public void setQueryAllLevel(boolean queryAllLevel) {
+		this.queryAllLevel = queryAllLevel;
+	}
+
+	public boolean isQueryAllRev() {
+		return this.queryAllRev;
+	}
+
+	public void setQueryAllRev(boolean queryAllRev) {
+		this.queryAllRev = queryAllRev;
+	}
+
+	public String getSort() {
+		return this.sort;
+	}
+
+	public void setSort(String sort) {
+		this.sort = sort;
+	}
+
+	public String getOrder() {
+		return this.order;
+	}
+
+	public void setOrder(String order) {
+		this.order = order;
+	}
+
+	public String toString() {
+		return "TreeQueryObject{conditionMap=" + this.conditionMap + ", multipleSelect=" + this.multipleSelect + ", showCheckBox=" + this.showCheckBox + ", queryAllLevel=" + this.queryAllLevel + ", parentOid='" + this.parentOid + '\'' + ", parentBtmName='" + this.parentBtmName + '\'' + ", valueField='" + this.valueField + '\'' + ", textField='" + this.textField + '\'' + ", parentFieldName='" + this.parentFieldName + '\'' + ", extandParamsMap=" + this.extandParamsMap + ", queryAllRev=" + this.queryAllRev + ", sort='" + this.sort + '\'' + ", order='" + this.order + '\'' + '}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/TreeWrapperOptions.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/TreeWrapperOptions.java
new file mode 100644
index 0000000..b0119ed
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/TreeWrapperOptions.java
@@ -0,0 +1,121 @@
+package com.vci.ubcs.starter.revision.model;
+
+
+
+import java.io.Serializable;
+
+public class TreeWrapperOptions implements Serializable {
+	private static final long serialVersionUID = 3183500138266494574L;
+	private String textFieldName = "name";
+	private String textValueSep = " ";
+	private String parentFieldName;
+	private String oidFieldName = "oid";
+	private String oidValueSep = ",";
+	private boolean allAttributes = true;
+	private String parentOid;
+	private boolean multipleSelect = false;
+	private boolean showCheckBox = false;
+
+	public TreeWrapperOptions() {
+	}
+
+	public TreeWrapperOptions(String parentFieldName) {
+		this.parentFieldName = parentFieldName;
+	}
+
+	public TreeWrapperOptions(String textFieldName, String parentFieldName) {
+		this.textFieldName = textFieldName;
+		this.parentFieldName = parentFieldName;
+	}
+
+	public TreeWrapperOptions(String textFieldName, String parentFieldName, String parentOid) {
+		this.textFieldName = textFieldName;
+		this.parentFieldName = parentFieldName;
+		this.parentOid = parentOid;
+	}
+
+	public void copyFromTreeQuery(TreeQueryObject treeQueryObject) {
+		if (treeQueryObject != null) {
+			this.parentOid = treeQueryObject.getParentOid();
+			this.multipleSelect = treeQueryObject.isMultipleSelect();
+			this.showCheckBox = treeQueryObject.isShowCheckBox();
+		}
+
+	}
+
+	public String getTextFieldName() {
+		return this.textFieldName;
+	}
+
+	public void setTextFieldName(String textFieldName) {
+		this.textFieldName = textFieldName;
+	}
+
+	public String getParentFieldName() {
+		return this.parentFieldName;
+	}
+
+	public void setParentFieldName(String parentFieldName) {
+		this.parentFieldName = parentFieldName;
+	}
+
+	public String getOidFieldName() {
+		return this.oidFieldName;
+	}
+
+	public void setOidFieldName(String oidFieldName) {
+		this.oidFieldName = oidFieldName;
+	}
+
+	public boolean isAllAttributes() {
+		return this.allAttributes;
+	}
+
+	public void setAllAttributes(boolean allAttributes) {
+		this.allAttributes = allAttributes;
+	}
+
+	public String getParentOid() {
+		return this.parentOid;
+	}
+
+	public void setParentOid(String parentOid) {
+		this.parentOid = parentOid;
+	}
+
+	public boolean isMultipleSelect() {
+		return this.multipleSelect;
+	}
+
+	public void setMultipleSelect(boolean multipleSelect) {
+		this.multipleSelect = multipleSelect;
+	}
+
+	public boolean isShowCheckBox() {
+		return this.showCheckBox;
+	}
+
+	public void setShowCheckBox(boolean showCheckBox) {
+		this.showCheckBox = showCheckBox;
+	}
+
+	public String getTextValueSep() {
+		return this.textValueSep;
+	}
+
+	public void setTextValueSep(String textValueSep) {
+		this.textValueSep = textValueSep;
+	}
+
+	public String getOidValueSep() {
+		return this.oidValueSep;
+	}
+
+	public void setOidValueSep(String oidValueSep) {
+		this.oidValueSep = oidValueSep;
+	}
+
+	public String toString() {
+		return "TreeWrapperOptions{textFieldName='" + this.textFieldName + '\'' + ", textValueSep='" + this.textValueSep + '\'' + ", parentFieldName='" + this.parentFieldName + '\'' + ", oidFieldName='" + this.oidFieldName + '\'' + ", oidValueSep='" + this.oidValueSep + '\'' + ", allAttributes=" + this.allAttributes + ", parentOid='" + this.parentOid + '\'' + ", multipleSelect=" + this.multipleSelect + ", showCheckBox=" + this.showCheckBox + '}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/service/RevisionModelUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java
similarity index 91%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/service/RevisionModelUtil.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java
index 3364bc2..28bd390 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/service/RevisionModelUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.revision.service;
+package com.vci.ubcs.starter.revision.service;
 
 //
 // Source code recreated from a .class file by IntelliJ IDEA
@@ -8,12 +8,12 @@
 //package com.vci.starter.revision.service;
 
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.vci.ubcs.code.bo.TreeWrapperOptions;
-import com.vci.ubcs.code.entity.BaseModel;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.Tree;
-import com.vci.ubcs.com.vci.starter.web.service.VciSecretServiceI;
-import com.vci.ubcs.com.vci.starter.web.util.BeanUtilForVCI;
-import com.vci.ubcs.com.vci.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.revision.model.BaseModel;
+import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
+import com.vci.ubcs.starter.web.pagemodel.Tree;
+import com.vci.ubcs.starter.web.service.VciSecretServiceI;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/service/VciRevisionServiceI.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/VciRevisionServiceI.java
similarity index 82%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/service/VciRevisionServiceI.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/VciRevisionServiceI.java
index ea30b16..924d2a3 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/service/VciRevisionServiceI.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/VciRevisionServiceI.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.revision.service;
+package com.vci.ubcs.starter.revision.service;
 
 //
 // Source code recreated from a .class file by IntelliJ IDEA
@@ -8,8 +8,8 @@
 //package com.vci.starter.revision.service;
 
 
-import com.vci.ubcs.com.vci.starter.revision.model.ReleasedObjDO;
-import com.vci.ubcs.com.vci.starter.revision.model.RevisionInfo;
+import com.vci.ubcs.starter.revision.model.ReleasedObjDO;
+import com.vci.ubcs.starter.revision.model.RevisionInfo;
 
 public interface VciRevisionServiceI {
 	RevisionInfo selectLastRevision(String var1, String var2);
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/util/LocalFileUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/LocalFileUtil.java
similarity index 97%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/util/LocalFileUtil.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/LocalFileUtil.java
index 0350790..c62ec77 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/util/LocalFileUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/LocalFileUtil.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.util;
+package com.vci.ubcs.starter.util;
 
 
 import java.io.ByteArrayOutputStream;
@@ -10,14 +10,14 @@
 import java.io.OutputStream;
 import java.nio.channels.FileChannel;
 import java.nio.charset.StandardCharsets;
-import java.rmi.ServerException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.UUID;
 
-import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.apache.commons.io.IOUtils;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springframework.boot.system.ApplicationHome;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/annotation/VciFieldType.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/annotation/VciFieldType.java
similarity index 73%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/annotation/VciFieldType.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/annotation/VciFieldType.java
index 5794349..80ba1aa 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/annotation/VciFieldType.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/annotation/VciFieldType.java
@@ -1,6 +1,6 @@
-package com.vci.ubcs.com.vci.starter.web.annotation;
+package com.vci.ubcs.starter.web.annotation;
 
-import com.vci.ubcs.com.vci.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/annotation/VciUseEnum.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/annotation/VciUseEnum.java
similarity index 89%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/annotation/VciUseEnum.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/annotation/VciUseEnum.java
index 9bc7d06..01f84a4 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/annotation/VciUseEnum.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/annotation/VciUseEnum.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.annotation;
+package com.vci.ubcs.starter.web.annotation;
 
 //
 // Source code recreated from a .class file by IntelliJ IDEA
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/constant/EnumIdConstant.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/EnumIdConstant.java
similarity index 95%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/constant/EnumIdConstant.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/EnumIdConstant.java
index 04adb68..2ba0ea7 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/constant/EnumIdConstant.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/EnumIdConstant.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.constant;
+package com.vci.ubcs.starter.web.constant;
 
 /**
  * 鏋氫妇鐨勪笟鍔$被鍨�
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/constant/MdmEnumIdConstant.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/MdmEnumIdConstant.java
similarity index 97%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/constant/MdmEnumIdConstant.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/MdmEnumIdConstant.java
index c092c99..8b56a63 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/constant/MdmEnumIdConstant.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/MdmEnumIdConstant.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.constant;
+package com.vci.ubcs.starter.web.constant;
 
 /**
  * 涓绘暟鎹殑鏋氫妇鍚嶇О
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/OmdRegExpConstant.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/OmdRegExpConstant.java
new file mode 100644
index 0000000..b929fca
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/OmdRegExpConstant.java
@@ -0,0 +1,28 @@
+package com.vci.ubcs.starter.web.constant;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/23
+ */
+public class OmdRegExpConstant {
+	public static final String INCLUDE_CHINESE = "[螒-锟";
+	public static final String NUMBER = "^[0-9]*$";
+	public static final String INT = "/^-?[1-9]+[0-9]*$/";
+	public static final String LONG = "/^-?[1-9]+[0-9]*$/";
+	public static final String DOUBLE = "[0-9]*(\\.[0-9]*|[eE][+-][0-9]*)$";
+	public static final String LETTER = "^[A-Za-z]+$";
+	public static final String LETTER_AND_NUMBER = "^[A-Za-z0-9]+$";
+	public static final String UP_LETTER = "^[A-Z]+$";
+	public static final String LOW_LETTER = "^[a-z]+$";
+	public static final String SPECIAL_CHARACTER = "^[` ~!@#$%^&*()_\\-+=<>?:\"{}|,.\\/;'\\[\\]路~锛丂#锟�%鈥︹��&*锛堬級鈥斺�擻\-+={}|銆娿�嬶紵锛氣�溾�濄�愩�戙�侊紱鈥樷�欙紝銆傘�乚+$";
+	public static final String HAS_LETTER = ".*[a-z][A-Z]{1,}.*";
+	public static final String HAS_UP_LETTER = ".*[A-Z]{1,}.*";
+	public static final String HAS_LOW_LETTER = ".*[a-z]{1,}.*";
+	public static final String HAS_NUMBER = ".*[0-9]{1,}.*";
+	public static final String HAS_SPECIAL_CHARACTER = ".*[` ~!@#$%^&*()_\\-+=<>?:\"{}|,.\\/;'\\[\\]路~锛丂#锟�%鈥︹��&*锛堬級鈥斺�擻\-+={}|銆娿�嬶紵锛氣�溾�濄�愩�戙�侊紱鈥樷�欙紝銆傘�乚{1,}.*";
+
+	private OmdRegExpConstant() {
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/constant/QueryOptionConstant.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/QueryOptionConstant.java
similarity index 92%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/constant/QueryOptionConstant.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/QueryOptionConstant.java
index e177a0b..b376241 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/constant/QueryOptionConstant.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/QueryOptionConstant.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.constant;
+package com.vci.ubcs.starter.web.constant;
 
 
 public class QueryOptionConstant {
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BaseEnum.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BaseEnum.java
new file mode 100644
index 0000000..ebdc3f2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BaseEnum.java
@@ -0,0 +1,7 @@
+package com.vci.ubcs.starter.web.enumpck;
+
+public interface BaseEnum {
+	String getValue();
+
+	String getText();
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/BaseEnumInt.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BaseEnumInt.java
similarity index 81%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/BaseEnumInt.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BaseEnumInt.java
index a1a86e7..084c669 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/BaseEnumInt.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BaseEnumInt.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.enumpck;
+package com.vci.ubcs.starter.web.enumpck;
 //
 // Source code recreated from a .class file by IntelliJ IDEA
 // (powered by FernFlower decompiler)
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/OsCodeFillTypeEnum.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/OsCodeFillTypeEnum.java
similarity index 97%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/OsCodeFillTypeEnum.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/OsCodeFillTypeEnum.java
index d01cb6a..83c35d7 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/OsCodeFillTypeEnum.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/OsCodeFillTypeEnum.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.enumpck;
+package com.vci.ubcs.starter.web.enumpck;
 
 //package com.vci.web.enumpck;
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/UserSecretEnum.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/UserSecretEnum.java
similarity index 93%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/UserSecretEnum.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/UserSecretEnum.java
index c9cccee..57423cd 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/UserSecretEnum.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/UserSecretEnum.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.enumpck;
+package com.vci.ubcs.starter.web.enumpck;
 //
 // Source code recreated from a .class file by IntelliJ IDEA
 // (powered by FernFlower decompiler)
@@ -8,7 +8,8 @@
 
 //import com.vci.starter.web.annotation.VciEnum;
 
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
+
+import com.vci.ubcs.starter.annotation.VciEnum;
 
 @VciEnum(
 	name = "usersecurityenum",
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/VciFieldTypeEnum.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/VciFieldTypeEnum.java
similarity index 94%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/VciFieldTypeEnum.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/VciFieldTypeEnum.java
index 2d549ac..98b4f24 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/VciFieldTypeEnum.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/VciFieldTypeEnum.java
@@ -1,7 +1,7 @@
-package com.vci.ubcs.com.vci.starter.web.enumpck;
+package com.vci.ubcs.starter.web.enumpck;
 
 
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
+import com.vci.ubcs.starter.annotation.VciEnum;
 
 @VciEnum(
 	name = "VciFieldType",
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/BaseQueryObject.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/BaseQueryObject.java
similarity index 98%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/BaseQueryObject.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/BaseQueryObject.java
index 96202dd..780a0c2 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/BaseQueryObject.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/BaseQueryObject.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
+package com.vci.ubcs.starter.web.pagemodel;
 //
 // Source code recreated from a .class file by IntelliJ IDEA
 // (powered by FernFlower decompiler)
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/DataGrid.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/DataGrid.java
similarity index 97%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/DataGrid.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/DataGrid.java
index f12e362..d042257 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/DataGrid.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/DataGrid.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
+package com.vci.ubcs.starter.web.pagemodel;
 
 
 import java.io.Serializable;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/KeyValue.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/KeyValue.java
similarity index 94%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/KeyValue.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/KeyValue.java
index 9762267..7e980d0 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/KeyValue.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/KeyValue.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
+package com.vci.ubcs.starter.web.pagemodel;
 
 //package com.vci.starter.web.pagemodel;
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/PageHelper.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/PageHelper.java
similarity index 98%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/PageHelper.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/PageHelper.java
index 12c46dc..a75144e 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/PageHelper.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/PageHelper.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
+package com.vci.ubcs.starter.web.pagemodel;
 
 //
 // Source code recreated from a .class file by IntelliJ IDEA
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/SessionInfo.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/SessionInfo.java
similarity index 99%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/SessionInfo.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/SessionInfo.java
index 375417d..9a6c5b4 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/SessionInfo.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/SessionInfo.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
+package com.vci.ubcs.starter.web.pagemodel;
 
 //
 // Source code recreated from a .class file by IntelliJ IDEA
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/Tree.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/Tree.java
similarity index 98%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/Tree.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/Tree.java
index 8214102..bb09378 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/Tree.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/Tree.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
+package com.vci.ubcs.starter.web.pagemodel;
 
 
 import org.springblade.core.tool.utils.StringUtil;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UIFieldSortVO.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UIFieldSortVO.java
similarity index 92%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UIFieldSortVO.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UIFieldSortVO.java
index 51ee1bd..98546ac 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UIFieldSortVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UIFieldSortVO.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
+package com.vci.ubcs.starter.web.pagemodel;
 
 //package com.vci.web.pageModel;
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UIFormReferVO.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UIFormReferVO.java
similarity index 98%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UIFormReferVO.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UIFormReferVO.java
index 3794e3d..95f365b 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UIFormReferVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UIFormReferVO.java
@@ -1,8 +1,8 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
+package com.vci.ubcs.starter.web.pagemodel;
 
 //package com.vci.web.pageModel;
 
-import java.util.List;
+
 import java.util.Map;
 
 /**
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UITableCustomDefineVO.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITableCustomDefineVO.java
similarity index 95%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UITableCustomDefineVO.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITableCustomDefineVO.java
index 823dfe1..5233015 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UITableCustomDefineVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITableCustomDefineVO.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
+package com.vci.ubcs.starter.web.pagemodel;
 
 //package com.vci.web.pageModel;
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UITableFieldVO.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITableFieldVO.java
similarity index 98%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UITableFieldVO.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITableFieldVO.java
index 6945beb..2690337 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UITableFieldVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITableFieldVO.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
+package com.vci.ubcs.starter.web.pagemodel;
 //package com.vci.web.pageModel;
 
 import java.util.ArrayList;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UITablePageVO.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITablePageVO.java
similarity index 92%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UITablePageVO.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITablePageVO.java
index badb844..e2b722a 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UITablePageVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITablePageVO.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
+package com.vci.ubcs.starter.web.pagemodel;
 
 //package com.vci.web.pageModel;
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/service/VciSecretServiceI.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/service/VciSecretServiceI.java
similarity index 74%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/service/VciSecretServiceI.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/service/VciSecretServiceI.java
index c56de15..23cb1fb 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/service/VciSecretServiceI.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/service/VciSecretServiceI.java
@@ -1,9 +1,9 @@
-package com.vci.ubcs.com.vci.starter.web.service;
+package com.vci.ubcs.starter.web.service;
 
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.vci.ubcs.com.vci.starter.web.enumpck.UserSecretEnum;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.SessionInfo;
-import com.vci.ubcs.com.vci.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.web.enumpck.UserSecretEnum;
+import com.vci.ubcs.starter.web.pagemodel.SessionInfo;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 
 public interface VciSecretServiceI {
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/toolmodel/DateConverter.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/toolmodel/DateConverter.java
similarity index 96%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/toolmodel/DateConverter.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/toolmodel/DateConverter.java
index b942198..9e280ef 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/toolmodel/DateConverter.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/toolmodel/DateConverter.java
@@ -1,7 +1,7 @@
-package com.vci.ubcs.com.vci.starter.web.toolmodel;
+package com.vci.ubcs.starter.web.toolmodel;
 
-import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
-import com.vci.ubcs.com.vci.starter.web.util.VciDateUtil;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.util.VciDateUtil;
 import org.springblade.core.tool.utils.StringUtil;
 
 import java.text.DateFormat;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/BeanUtilForVCI.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtilForVCI.java
similarity index 89%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/BeanUtilForVCI.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtilForVCI.java
index 85237cf..880ca54 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/BeanUtilForVCI.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtilForVCI.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.util;
+package com.vci.ubcs.starter.web.util;
 //
 // Source code recreated from a .class file by IntelliJ IDEA
 // (powered by FernFlower decompiler)
@@ -43,14 +43,14 @@
 	}
 
 	public static void copyDeclaredIgnoreCase(Object source, Object target, boolean ignoreNull, Map<String, String> fieldMap, Collection<String> ignoreField) {
-		Map<String, Field> sourceMap = BeanUtilForVCI.CacheFieldMap.getDeclaredFieldMap(source.getClass());
-		Map<String, Field> targetMap = BeanUtilForVCI.CacheFieldMap.getDeclaredFieldMap(target.getClass());
+		Map<String, Field> sourceMap = CacheFieldMap.getDeclaredFieldMap(source.getClass());
+		Map<String, Field> targetMap = CacheFieldMap.getDeclaredFieldMap(target.getClass());
 		copyPropertiesIgnoreCase(source, target, ignoreNull, fieldMap, ignoreField, sourceMap, targetMap);
 	}
 
 	public static void copyPropertiesIgnoreCase(Object source, Object target, boolean ignoreNull, Map<String, String> fieldMap, Collection<String> ignoreField) {
-		Map<String, Field> sourceMap = BeanUtilForVCI.CacheFieldMap.getFieldMap(source.getClass());
-		Map<String, Field> targetMap = BeanUtilForVCI.CacheFieldMap.getFieldMap(target.getClass());
+		Map<String, Field> sourceMap = CacheFieldMap.getFieldMap(source.getClass());
+		Map<String, Field> targetMap = CacheFieldMap.getFieldMap(target.getClass());
 		copyPropertiesIgnoreCase(source, target, ignoreNull, fieldMap, ignoreField, sourceMap, targetMap);
 	}
 
@@ -116,8 +116,8 @@
 		private static Map<String, Field> getFieldMap(Class clazz) {
 			Map<String, Field> result = (Map)cacheMap.get(clazz.getName());
 			if (result == null) {
-				Class var2 = BeanUtilForVCI.CacheFieldMap.class;
-				synchronized(BeanUtilForVCI.CacheFieldMap.class) {
+				Class var2 = CacheFieldMap.class;
+				synchronized(CacheFieldMap.class) {
 					if (result == null) {
 						Map<String, Field> fieldMap = new HashMap();
 						List<Field> allFields = VciBaseUtil.getAllFieldForObj(clazz);
@@ -139,8 +139,8 @@
 		private static Map<String, Field> getDeclaredFieldMap(Class clazz) {
 			Map<String, Field> result = (Map)declaredCacheMap.get(clazz.getName());
 			if (result == null) {
-				Class var2 = BeanUtilForVCI.CacheFieldMap.class;
-				synchronized(BeanUtilForVCI.CacheFieldMap.class) {
+				Class var2 = CacheFieldMap.class;
+				synchronized(CacheFieldMap.class) {
 					if (result == null) {
 						Map<String, Field> fieldMap = new HashMap();
 						Field[] allFields = clazz.getDeclaredFields();
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/ControllerUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/ControllerUtil.java
similarity index 99%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/ControllerUtil.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/ControllerUtil.java
index 314b441..e90522d 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/ControllerUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/ControllerUtil.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.util;
+package com.vci.ubcs.starter.web.util;
 
 import org.apache.commons.io.IOUtils;
 import org.slf4j.Logger;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/LangBaseUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/LangBaseUtil.java
similarity index 94%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/LangBaseUtil.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/LangBaseUtil.java
index 9739921..e0b4b85 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/LangBaseUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/LangBaseUtil.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.util;
+package com.vci.ubcs.starter.web.util;
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/Lunar.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/Lunar.java
similarity index 98%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/Lunar.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/Lunar.java
index eb7454b..13ee0b7 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/Lunar.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/Lunar.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.util;
+package com.vci.ubcs.starter.web.util;
 
 //
 // Source code recreated from a .class file by IntelliJ IDEA
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/MessageUtils.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/MessageUtils.java
similarity index 94%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/MessageUtils.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/MessageUtils.java
index cbfa31b..383d252 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/MessageUtils.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/MessageUtils.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.util;
+package com.vci.ubcs.starter.web.util;
 
 //
 // Source code recreated from a .class file by IntelliJ IDEA
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/VciBaseUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
similarity index 97%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/VciBaseUtil.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
index 58336f4..4cc6e8d 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/VciBaseUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.util;
+package com.vci.ubcs.starter.web.util;
 
 //
 // Source code recreated from a .class file by IntelliJ IDEA
@@ -8,9 +8,9 @@
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.SessionInfo;
-import com.vci.ubcs.com.vci.starter.web.toolmodel.DateConverter;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.pagemodel.SessionInfo;
+import com.vci.ubcs.starter.web.toolmodel.DateConverter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.util.CollectionUtils;
@@ -45,15 +45,6 @@
 
 	public static String getPk() {
 		return UUID.randomUUID().toString();
-	}
-
-	public static SessionInfo getCurrentUserSessionInfo() throws VciBaseException {
-		SessionInfo si = getCurrentUserSessionInfoNotException();
-		if (si == null) {
-			throw new VciBaseException("noLogin", new String[]{"娌℃湁褰撳墠鐢ㄦ埛淇℃伅"});
-		} else {
-			return si;
-		}
 	}
 
 	public static int getIntForBoolean(boolean b) {
@@ -1084,10 +1075,6 @@
 		}
 	}
 
-	public static SessionInfo getCurrentUserSessionInfoNotException() {
-		return (SessionInfo) WebThreadLocalUtil.getCurrentUserSessionInfoInThread().get();
-	}
-
 	public static String getStringValueFromObject(Object obj) {
 		if (obj == null) {
 			return "";
@@ -1105,6 +1092,11 @@
 		}
 	}
 
+	public static SessionInfo getCurrentUserSessionInfoNotException() {
+		return (SessionInfo) WebThreadLocalUtil.getCurrentUserSessionInfoInThread().get();
+	}
+
+
 	public static <T> Collection<Collection<T>> switchCollectionForOracleIn(Collection<T> list) {
 		return switchCollectionForOracleIn(list, 500);
 	}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/VciDateUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciDateUtil.java
similarity index 99%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/VciDateUtil.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciDateUtil.java
index 5ab4990..72d278d 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/VciDateUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciDateUtil.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.util;
+package com.vci.ubcs.starter.web.util;
 //
 // Source code recreated from a .class file by IntelliJ IDEA
 // (powered by FernFlower decompiler)
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/WebThreadLocalUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/WebThreadLocalUtil.java
similarity index 89%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/WebThreadLocalUtil.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/WebThreadLocalUtil.java
index c9a342a..3d42b61 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/WebThreadLocalUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/WebThreadLocalUtil.java
@@ -1,4 +1,4 @@
-package com.vci.ubcs.com.vci.starter.web.util;
+package com.vci.ubcs.starter.web.util;
 
 //
 // Source code recreated from a .class file by IntelliJ IDEA
@@ -8,7 +8,7 @@
 //package com.vci.starter.web.util;
 
 
-import com.vci.ubcs.com.vci.starter.web.pagemodel.SessionInfo;
+import com.vci.ubcs.starter.web.pagemodel.SessionInfo;
 
 public class WebThreadLocalUtil {
 	private static ThreadLocal<SessionInfo> currentUserSessionInfoInThread = new ThreadLocal();
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/WebUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/WebUtil.java
similarity index 98%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/WebUtil.java
rename to Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/WebUtil.java
index 08f31bc..824a381 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/WebUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/WebUtil.java
@@ -1,12 +1,12 @@
-package com.vci.ubcs.com.vci.starter.web.util;
+package com.vci.ubcs.starter.web.util;
 
 //package com.vci.web.util;
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.SessionInfo;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.pagemodel.SessionInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
@@ -84,7 +84,7 @@
 	 * @return 褰撳墠鐢ㄦ埛淇℃伅
 	 * @throws VciBaseException 娌℃湁鐧诲綍浼氭姏鍑哄紓甯�
 	 */
-	public static SessionInfo getCurrentUserSessionInfo() throws VciBaseException{
+	public static SessionInfo getCurrentUserSessionInfo() throws VciBaseException {
 		SessionInfo si= getCurrentUserSessionInfoNotException();
 		if(si==null){
 			throw new VciBaseException("noLogin",new String[]{"娌℃湁褰撳墠鐢ㄦ埛淇℃伅"});
diff --git a/Source/UBCS/ubcs-service/pom.xml b/Source/UBCS/ubcs-service/pom.xml
index 15ae54a..5fed78c 100644
--- a/Source/UBCS/ubcs-service/pom.xml
+++ b/Source/UBCS/ubcs-service/pom.xml
@@ -23,6 +23,7 @@
         <module>ubcs-user</module>
         <module>ubcs-code</module>
         <module>ubcs-omd</module>
+        <module>ubcs-ddl</module>
     </modules>
 
     <dependencies>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/pom.xml b/Source/UBCS/ubcs-service/ubcs-code/pom.xml
index 259f510..f87d98f 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/pom.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/pom.xml
@@ -23,14 +23,22 @@
             <version>3.0.1.RELEASE</version>
             <scope>compile</scope>
         </dependency>
-
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-ddl</artifactId>
+            <version>3.0.1.RELEASE</version>
+        </dependency>
         <dependency>
             <groupId>com.vci.ubcs</groupId>
             <artifactId>ubcs-omd-api</artifactId>
             <version>3.0.1.RELEASE</version>
             <scope>compile</scope>
         </dependency>
-
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-util-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+        </dependency>
         <dependency>
             <groupId>com.oracle.database.jdbc</groupId>
             <artifactId>ojdbc8</artifactId>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java
deleted file mode 100644
index 904cf38..0000000
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package com.vci.ubcs.code;
-
-import org.springblade.core.cloud.client.UbcsCloudApplication;
-import org.springblade.core.launch.UbcsApplication;
-import org.springblade.core.launch.constant.AppConstant;
-
-/**
- * Code鍚姩鍣�
- *
- * @author
- * ludc
- */
-@UbcsCloudApplication
-public class CodeApplication {
-
-	public static void main(String[] args) {
-		UbcsApplication.run(AppConstant.APPLICATION_NAME_CODE, CodeApplication.class, args);
-	}
-
-}
-
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/pom.xml b/Source/UBCS/ubcs-service/ubcs-ddl/pom.xml
new file mode 100644
index 0000000..3a76ae5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/pom.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-service</artifactId>
+        <groupId>com.vci.ubcs</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-ddl</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-ddl-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-util-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>com.vci</groupId>
+            <artifactId>vci-starter-word</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-swagger</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java
new file mode 100644
index 0000000..26520c4
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java
@@ -0,0 +1,68 @@
+package com.vci.ubcs.ddl.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.ddl.bo.DdlTableBO;
+import com.vci.ubcs.ddl.service.IDdlService;
+import com.vci.ubcs.omd.dto.OmdBtmTypeDTO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * Description: 鏁版嵁搴撴搷浣滄帶鍒跺櫒
+ *
+ * @author LiHang
+ * @date 2023/4/25
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/ddl")
+@Api(value = "鏁版嵁搴撴搷浣�", tags = "鏁版嵁搴撴搷浣�")
+public class DdlController {
+
+	@Autowired
+	private IDdlService ddlService;
+
+	/**
+	 * 鏂板鎴栦慨鏀规暟鎹簱琛�
+	 * @param dto 涓氬姟绫诲瀷
+	 * @return 鎵ц缁撴灉
+	 */
+	@PostMapping("/submitBtmType")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆涓氬姟绫诲瀷浼犺緭瀵硅薄")
+	public R submitBtmType(@Valid @RequestBody OmdBtmTypeDTO dto) {
+		return ddlService.submitBtmType(dto);
+	}
+
+	/**
+	 * 鏍规嵁琛ㄥ悕鑾峰彇瀛楁淇℃伅
+	 * @param tableName 琛ㄥ悕
+	 * @return 鎵ц缁撴灉
+	 */
+	@GetMapping("/getTableColumnByTableName")
+	@ApiOperation(value = "鎸夎〃鍚嶈幏鍙栬〃瀛楁淇℃伅",notes = "浼犲叆琛ㄥ悕")
+	@ApiOperationSupport(order = 3)
+	public R<DdlTableBO> getTableColumnByTableName(String tableName){
+		return R.data(ddlService.getTableColumnByTableName(tableName));
+	}
+
+	/**
+	 * 鑾峰彇鎵�鏈夌殑琛ㄤ俊鎭�
+	 * @return 琛ㄤ俊鎭�
+	 */
+	@GetMapping("/getAllTableInfo")
+	@ApiOperation(value = "鑾峰彇鎵�鏈夌殑琛ㄤ俊鎭�")
+	@ApiOperationSupport(order = 4)
+	public R<List<DdlTableBO>> getAllTableInfo(){
+		return R.data(ddlService.getAllTableInfo());
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMSMapper.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMSMapper.java
new file mode 100644
index 0000000..f0d0635
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMSMapper.java
@@ -0,0 +1,128 @@
+package com.vci.ubcs.ddl.mapper;
+
+import com.vci.ubcs.ddl.bo.DdlTableBO;
+import com.vci.ubcs.ddl.bo.DdlTableInDataBaseBO;
+import org.apache.ibatis.annotations.*;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * Description: SqlServer鏁版嵁搴撴搷浣滅被
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Repository
+public interface DdlMSMapper extends DdlMapper{
+
+	/**
+	 * 鍚戞暟鎹簱琛ㄤ腑娣诲姞鍗曚釜瀛楁
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param attributeSql 瑕佹坊鍔犵殑鏂扮殑sql
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	@Update("alter table ${tableName} add ${attributeSql} ")
+	@ResultType(Integer.class)
+	@Override
+	int addColumn2TableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
+
+	/**
+	 * 鍗曚釜淇敼鏁版嵁琛ㄧ殑瀛楁
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param attributeSql 灞炴�ф柊鐨剆ql
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	@Update("alter table ${tableName} ALTER COLUMN ${attributeSql} ")
+	@ResultType(Integer.class)
+	@Override
+	int modifyTableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
+
+	/**
+	 * 鍒犻櫎琛ㄦ牸
+	 * @param tableName 琛ㄦ牸鍚嶇О
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	@Update("drop table if exists ${tableName}")
+	@ResultType(Integer.class)
+	@Override
+	int dropTable(@Param("tableName") String tableName);
+
+	/**
+	 * 鏍¢獙鏁版嵁搴撹〃鎴栬�呰鍥炬槸鍚﹀瓨鍦�--ms sql
+	 * @param tableName 琛ㄦ牸鍚嶇О
+	 * @return 瀛樺湪鐨勪釜鏁�
+	 */
+	@Select("select count(name) from sysobjects where type in ('U','V') and upper(name) = upper(#{tableName,jdbcType=VARCHAR})")
+	@ResultType(Integer.class)
+	@Override
+	int checkTableExist(@Param("tableName") String tableName);
+
+	/**
+	 * 鏌ヨ琛ㄦ牸鐨勫瓧娈典俊鎭�--sql server
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @return 鏁版嵁搴撹〃鐨勫瓧娈典俊鎭�
+	 */
+	@ResultMap("ddlTableColumnInfo")
+	@Select("")
+	List<DdlTableInDataBaseBO> selectTableColumnInfo(@Param("tableName") String tableName);
+
+	/**
+	 * 鍒犻櫎琛ㄦ牸涓殑鍒�
+	 * @param tableName 琛ㄥ悕绉�
+	 * @param columnName 鍒楀悕绉�
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	int dropTableColumn(@Param("tableName")String tableName, @Param("columnName")String columnName);
+
+
+	/**
+	 * 鑾峰彇鎵�鏈夌殑琛ㄦ牸鍚嶇О
+	 * @return 琛ㄦ牸鍚嶇О
+	 */
+	@Select("select name from sysobjects where type in ('U','V')")
+	List<String> selectAllTableName();
+
+	/**
+	 * 鏌ヨ琛ㄦ牸鐨勪腑鏂囧悕绉�
+	 * @param tableName 琛ㄦ牸鍚嶇О
+	 * @return 琛ㄦ牸鍚嶇О鍜岃〃鏍间腑鏂囧悕绉�
+	 */
+	DdlTableBO selectTableComment(@Param("tableName")String tableName);
+
+
+	/**
+	 * 鍒涘缓鏁版嵁搴撹〃
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param attributeSql 灞炴�х殑sql
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	@Update("create table ${tableName} ( ${attributeSql} )")
+	@ResultType(Integer.class)
+	@Override
+	int createTableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
+
+	/**
+	 * 涓鸿〃鏍兼坊鍔犳敞閲婂唴瀹�
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param comment 娉ㄩ噴鐨勫唴瀹�
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Update("COMMENT ON TABLE ${tableName}  IS '${comment}' ")
+	@ResultType(Integer.class)
+	@Override
+	int commentTable(@Param("tableName") String tableName, @Param("comment") String comment);
+
+	/**
+	 * 涓鸿〃鏍肩殑鍒楁坊鍔犳敞閲婂唴瀹�
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param columnName 鍒�
+	 * @param comment 娉ㄩ噴鐨勫唴瀹�
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Update("COMMENT ON column ${tableName}.${columnName} IS '${comment}' ")
+	@ResultType(Integer.class)
+	@Override
+	int commentColumnTable(@Param("tableName") String tableName,@Param("columnName")String columnName, @Param("comment") String comment);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMapper.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMapper.java
new file mode 100644
index 0000000..ad76302
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMapper.java
@@ -0,0 +1,127 @@
+package com.vci.ubcs.ddl.mapper;
+
+import com.vci.ubcs.ddl.bo.DdlTableBO;
+import com.vci.ubcs.ddl.bo.DdlTableInDataBaseBO;
+import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.type.JdbcType;
+
+import java.util.List;
+
+/**
+ * Description: 鏁版嵁搴撴搷浣�
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+public interface DdlMapper {
+	/**
+	 * 缁熻琛ㄦ牸涓湁澶氬皯鏁版嵁
+	 * @param tableName 琛ㄦ牸鍚嶇О
+	 * @return 鏁版嵁鐨勬�绘暟
+	 */
+	@Select( "select count(*) from ${tableName}")
+	@ResultType(Integer.class)
+	int countAll(@Param("tableName")String tableName);
+
+	/**
+	 * 鏍规嵁SQL璇彞鍒涘缓瑙嗗浘
+	 * @param viewCreateSql
+	 * @return 褰卞搷琛屾暟
+	 */
+	@Update("${viewCreateSql}")
+	@ResultType(Integer.class)
+	int createViewBySql(@Param("viewCreateSql") String viewCreateSql);
+
+	/**
+	 * 鏍规嵁sql璇彞鎻掑叆鏁版嵁
+	 * @param insertSql 瑕佹墽琛岀殑sql璇彞
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	@Insert("${insertSql}")
+	@ResultType(Integer.class)
+	int insertBySql(@Param("insertSql")String insertSql);
+
+	/**
+	 * 鍒涘缓鏁版嵁搴撹〃
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param attributeSql 灞炴�х殑sql
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	@Update("create table ${tableName} ( ${attributeSql} )")
+	@ResultType(Integer.class)
+	int createTableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
+
+	/**
+	 * 涓鸿〃鏍兼坊鍔犳敞閲婂唴瀹�
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param comment 娉ㄩ噴鐨勫唴瀹�
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Update("COMMENT ON TABLE ${tableName}  IS '${comment}' ")
+	@ResultType(Integer.class)
+	int commentTable(@Param("tableName") String tableName, @Param("comment") String comment);
+
+	/**
+	 * 涓鸿〃鏍肩殑鍒楁坊鍔犳敞閲婂唴瀹�
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param columnName 鍒�
+	 * @param comment 娉ㄩ噴鐨勫唴瀹�
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Update("COMMENT ON column ${tableName}.${columnName} IS '${comment}' ")
+	@ResultType(Integer.class)
+	int commentColumnTable(@Param("tableName") String tableName,@Param("columnName")String columnName, @Param("comment") String comment);
+
+	/**
+	 * 鏍¢獙鏁版嵁搴撹〃鎴栬�呰鍥炬槸鍚﹀瓨鍦�
+	 * @param tableName 琛ㄦ牸鐨勫悕绉帮紝涓嶅尯鍒嗗ぇ灏忓啓
+	 * @return 瀛樺湪鐨勪釜鏁�
+	 */
+	@Select( "select count(table_name) from user_tables where upper(table_name) = upper(#{tableName,jdbcType=VARCHAR})")
+	@ResultType(Integer.class)
+	int checkTableExist(@Param("tableName") String tableName);
+
+	/**
+	 * 鏌ヨ琛ㄦ牸鐨勫瓧娈典俊鎭�
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @return 鏁版嵁搴撹〃鐨勫瓧娈典俊鎭�
+	 */
+	@Results(id="ddlTableColumnInfo",value = {
+		@Result(property = "id",column = "COLUMN_NAME",jdbcType = JdbcType.VARCHAR),
+		@Result(property = "name",column = "COMMENTS",jdbcType = JdbcType.VARCHAR),
+		@Result(property = "attrDataType",column = "DATA_TYPE",jdbcType = JdbcType.VARCHAR),
+		@Result(property = "attributeLength",column = "DATA_LENGTH",jdbcType = JdbcType.DECIMAL),
+		@Result(property = "nullableFlag",column = "NULLABLE",jdbcType = JdbcType.VARCHAR),
+		@Result(property = "precisionLength",column = "DATA_PRECISION",jdbcType = JdbcType.DECIMAL),
+		@Result(property = "scaleLength",column = "DATA_SCALE",jdbcType = JdbcType.DECIMAL)
+	})
+	@Select("SELECT t.column_name,t.data_type,t.data_length,t.nullable,t.data_precision,t.data_scale,c.comments FROM user_tab_columns t inner JOIN user_col_comments c on t.TABLE_NAME  = c.table_name and t.COLUMN_NAME = c.column_name where t.table_name = upper(#{tableName,jdbcType=VARCHAR}) order by t.column_name asc")
+	List<DdlTableInDataBaseBO> selectTableColumnInfo(@Param("tableName") String tableName);
+
+	/**
+	 * 鑾峰彇鎵�鏈夌殑琛ㄦ牸鍚嶇О
+	 * @return 琛ㄦ牸鍚嶇О
+	 */
+	@Select("select table_name from user_tables order by table_name asc")
+	List<String> selectAllTableName();
+
+	/**
+	 * 鏌ヨ琛ㄦ牸鐨勪腑鏂囧悕绉�
+	 * @param tableName 琛ㄦ牸鍚嶇О
+	 * @return 琛ㄦ牸鍚嶇О鍜岃〃鏍间腑鏂囧悕绉�
+	 */
+	@Results(id="ddlTableInfo",value = {
+		@Result(property = "tableName",column = "TABLE_NAME",jdbcType = JdbcType.VARCHAR),
+		@Result(property = "tableDesc",column = "COMMENTS",jdbcType = JdbcType.VARCHAR)
+	})
+	@Select("select table_name,comments from user_tab_comments where table_name = upper(#{tableName,jdbcType=VARCHAR}) ")
+	DdlTableBO selectTableComment(@Param("tableName")String tableName);
+
+	int addColumn2TableBySql(String tableName, String attributeSql);
+
+	int modifyTableBySql(String tableName, String attributeSql);
+
+	int dropTable(String tableName);
+
+	int dropTableColumn(String tableName, String columnName);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMySqlMapper.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMySqlMapper.java
new file mode 100644
index 0000000..80ad6ae
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMySqlMapper.java
@@ -0,0 +1,121 @@
+package com.vci.ubcs.ddl.mapper;
+
+import com.vci.ubcs.ddl.bo.DdlTableBO;
+import com.vci.ubcs.ddl.bo.DdlTableInDataBaseBO;
+import org.apache.ibatis.annotations.*;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * Description: MySql鏁版嵁搴撴搷浣滅被
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Repository
+public interface DdlMySqlMapper extends DdlMapper{
+	/**
+	 * 鍒涘缓鏁版嵁搴撹〃
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param attributeSql 灞炴�х殑sql
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	@Update("create table ${tableName} ( ${attributeSql} )")
+	@ResultType(Integer.class)
+	int createTableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
+
+	/**
+	 * 涓鸿〃鏍兼坊鍔犳敞閲婂唴瀹�
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param comment 娉ㄩ噴鐨勫唴瀹�
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Update("COMMENT ON TABLE ${tableName}  IS '${comment}' ")
+	@ResultType(Integer.class)
+	int commentTable(@Param("tableName") String tableName, @Param("comment") String comment);
+
+
+	/**
+	 * 涓鸿〃鏍肩殑鍒楁坊鍔犳敞閲婂唴瀹�
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param columnName 鍒�
+	 * @param comment 娉ㄩ噴鐨勫唴瀹�
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Update("COMMENT ON column ${tableName}.${columnName} IS '${comment}' ")
+	@ResultType(Integer.class)
+	int commentColumnTable(@Param("tableName") String tableName,@Param("columnName")String columnName, @Param("comment") String comment);
+
+
+	/**
+	 * 鎵归噺淇敼鏁版嵁搴撶殑瀛楁--
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param attributeSql 灞炴�ф柊鐨剆ql
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	@Update("alter table ${tableName} ${attributeSql} ")
+	@ResultType(Integer.class)
+	int modifyTableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
+
+	/**
+	 * 鍚戞暟鎹簱琛ㄤ腑鎵归噺娣诲姞瀛楁
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param attributeSql 瑕佹坊鍔犵殑鏂扮殑sql
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	@Update("alter table ${tableName} ${attributeSql} ")
+	@ResultType(Integer.class)
+	int addColumn2TableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
+
+	/**
+	 * 鍒犻櫎琛ㄦ牸
+	 * @param tableName 琛ㄦ牸鍚嶇О
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	@Update("drop table if exists ${tableName}")
+	@ResultType(Integer.class)
+	int dropTable(@Param("tableName") String tableName);
+
+	/**
+	 * 鏍¢獙鏁版嵁搴撹〃鎴栬�呰鍥�
+	 * @param tableName 琛ㄦ牸鍚嶇О
+	 * @return 瀛樺湪鐨勪釜鏁�
+	 */
+	@Select("use information_scheam;select count(table_name) from tables where table_name = #{tableName,jdbcType=VARCHAR}")
+	@ResultType(Integer.class)
+	int checkTableExist(@Param("tableName") String tableName);
+
+	/**
+	 * 鏌ヨ琛ㄦ牸鐨勫瓧娈典俊鎭�--sql server
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @return 鏁版嵁搴撹〃鐨勫瓧娈典俊鎭�
+	 */
+	@ResultMap("ddlTableColumnInfo")
+	@Select("")
+	List<DdlTableInDataBaseBO> selectTableColumnInfo(@Param("tableName")String tableName);
+
+	/**
+	 * 鍒犻櫎琛ㄦ牸涓殑鍒�
+	 * @param tableName 琛ㄥ悕绉�
+	 * @param columnName 鍒楀悕绉�
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int dropTableColumn(@Param("tableName")String tableName, @Param("columnName")String columnName);
+
+
+	/**
+	 * 鑾峰彇鎵�鏈夌殑琛ㄦ牸鍚嶇О
+	 * @return 琛ㄦ牸鍚嶇О
+	 */
+	@Select("use information_scheam;select table_name from tables")
+	List<String> selectAllTableName();
+
+	/**
+	 * 鏌ヨ琛ㄦ牸鐨勪腑鏂囧悕绉�
+	 * @param tableName 琛ㄦ牸鍚嶇О
+	 * @return 琛ㄦ牸鍚嶇О鍜岃〃鏍间腑鏂囧悕绉�
+	 */
+	DdlTableBO selectTableComment(@Param("tableName")String tableName);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlOracleMapper.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlOracleMapper.java
new file mode 100644
index 0000000..623c4d4
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlOracleMapper.java
@@ -0,0 +1,58 @@
+package com.vci.ubcs.ddl.mapper;
+
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.ResultType;
+import org.apache.ibatis.annotations.Update;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Description: Oracle鏁版嵁搴撴搷浣�
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Repository
+public interface DdlOracleMapper extends DdlMapper{
+
+	/**
+	 * 鍒犻櫎琛ㄦ牸涓殑鍒�
+	 * @param tableName 琛ㄥ悕绉�
+	 * @param columnName 鍒楀悕绉�
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Update("alter table ${tableName} DROP COLUMN ${columnName}")
+	@Override
+	int dropTableColumn(@Param("tableName")String tableName, @Param("columnName")String columnName);
+
+	/**
+	 * 鍒犻櫎琛ㄦ牸
+	 * @param tableName 琛ㄦ牸鍚嶇О
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	@Update("drop table if exists ${tableName}")
+	@ResultType(Integer.class)
+	@Override
+	int dropTable(@Param("tableName") String tableName);
+
+	/**
+	 * 鎵归噺淇敼鏁版嵁搴撹〃鐨勫瓧娈�
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param attributeSql 淇敼鐨勫睘鎬х殑sql
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	@Update("alter table ${tableName} modify ( ${attributeSql} ) ")
+	@ResultType(Integer.class)
+	@Override
+	int modifyTableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
+
+	/**
+	 * 鍚戞暟鎹簱琛ㄤ腑鎵归噺娣诲姞瀛楁
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param attributeSql 瑕佹坊鍔犵殑鏂扮殑sql
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	@Update("alter table ${tableName} add ( ${attributeSql} )")
+	@ResultType(Integer.class)
+	@Override
+	int addColumn2TableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMapper.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMapper.java
new file mode 100644
index 0000000..d7664a2
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMapper.java
@@ -0,0 +1,29 @@
+package com.vci.ubcs.ddl.mapper;
+
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/25
+ */
+public interface DllMapper {
+
+	int createViewBySql(String viewCreateSql);
+
+	int createTableBySql(String tableName,String attributeSql);
+
+	int checkTableExist(String tableName);
+
+	int countAll(String tableName);
+
+	int commentTable(String tableName, String comment);
+
+	int commentColumnTable(String tableName, String columnName, String comment);
+
+	int modifyTableBySql(String tableName, String attributeSql);
+
+	int addColumn2TableBySql(String tableName, String attributeSql);
+
+	int dropTable(String tableName);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMsMapper.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMsMapper.java
new file mode 100644
index 0000000..040ebd3
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMsMapper.java
@@ -0,0 +1,13 @@
+package com.vci.ubcs.ddl.mapper;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/25
+ */
+@Repository
+public interface DllMsMapper extends DllMapper{
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllOracleMapper.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllOracleMapper.java
new file mode 100644
index 0000000..6f65574
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllOracleMapper.java
@@ -0,0 +1,53 @@
+package com.vci.ubcs.ddl.mapper;
+
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.ResultType;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Description: oracle鐨勬暟鎹簱鎿嶄綔
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Repository
+public interface DllOracleMapper extends DllMapper{
+	@Update({"${viewCreateSql}"})
+	@Override
+	int createViewBySql(@Param("viewCreateSql") String viewCreateSql);
+
+	@Update({"create table ${tableName} ( ${attributeSql} )"})
+	@Override
+	int createTableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
+
+	@Update({"COMMENT ON TABLE ${tableName}  IS '${comment}' "})
+	@Override
+	int commentTable(@Param("tableName") String tableName, @Param("comment") String comment);
+
+	@Update({"COMMENT ON column ${tableName}.${columnName} IS '${comment}' "})
+	@Override
+	int commentColumnTable(@Param("tableName") String tableName, @Param("columnName") String columnName, @Param("comment") String comment);
+
+	@Update({"alter table ${tableName} modify ( ${attributeSql} ) "})
+	@Override
+	int modifyTableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
+
+	@Update({"alter table ${tableName} add ( ${attributeSql} )"})
+	@Override
+	int addColumn2TableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
+
+	@Update({"drop table if exists ${tableName}"})
+	@Override
+	int dropTable(@Param("tableName") String tableName);
+
+	@Select({"select count(table_name) from user_tables where upper(table_name) = upper(#{tableName,jdbcType=VARCHAR})"})
+	@Override
+	int checkTableExist(@Param("tableName") String tableName);
+
+	@Select({"select count(*) from ${tableName}"})
+	@ResultType(Integer.class)
+	@Override
+	int countAll(@Param("tableName") String tableName);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllSqlLiteMapper.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllSqlLiteMapper.java
new file mode 100644
index 0000000..344a14c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllSqlLiteMapper.java
@@ -0,0 +1,41 @@
+package com.vci.ubcs.ddl.mapper;
+
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.ResultType;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Description:sqlLite鐨勬暟鎹簱鎿嶄綔绫�
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Repository
+public interface DllSqlLiteMapper extends DllMapper {
+	@Update({"${viewCreateSql}"})
+	@ResultType(Integer.class)
+	@Override
+	int createViewBySql(@Param("viewCreateSql") String viewCreateSql);
+
+	@Update({"create table ${tableName} ( ${attributeSql} )"})
+	@ResultType(Integer.class)
+	@Override
+	int createTableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
+
+	@Select({"select count(name) from sqlite_master where upper(name) = upper(#{tableName,jdbcType=VARCHAR})"})
+	@ResultType(Integer.class)
+	@Override
+	int checkTableExist(@Param("tableName") String tableName);
+
+	@Select({"select count(*) from ${tableName}"})
+	@ResultType(Integer.class)
+	@Override
+	int countAll(@Param("tableName") String tableName);
+
+	@Select({"drop table ${tableName}"})
+	@ResultType(Integer.class)
+	@Override
+	int dropTable(String tableName);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlBehavior.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlBehavior.java
new file mode 100644
index 0000000..d47fee3
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlBehavior.java
@@ -0,0 +1,13 @@
+package com.vci.ubcs.ddl.processor.ddl;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/25
+ */
+public interface DdlBehavior {
+	String SPACE = " ";
+
+	void modifyTableBySqlBase(String tableName,String attributeSql);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java
new file mode 100644
index 0000000..86caebf
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java
@@ -0,0 +1,35 @@
+package com.vci.ubcs.ddl.processor.ddl;
+
+import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
+import org.springframework.beans.factory.annotation.Value;
+
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+public class DdlMapperProcessStrategy {
+
+	@Value("${spring.datasource.driver-class-name}")
+	private static final String DATABASE_DRIVER = "";
+
+	public static List<DdlMapperProcessor> processors = Lists.newArrayList();
+
+	static {
+		processors.add(new DdlMsMapperProcessor());
+		processors.add(new DdlMySqlMapperProcessor());
+		processors.add(new DdlOracleMapperProcessor());
+	}
+
+	public static DdlMapperProcessor getProcessor(){
+		for (DdlMapperProcessor processor : processors) {
+			if (processor.support(DATABASE_DRIVER)){
+				return processor;
+			}
+		}
+		return DdlOracleMapperProcessor.SINGLE.INSTANCE;
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessor.java
new file mode 100644
index 0000000..4a94892
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessor.java
@@ -0,0 +1,156 @@
+package com.vci.ubcs.ddl.processor.ddl;
+
+import com.vci.ubcs.ddl.bo.DdlTableBO;
+import com.vci.ubcs.ddl.bo.DdlTableInDataBaseBO;
+import com.vci.ubcs.ddl.mapper.DdlMapper;
+
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+public abstract class DdlMapperProcessor implements DdlBehavior{
+
+	public DdlMapperProcessor(DdlMapper mapper) {
+		this.mapper = mapper;
+	}
+
+	private final DdlMapper mapper;
+
+	abstract boolean support(String url);
+
+	/**
+	 * 缁熻琛ㄦ牸涓湁澶氬皯鏁版嵁
+	 * @param tableName 琛ㄦ牸鍚嶇О
+	 * @return 鏁版嵁鐨勬�绘暟
+	 */
+	public int countAll(String tableName){
+		return mapper.countAll(tableName);
+	}
+
+	/**
+	 * 鏍规嵁SQL璇彞鍒涘缓瑙嗗浘
+	 * @param viewCreateSql
+	 * @return 褰卞搷琛屾暟
+	 */
+	public int createViewBySql( String viewCreateSql){
+		return mapper.createViewBySql(viewCreateSql);
+	}
+
+	/**
+	 * 鏍规嵁sql璇彞鎻掑叆鏁版嵁
+	 * @param insertSql 瑕佹墽琛岀殑sql璇彞
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	public int insertBySql(String insertSql){
+		return mapper.insertBySql(insertSql);
+	}
+
+	/**
+	 * 鍒涘缓鏁版嵁搴撹〃
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param attributeSql 灞炴�х殑sql
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	public int createTableBySql(String tableName, String attributeSql){
+		return mapper.createTableBySql(tableName,attributeSql);
+	}
+
+	/**
+	 * 涓鸿〃鏍兼坊鍔犳敞閲婂唴瀹�
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param comment 娉ㄩ噴鐨勫唴瀹�
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	public int commentTable(String tableName,  String comment){
+		return mapper.commentTable(tableName,comment);
+	}
+
+	/**
+	 * 涓鸿〃鏍肩殑鍒楁坊鍔犳敞閲婂唴瀹�
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param columnName 鍒�
+	 * @param comment 娉ㄩ噴鐨勫唴瀹�
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	public int commentColumnTable(String tableName,String columnName,  String comment){
+		return mapper.commentColumnTable(tableName,columnName,comment);
+	}
+
+	/**
+	 * 鏍¢獙鏁版嵁搴撹〃鎴栬�呰鍥炬槸鍚﹀瓨鍦�
+	 * @param tableName 琛ㄦ牸鐨勫悕绉帮紝涓嶅尯鍒嗗ぇ灏忓啓
+	 * @return 瀛樺湪鐨勪釜鏁�
+	 */
+	public int checkTableExist( String tableName){
+		return mapper.checkTableExist(tableName);
+	}
+
+	/**
+	 * 鏌ヨ琛ㄦ牸鐨勫瓧娈典俊鎭�
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @return 鏁版嵁搴撹〃鐨勫瓧娈典俊鎭�
+	 */
+	public List<DdlTableInDataBaseBO> selectTableColumnInfo( String tableName){
+		return mapper.selectTableColumnInfo(tableName);
+	}
+
+	/**
+	 * 鑾峰彇鎵�鏈夌殑琛ㄦ牸鍚嶇О
+	 * @return 琛ㄦ牸鍚嶇О
+	 */
+	public List<String> selectAllTableName(){
+		return mapper.selectAllTableName();
+	}
+
+	/**
+	 * 鏌ヨ琛ㄦ牸鐨勪腑鏂囧悕绉�
+	 * @param tableName 琛ㄦ牸鍚嶇О
+	 * @return 琛ㄦ牸鍚嶇О鍜岃〃鏍间腑鏂囧悕绉�
+	 */
+	public DdlTableBO selectTableComment(String tableName){
+		return mapper.selectTableComment(tableName);
+	}
+
+	/**
+	 * 鍚戞暟鎹簱琛ㄤ腑娣诲姞鍗曚釜瀛楁
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param attributeSql 瑕佹坊鍔犵殑鏂扮殑sql
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	public int addColumn2TableBySql(String tableName, String attributeSql){
+		return mapper.addColumn2TableBySql(tableName,attributeSql);
+	}
+
+	/**
+	 * 鍗曚釜淇敼鏁版嵁琛ㄧ殑瀛楁
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @param attributeSql 灞炴�ф柊鐨剆ql
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	public int modifyTableBySql( String tableName, String attributeSql){
+		return mapper.modifyTableBySql(tableName,attributeSql);
+	}
+
+	/**
+	 * 鍒犻櫎琛ㄦ牸
+	 * @param tableName 琛ㄦ牸鍚嶇О
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	public int dropTable( String tableName){
+		return mapper.dropTable(tableName);
+	}
+
+	/**
+	 * 鍒犻櫎琛ㄦ牸涓殑鍒�
+	 * @param tableName 琛ㄥ悕绉�
+	 * @param columnName 鍒楀悕绉�
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	public int dropTableColumn(String tableName,String columnName){
+		return mapper.dropTableColumn(tableName,columnName);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMsMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMsMapperProcessor.java
new file mode 100644
index 0000000..729658f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMsMapperProcessor.java
@@ -0,0 +1,69 @@
+package com.vci.ubcs.ddl.processor.ddl;
+
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.ddl.mapper.DdlMSMapper;
+import com.vci.ubcs.ddl.mapper.DdlMapper;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Description: SqlServer鐨勬暟鎹簱鎿嶄綔
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+public class DdlMsMapperProcessor extends DdlMapperProcessor{
+
+	@Resource
+	private DdlMSMapper msMapper;
+
+	private static DdlMapper mapper;
+
+	@PostConstruct
+	public void init(){
+		mapper = msMapper;
+	}
+
+	public DdlMsMapperProcessor() {
+		super(mapper);
+	}
+
+	@Override
+	public boolean support(String url) {
+		return "com.microsoft.sqlserver.jdbc.SQLServerDriver".equals(url);
+	}
+
+	@Override
+	public void modifyTableBySqlBase(String tableName, String attributeSql) {
+		List<String> modifyColumnSqlList = VciBaseUtil.str2List(attributeSql);
+		if (!CollectionUtils.isEmpty(modifyColumnSqlList)) {
+			modifyColumnSqlList.stream().forEach(s -> {
+				mapper.modifyTableBySql(tableName, s);
+			});
+		}
+	}
+
+	/**
+	 * 鍚戞暟鎹簱琛ㄤ腑娣诲姞鍗曚釜瀛楁
+	 *
+	 * @param tableName    琛ㄦ牸鐨勫悕绉�
+	 * @param attributeSql 瑕佹坊鍔犵殑鏂扮殑sql
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	@Override
+	public int addColumn2TableBySql(String tableName, String attributeSql) {
+		List<String> modifyColumnSqlList = VciBaseUtil.str2List(attributeSql);
+		List<Integer> result = new ArrayList<>();
+		if (!CollectionUtils.isEmpty(modifyColumnSqlList)) {
+			modifyColumnSqlList.stream().forEach(s -> {
+				result.add(mapper.addColumn2TableBySql(tableName, s));
+			});
+			return result.stream().mapToInt(Integer::intValue).sum();
+		}
+		return 0;
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMySqlMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMySqlMapperProcessor.java
new file mode 100644
index 0000000..14c08ce
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMySqlMapperProcessor.java
@@ -0,0 +1,72 @@
+package com.vci.ubcs.ddl.processor.ddl;
+
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.ddl.mapper.DdlMapper;
+import com.vci.ubcs.ddl.mapper.DdlMySqlMapper;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * Description:MySql鐨勬暟鎹簱鎿嶄綔
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Repository
+public class DdlMySqlMapperProcessor extends DdlMapperProcessor{
+
+	@Resource
+	private DdlMySqlMapper myMapper;
+
+	private static DdlMapper mapper;
+
+	@PostConstruct
+	public void init(){
+		mapper = myMapper;
+	}
+
+	public DdlMySqlMapperProcessor() {
+		super(mapper);
+	}
+
+	@Override
+	public boolean support(String url) {
+		return "com.mysql.cj.jdbc.Driver".equals(url);
+	}
+
+	@Override
+	public void modifyTableBySqlBase(String tableName, String attributeSql) {
+		StringBuilder sb = new StringBuilder();
+		List<String> modifyColumnSqlList = VciBaseUtil.str2List(attributeSql);
+		if (!CollectionUtils.isEmpty(modifyColumnSqlList)) {
+			modifyColumnSqlList.stream().forEach(s -> {
+				sb.append(SPACE).append("modify").append(SPACE).append(s).append(SPACE).append(",");
+			});
+		}
+		modifyTableBySql(tableName,sb.substring(0, sb.lastIndexOf(",")));
+	}
+
+	/**
+	 * 鍚戞暟鎹簱琛ㄤ腑娣诲姞鍗曚釜瀛楁
+	 *
+	 * @param tableName    琛ㄦ牸鐨勫悕绉�
+	 * @param attributeSql 瑕佹坊鍔犵殑鏂扮殑sql
+	 * @return 褰卞搷鐨勮鏁�
+	 */
+	@Override
+	public int addColumn2TableBySql(String tableName, String attributeSql) {
+		StringBuilder sb = new StringBuilder();
+		List<String> modifyColumnSqlList = VciBaseUtil.str2List(attributeSql);
+		if (!CollectionUtils.isEmpty(modifyColumnSqlList)) {
+			modifyColumnSqlList.stream().forEach(s -> {
+				sb.append(SPACE).append("add").append(SPACE).append(s).append(SPACE).append(",");
+			});
+			return mapper.addColumn2TableBySql(tableName, sb.substring(0, sb.lastIndexOf(",")));
+		}
+		return 0;
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlOracleMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlOracleMapperProcessor.java
new file mode 100644
index 0000000..52a20fa
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlOracleMapperProcessor.java
@@ -0,0 +1,45 @@
+package com.vci.ubcs.ddl.processor.ddl;
+
+import com.vci.ubcs.ddl.mapper.DdlMapper;
+import com.vci.ubcs.ddl.mapper.DdlOracleMapper;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+
+/**
+ * Description: oracle鐨勬暟鎹簱鎿嶄綔
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+public class DdlOracleMapperProcessor extends DdlMapperProcessor{
+
+	@Resource
+	private DdlOracleMapper oracleMapper;
+
+	@Override
+	boolean support(String url) {
+		return "oracle.jdbc.OracleDriver".equals(url);
+	}
+
+	public static class SINGLE {
+		public static DdlOracleMapperProcessor INSTANCE = new DdlOracleMapperProcessor();
+	}
+
+
+	private static DdlMapper mapper;
+
+	@PostConstruct
+	public void init(){
+		mapper = oracleMapper;
+	}
+
+	public DdlOracleMapperProcessor() {
+		super(mapper);
+	}
+
+	@Override
+	public void modifyTableBySqlBase(String tableName, String attributeSql) {
+		modifyTableBySql(tableName,attributeSql);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllBehavior.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllBehavior.java
new file mode 100644
index 0000000..604e9b8
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllBehavior.java
@@ -0,0 +1,105 @@
+package com.vci.ubcs.ddl.processor.dll;
+
+import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO;
+
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/25
+ */
+public interface DllBehavior {
+	/**
+	 * 涓婚敭
+	 */
+	String OID = "oid";
+
+	/**
+	 * 绌烘牸
+	 */
+	String SPACE = " ";
+
+	/**
+	 * 榛樿鍊�
+	 */
+	String DEFAULT = "default";
+
+	/**
+	 * 瀛楃涓�
+	 */
+	String VARCHAR = "varchar2";
+
+	/**
+	 * 鏁板瓧
+	 */
+	String NUMBER = "number";
+
+	/**
+	 * 鏃ユ湡锛屾棩鏈熸椂闂达紝鏃堕棿鎴�
+	 */
+	String TIMESTAMP = "TIMESTAMP";
+
+	/**
+	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
+	 * @param attributeVOList 灞炴�х殑绔嬬
+	 * @return sql璇彞
+	 */
+	String getCreateSqlByAttributeForBtm(List<OmdBtmTypeAttributeVO> attributeVOList);
+
+	/**
+	 * 澶勭悊鏁存暟绫诲瀷鐨剆ql杞崲
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	String dealNumberCreateSql(OmdBtmTypeAttributeVO attributeVO);
+
+	/**
+	 * 璋冪敤澶勭悊榛樿鍊煎拰闈炵┖
+	 * @param attributeVO 灞炴��
+	 * @return 鎵ц缁撴灉
+	 */
+	String dealDefaultAndNull(OmdBtmTypeAttributeVO attributeVO);
+
+	/**
+	 * 澶勭悊榛樿鍊�
+	 * @param defaultValue 榛樿鍊�
+	 * @return sql
+	 */
+	String dealDefaultValue(String defaultValue);
+
+	/**
+	 * 澶勭悊娴偣鏁扮被鍨嬬殑sql杞崲
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	String dealDoubleCreateSql(OmdBtmTypeAttributeVO attributeVO);
+
+	/**
+	 * 澶勭悊闈炵┖
+	 * @return sql
+	 */
+	String dealNullableSql(OmdBtmTypeAttributeVO attributeVO);
+
+	/**
+	 * 澶勭悊甯冨皵绫诲瀷鐨剆ql杞崲
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	String dealBooleanCreateSql(OmdBtmTypeAttributeVO attributeVO);
+
+	/**
+	 * 澶勭悊鏃ユ湡鏃堕棿绫诲瀷鐨剆ql杞崲
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	String dealDateTimeCreateSql(OmdBtmTypeAttributeVO attributeVO);
+
+	/**
+	 * 澶勭悊瀛楃涓茬被鍨嬬殑sql杞崲
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	String dealStringCreateSql(OmdBtmTypeAttributeVO attributeVO);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessor.java
new file mode 100644
index 0000000..4fd51c8
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessor.java
@@ -0,0 +1,191 @@
+package com.vci.ubcs.ddl.processor.dll;
+
+import com.vci.ubcs.ddl.mapper.DllMapper;
+import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+
+/**
+ * Description:DLL鐨勫鐞嗘帴鍙�
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+public abstract class DllMapperProcessor implements DllBehavior {
+
+	private DllMapper mapper;
+
+	public DllMapperProcessor(DllMapper mapper) {
+		this.mapper = mapper;
+	}
+
+	public abstract boolean support(String url);
+
+	public int createViewBySql(String viewCreateSql) {
+		return mapper.createViewBySql(viewCreateSql);
+	}
+
+
+	public int createTableBySql(String tableName, String attributeSql) {
+		return mapper.createTableBySql(tableName, attributeSql);
+	}
+
+
+	public int commentTable(String tableName, String comment) {
+		return mapper.commentTable(tableName, comment);
+	}
+
+
+	public int commentColumnTable(String tableName, String columnName, String comment) {
+		return mapper.commentColumnTable(tableName, columnName, comment);
+	}
+
+
+	public int modifyTableBySql(String tableName, String attributeSql) {
+		return mapper.modifyTableBySql(tableName, attributeSql);
+	}
+
+
+	public int addColumn2TableBySql(String tableName, String attributeSql) {
+		return mapper.addColumn2TableBySql(tableName, attributeSql);
+	}
+
+
+	public int dropTable(String tableName) {
+		return mapper.dropTable(tableName);
+	}
+
+
+	public int checkTableExist(String tableName) {
+		return mapper.checkTableExist(tableName);
+	}
+
+
+	public int countAll(String tableName) {
+		return mapper.countAll(tableName);
+	}
+
+	/**
+	 * 澶勭悊鏁存暟绫诲瀷鐨剆ql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealNumberCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		StringBuilder snb = new StringBuilder().append(NUMBER + SPACE);
+		dealDefaultAndNull(attributeVO);
+		return snb.toString();
+	}
+
+	/**
+	 * 璋冪敤澶勭悊榛樿鍊煎拰闈炵┖
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	public String dealDefaultAndNull(OmdBtmTypeAttributeVO attributeVO) {
+		String value = "";
+		if (StringUtils.isNotBlank(attributeVO.getDefaultValue())) {
+			value += dealDefaultValue(attributeVO.getDefaultValue());
+		}
+
+		if (!attributeVO.isNullableFlag()){
+			value += dealNullableSql(attributeVO);
+		}
+		return value;
+	}
+
+	/**
+	 * 澶勭悊榛樿鍊�
+	 *
+	 * @return sql
+	 */
+	@Override
+	public String dealDefaultValue(String defualValule) {
+		return DEFAULT + SPACE + defualValule + SPACE;
+	}
+
+	/**
+	 * 澶勭悊娴偣鏁扮被鍨嬬殑sql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealDoubleCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		Integer length = attributeVO.getPrecisionLength();
+		if(length == null || length == 0){
+			length = 20;
+		}
+		Integer scaleLength = attributeVO.getScaleLength();
+		if(scaleLength == null){
+			scaleLength = 2;
+		}
+		StringBuilder sb = new StringBuilder().append(NUMBER).append("(").append(String.valueOf(length.intValue()))
+			.append(",").append(String.valueOf(scaleLength.intValue()))
+			.append(")").append(SPACE);
+		sb.append(dealDefaultAndNull(attributeVO));
+		return sb.toString();
+	}
+
+	/**
+	 * 澶勭悊闈炵┖
+	 *
+	 * @return sql
+	 */
+	@Override
+	public String dealNullableSql(OmdBtmTypeAttributeVO attributeVO) {
+		if (!attributeVO.isNullableFlag()) {
+			return SPACE + "not null" + SPACE;
+		}
+		return "";
+	}
+
+	/**
+	 * 澶勭悊甯冨皵绫诲瀷鐨剆ql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealBooleanCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		return "VARCHAR (5) " + SPACE + dealDefaultAndNull(attributeVO);
+	}
+
+	/**
+	 * 澶勭悊鏃ユ湡鏃堕棿绫诲瀷鐨剆ql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealDateTimeCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		return "DATETIME" + SPACE + dealDefaultAndNull(attributeVO);
+	}
+
+	/**
+	 * 澶勭悊瀛楃涓茬被鍨嬬殑sql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealStringCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		StringBuilder sb = new StringBuilder();
+		Integer length2 = attributeVO.getAttributeLength();
+		if (length2 == null) {
+			length2 = 250;
+		}
+		sb.append("VARCHAR").append("(").
+			append(String.valueOf(length2.intValue())).append(")").append(SPACE);
+		if (OID.equalsIgnoreCase(attributeVO.getId())) {
+			sb.append(" primary key ");
+			//寮哄埗璁剧疆OID涓轰富閿�
+		}
+		sb.append(dealDefaultAndNull(attributeVO));
+		return sb.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java
new file mode 100644
index 0000000..1395817
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java
@@ -0,0 +1,34 @@
+package com.vci.ubcs.ddl.processor.dll;
+
+import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
+import org.springframework.beans.factory.annotation.Value;
+
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+public class DllMapperProcessorStrategy {
+
+	@Value("${spring.datasource.driver-class-name}")
+	private static final String DATABASE_DRIVER = "";
+
+	public static List<DllMapperProcessor> processors = Lists.newArrayList();
+
+	static {
+		processors.add(new DllOracleMapperProcessor());
+		processors.add(new DllSqlLiteMapperProcessor());
+	}
+
+	public static DllMapperProcessor getProcessor(){
+		for (DllMapperProcessor processor : processors) {
+			if (processor.support(DATABASE_DRIVER)){
+				return processor;
+			}
+		}
+		return DllOracleMapperProcessor.SINGLE.INSTANCE;
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMsMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMsMapperProcessor.java
new file mode 100644
index 0000000..47dbf05
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMsMapperProcessor.java
@@ -0,0 +1,173 @@
+package com.vci.ubcs.ddl.processor.dll;
+
+import com.vci.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.ubcs.ddl.mapper.DllMapper;
+import com.vci.ubcs.ddl.mapper.DllMsMapper;
+import com.vci.ubcs.ddl.mapper.DllOracleMapper;
+import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+public class DllMsMapperProcessor extends DllMapperProcessor {
+
+	@Resource
+	private DllMsMapper realMapper;
+
+	private static DllMapper mapper;
+
+	@PostConstruct
+	public void init(){
+		mapper = realMapper;
+	}
+
+	public DllMsMapperProcessor() {
+		super(mapper);
+	}
+
+	public static class SINGLE {
+		public static DllMsMapperProcessor INSTANCE = new DllMsMapperProcessor();
+	}
+
+	@Override
+	public boolean support(String url) {
+		return "oracle.jdbc.OracleDiver".equals(url);
+	}
+
+	/**
+	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
+	 *
+	 * @param attributeVOList 灞炴�х殑绔嬬
+	 * @return sql璇彞
+	 */
+	@Override
+	public String getCreateSqlByAttributeForBtm(List<OmdBtmTypeAttributeVO> attributeVOList) {
+		StringBuilder sb = new StringBuilder();
+		attributeVOList.forEach(a -> {
+			sb.append(a.getId()).append(SPACE);
+			VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType());
+			if (fieldTypeEnum == null) {
+				throw new VciBaseException("灞炴�ф湁璇�");
+			}
+			switch (fieldTypeEnum) {
+				case VTInteger:
+				case VTLong:
+					sb.append(dealNumberCreateSql(a));
+					break;
+				case VTDouble:
+					sb.append(dealDoubleCreateSql(a));
+					break;
+				case VTBoolean:
+					sb.append(dealBooleanCreateSql(a));
+					break;
+				case VTDate:
+				case VTTime:
+				case VTDateTime:
+					sb.append(dealDateTimeCreateSql(a));
+					break;
+				case VTFilePath:
+					sb.append("VARCHAR").append("(100)").append(SPACE);
+					break;
+				case VTClob:
+					sb.append("varchar(max)").append(SPACE);
+					if(!a.isNullableFlag()){
+						sb.append(SPACE).append("not null").append(SPACE);
+					}
+					break;
+				default:
+					dealStringCreateSql(a);
+					break;
+			}
+			sb.append(",\n\t");
+		});
+		return sb.substring(0,sb.lastIndexOf(","));
+	}
+
+	/**
+	 * 澶勭悊鏁存暟绫诲瀷鐨剆ql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealNumberCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		return "INT" + SPACE + dealDefaultAndNull(attributeVO);
+	}
+
+	/**
+	 * 澶勭悊娴偣鏁扮被鍨嬬殑sql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealDoubleCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		Integer length = attributeVO.getPrecisionLength();
+		if(length == null || length == 0){
+			length = 20;
+		}
+		Integer scaleLength = attributeVO.getScaleLength();
+		if(scaleLength == null){
+			scaleLength = 2;
+		}
+		StringBuilder sb = new StringBuilder().append("numeric").append("(").append(String.valueOf(length.intValue()))
+			.append(",").append(String.valueOf(scaleLength.intValue()))
+			.append(")").append(SPACE);
+		sb.append(dealDefaultAndNull(attributeVO));
+		return sb.toString();
+	}
+
+
+	/**
+	 * 澶勭悊甯冨皵绫诲瀷鐨剆ql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealBooleanCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		return "VARCHAR (5) " + SPACE + dealDefaultAndNull(attributeVO);
+	}
+
+	/**
+	 * 澶勭悊鏃ユ湡鏃堕棿绫诲瀷鐨剆ql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealDateTimeCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		return "DATETIME" + SPACE + dealNullableSql(attributeVO);
+	}
+
+	/**
+	 * 澶勭悊瀛楃涓茬被鍨嬬殑sql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealStringCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		Integer length2 = attributeVO.getAttributeLength();
+		if(length2 == null){
+			length2 = 250;
+		}
+		StringBuilder sb = new StringBuilder().append("VARCHAR").append("(").
+			append(String.valueOf(length2.intValue())).append(")").append(SPACE);
+		if (OID.equalsIgnoreCase(attributeVO.getId())) {
+			sb.append(" primary key ");
+			//寮哄埗璁剧疆OID涓轰富閿�
+		}
+		sb.append(dealDefaultAndNull(attributeVO));
+		return sb.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMySqlMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMySqlMapperProcessor.java
new file mode 100644
index 0000000..e45416e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMySqlMapperProcessor.java
@@ -0,0 +1,160 @@
+package com.vci.ubcs.ddl.processor.dll;
+
+import com.vci.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.ubcs.ddl.mapper.DllMapper;
+import com.vci.ubcs.ddl.mapper.DllOracleMapper;
+import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import javax.smartcardio.ATR;
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+public class DllMySqlMapperProcessor extends DllMapperProcessor {
+
+	@Resource
+	private DllOracleMapper realMapper;
+
+	private static DllMapper mapper;
+
+	@PostConstruct
+	public void init() {
+		mapper = realMapper;
+	}
+
+	public DllMySqlMapperProcessor() {
+		super(mapper);
+	}
+
+	public static class SINGLE {
+		public static DllMySqlMapperProcessor INSTANCE = new DllMySqlMapperProcessor();
+	}
+
+	@Override
+	public boolean support(String url) {
+		return "oracle.jdbc.OracleDiver".equals(url);
+	}
+
+	/**
+	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
+	 *
+	 * @param attributeVOList 灞炴�х殑绔嬬
+	 * @return sql璇彞
+	 */
+	@Override
+	public String getCreateSqlByAttributeForBtm(List<OmdBtmTypeAttributeVO> attributeVOList) {
+		StringBuilder sb = new StringBuilder();
+		attributeVOList.forEach(a -> {
+			sb.append(a.getId()).append(SPACE);
+			VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType());
+			if (fieldTypeEnum == null) {
+				throw new VciBaseException("灞炴�ф湁璇�");
+			}
+			switch (fieldTypeEnum) {
+				case VTInteger:
+				case VTLong:
+					sb.append(dealNumberCreateSql(a));
+					break;
+				case VTDouble:
+					sb.append(dealDoubleCreateSql(a));
+					break;
+				case VTBoolean:
+					sb.append(dealBooleanCreateSql(a));
+					break;
+				case VTDate:
+				case VTTime:
+				case VTDateTime:
+					sb.append(dealDateTimeCreateSql(a));
+				case VTFilePath:
+					sb.append("VARCHAR").append("(100)").append(SPACE);
+					break;
+				case VTClob:
+					sb.append("LONGTEXT").append(SPACE);
+					if (!a.isNullableFlag()) {
+						sb.append(SPACE).append("not null").append(SPACE);
+					}
+					break;
+				default:
+					sb.append(dealStringCreateSql(a));
+					break;
+			}
+			sb.append(",\n\t");
+		});
+		return sb.substring(0, sb.lastIndexOf(","));
+	}
+
+	/**
+	 * 澶勭悊鏁存暟绫诲瀷鐨剆ql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealNumberCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		StringBuilder sb = new StringBuilder();
+		if (VciFieldTypeEnum.VTInteger.name().equalsIgnoreCase(attributeVO.getAttrDataType())) {
+			sb.append("INT").append(SPACE);
+		} else {
+			sb.append("BIGINT").append(SPACE);
+		}
+		sb.append(dealDefaultAndNull(attributeVO));
+		return sb.toString();
+	}
+
+
+	/**
+	 * 澶勭悊娴偣鏁扮被鍨嬬殑sql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealDoubleCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		StringBuilder sb = new StringBuilder();
+		Integer length = attributeVO.getPrecisionLength();
+		if (length == null || length == 0) {
+			length = 20;
+		}
+		Integer scaleLength = attributeVO.getScaleLength();
+		if (scaleLength == null) {
+			scaleLength = 2;
+		}
+		sb.append("DOUBLE").append("(").append(String.valueOf(length.intValue()))
+			.append(",").append(String.valueOf(scaleLength.intValue()))
+			.append(")").append(SPACE);
+		sb.append(dealDefaultAndNull(attributeVO));
+		return sb.toString();
+	}
+
+
+	/**
+	 * 澶勭悊甯冨皵绫诲瀷鐨剆ql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealBooleanCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		return "VARCHAR (5) " + SPACE + dealDefaultAndNull(attributeVO);
+	}
+
+	/**
+	 * 澶勭悊鏃ユ湡鏃堕棿绫诲瀷鐨剆ql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealDateTimeCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		return "DATETIME" + SPACE + dealDefaultAndNull(attributeVO);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllOracleMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllOracleMapperProcessor.java
new file mode 100644
index 0000000..db2a485
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllOracleMapperProcessor.java
@@ -0,0 +1,141 @@
+package com.vci.ubcs.ddl.processor.dll;
+
+import com.vci.starter.web.enumpck.DataBaseEnum;
+import com.vci.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.ddl.mapper.DllMapper;
+import com.vci.ubcs.ddl.mapper.DllOracleMapper;
+import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+public class DllOracleMapperProcessor extends DllMapperProcessor {
+
+	@Resource
+	private DllOracleMapper realMapper;
+
+	private static DllMapper mapper;
+
+	@PostConstruct
+	public void init(){
+		mapper = realMapper;
+	}
+
+	public DllOracleMapperProcessor() {
+		super(mapper);
+	}
+
+	public static class SINGLE {
+		public static DllOracleMapperProcessor INSTANCE = new DllOracleMapperProcessor();
+	}
+
+	@Override
+	public boolean support(String url) {
+		return "oracle.jdbc.OracleDiver".equals(url);
+	}
+
+	/**
+	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
+	 *
+	 * @param attributeVOList 灞炴�х殑绔嬬
+	 * @return sql璇彞
+	 */
+	@Override
+	public String getCreateSqlByAttributeForBtm(List<OmdBtmTypeAttributeVO> attributeVOList) {
+		StringBuilder sb = new StringBuilder();
+		attributeVOList.forEach(a -> {
+			sb.append(a.getId()).append(SPACE);
+			VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType());
+			if (fieldTypeEnum == null) {
+				throw new VciBaseException("灞炴�ф湁璇�");
+			}
+			switch (fieldTypeEnum) {
+				case VTInteger:
+				case VTLong:
+					sb.append(dealNumberCreateSql(a));
+					break;
+				case VTDouble:
+					sb.append(dealDoubleCreateSql(a));
+					break;
+				case VTBoolean:
+					sb.append(dealBooleanCreateSql(a));
+					break;
+				case VTDate:
+				case VTDateTime:
+				case VTTime:
+					sb.append(dealDateTimeCreateSql(a));
+					break;
+				case VTFilePath:
+					sb.append(VARCHAR).append("(100)").append(SPACE);
+					break;
+				case VTClob:
+					sb.append("CLOB").append(SPACE);
+					if(!a.isNullableFlag()){
+						sb.append(SPACE).append("not null").append(SPACE);
+					}
+					break;
+				default:
+					sb.append(dealStringCreateSql(a));
+					break;
+			}
+			sb.append(",\n\t");
+		});
+		return sb.substring(0,sb.lastIndexOf(","));
+	}
+
+	/**
+	 * 澶勭悊瀛楃涓茬被鍨嬬殑sql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealStringCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		Integer length2 = attributeVO.getAttributeLength();
+		StringBuilder sb = new StringBuilder();
+		if(length2 == null){
+			length2 = 250;
+		}
+		sb.append(VARCHAR).append("(").
+			append(String.valueOf(length2.intValue())).append(")").append(SPACE);
+		if (OID.equalsIgnoreCase(attributeVO.getId())) {
+			sb.append(" primary key ");
+			//寮哄埗璁剧疆OID涓轰富閿�
+		}
+		sb.append(dealDefaultAndNull(attributeVO));
+		return sb.toString();
+	}
+
+	/**
+	 * 澶勭悊鏃ユ湡鏃堕棿绫诲瀷鐨剆ql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealDateTimeCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		return TIMESTAMP + SPACE + dealNullableSql(attributeVO);
+	}
+
+	/**
+	 * 澶勭悊甯冨皵绫诲瀷鐨剆ql杞崲
+	 *
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	@Override
+	public String dealBooleanCreateSql(OmdBtmTypeAttributeVO attributeVO) {
+		return VARCHAR + "(5)" + SPACE + dealDefaultAndNull(attributeVO);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllSqlLiteMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllSqlLiteMapperProcessor.java
new file mode 100644
index 0000000..dc3f5d9
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllSqlLiteMapperProcessor.java
@@ -0,0 +1,50 @@
+package com.vci.ubcs.ddl.processor.dll;
+
+import com.vci.ubcs.ddl.mapper.DllMapper;
+import com.vci.ubcs.ddl.mapper.DllOracleMapper;
+import com.vci.ubcs.ddl.mapper.DllSqlLiteMapper;
+import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+public class DllSqlLiteMapperProcessor extends DllMapperProcessor{
+
+
+	@Resource
+	private DllSqlLiteMapper realMapper;
+
+	private static DllMapper mapper;
+
+	@PostConstruct
+	public void init(){
+		mapper = realMapper;
+	}
+
+	public DllSqlLiteMapperProcessor() {
+		super(mapper);
+	}
+
+	@Override
+	public boolean support(String url) {
+		return "org.sqlite.JDBC".equals(url);
+	}
+
+	/**
+	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
+	 *
+	 * @param attributeVOList 灞炴�х殑绔嬬
+	 * @return sql璇彞
+	 */
+	@Override
+	public String getCreateSqlByAttributeForBtm(List<OmdBtmTypeAttributeVO> attributeVOList) {
+		return null;
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java
new file mode 100644
index 0000000..90c842a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java
@@ -0,0 +1,242 @@
+package com.vci.ubcs.ddl.service;
+
+import com.vci.starter.word.bo.WordMergeStartTableDataBO;
+import com.vci.ubcs.ddl.bo.DdlTableBO;
+import com.vci.ubcs.ddl.enums.DataBaseEnum;
+import com.vci.ubcs.omd.dto.OmdBtmTypeDTO;
+import com.vci.ubcs.omd.entity.OmdBtmTypeAttribute;
+import com.vci.ubcs.omd.entity.OsModifyAttributeInfoDO;
+import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO;
+import com.vci.ubcs.omd.vo.OmdBtmTypeVO;
+import com.vci.ubcs.omd.vo.OsLinkTypeAttributeVO;
+import com.vci.ubcs.omd.vo.OsLinkTypeVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import org.springblade.core.tool.api.R;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Description: 鏁版嵁搴撴搷浣滄湇鍔$被
+ *  娉ㄦ剰鐨勬槸锛宱racle瀵逛簬DDL鎿嶄綔閮戒細鍏堟彁浜や竴娆′簨鍔★紝褰撴墽琛屽畬鎴愬悗浼氬啀娆℃彁浜や竴娆′簨鍔�
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+public interface IDdlService {
+
+	/**
+	 * 鏍¢獙涓氬姟绫诲瀷鐨勬暟鎹簱琛ㄤ腑鏄惁鏈夋暟鎹�
+	 * @param pkBtmType 涓氬姟绫诲瀷鐨勪富閿�
+	 * @return true琛ㄧず鏈夋暟鎹紝false琛ㄧず娌℃湁鏁版嵁
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	boolean checkTableHasData(String pkBtmType) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑涓婚敭鑾峰彇鏁版嵁搴撹〃鏍肩殑鍚嶇О
+	 * @param pkBtmType  涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑涓婚敭
+	 * @return 鏁版嵁搴撹〃鍚嶇О
+	 */
+	String getTableNameByBtmTypeOid(String pkBtmType);
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷鑾峰彇閾炬帴绫诲瀷鐨勮嫳鏂囧悕绉拌幏鍙栨暟鎹簱琛ㄦ牸鐨勫悕绉�
+	 * @param id 涓氬姟绫诲瀷鑾峰彇閾炬帴绫诲瀷鐨勮嫳鏂囧悕绉�
+	 * @return 鏁版嵁搴撹〃鍚嶇О
+	 */
+	String getTableNameByBtmTypeId(String id);
+
+	/**
+	 * 鏍¢獙涓氬姟绫诲瀷鐨勬暟鎹簱琛ㄤ腑鏄惁鏈夋暟鎹�
+	 * @param id 涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉�
+	 * @return true琛ㄧず鏈夋暟鎹紝false琛ㄧず娌℃湁鏁版嵁
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	boolean checkTableHasDataById(String id) throws VciBaseException;
+
+	/**
+	 * 鎵归噺灏嗕笟鍔$被鍨嬪垱寤烘暟鎹簱琛�
+	 * @param pkBtmTypes 涓氬姟绫诲瀷鐨勪富閿�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呭垱寤鸿〃鍑虹幇浜嗛敊璇殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	void createDbTables(String pkBtmTypes) throws VciBaseException;
+
+	/**
+	 * 鎵归噺灏嗕笟鍔$被鍨嬪垱寤烘暟鎹簱琛�
+	 * @param oidCollection 涓氬姟绫诲瀷鐨勪富閿泦鍚�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呭垱寤鸿〃鍑虹幇浜嗛敊璇殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	void createDbTablesByOidCollection(Collection<String> oidCollection) throws VciBaseException;
+
+	/**
+	 * 鎵归噺灏嗕笟鍔$被鍨嬪垱寤烘暟鎹簱琛�
+	 * @param ids 涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呭垱寤鸿〃鍑虹幇浜嗛敊璇殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	void createDbTablesById(String ids) throws VciBaseException;
+
+	/**
+	 * 淇敼涓氬姟绫诲瀷涓殑灞炴�у瓧娈电殑闀垮害锛屾敞鎰忓湪鎵ц杩欎釜鏂规硶鏃跺氨浼氬皢浠ュ墠鐨勪簨鍔℃彁浜ゃ��
+	 * @param modifyLengthAttrDOList 闇�瑕佷慨鏀圭殑灞炴�у璞�
+	 * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	void changeColumnForBtm(List<OmdBtmTypeAttributeVO> modifyLengthAttrDOList) throws VciBaseException;
+
+	/**
+	 * 淇敼閾炬帴绫诲瀷涓殑灞炴�у瓧娈电殑闀垮害锛屾敞鎰忓湪鎵ц杩欎釜鏂规硶鏃跺氨浼氬皢浠ュ墠鐨勪簨鍔℃彁浜ゃ��
+	 * @param modifyLengthAttrDOListForLinkType 闇�瑕佷慨鏀圭殑灞炴�у璞�
+	 * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	void changeColumnForLink(List<OsLinkTypeAttributeVO> modifyLengthAttrDOListForLinkType) throws VciBaseException;
+
+	/**
+	 * 娣诲姞灞炴�у瓧娈靛埌涓氬姟绫诲瀷涓紝娉ㄦ剰鍦ㄦ墽琛岃繖涓柟娉曟椂灏变細灏嗕互鍓嶇殑浜嬪姟鎻愪氦銆�
+	 * @param addAttrDOList 闇�瑕佹坊鍔犵殑灞炴�у璞�
+	 * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	void addColumn2TableForBtm(List<OmdBtmTypeAttributeVO> addAttrDOList) throws VciBaseException;
+
+	/**
+	 * 娣诲姞灞炴�у瓧娈靛埌閾炬帴绫诲瀷涓紝娉ㄦ剰鍦ㄦ墽琛岃繖涓柟娉曟椂灏变細灏嗕互鍓嶇殑浜嬪姟鎻愪氦銆�
+	 * @param addAttrDOListForLinkType 闇�瑕佹坊鍔犵殑灞炴�у璞�
+	 * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	void addColumn2TableForLink(List<OsLinkTypeAttributeVO> addAttrDOListForLinkType) throws VciBaseException;
+
+	/**
+	 * 鍒ゆ柇琛ㄤ腑鏄惁鏈夋暟鎹�
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @return true琛ㄧず鏈夋暟鎹紝false琛ㄧず娌℃湁鏁版嵁锛屾垨鑰呰繖涓〃鏍间笉瀛樺湪鐨勬椂鍊欐姏鍑哄紓甯�
+	 * @throws VciBaseException 鍙傛暟閿欒鐨勬椂鍊欐姏鍑哄紓甯�
+	 */
+	boolean checkTableHasDataByTableName(String tableName)  throws VciBaseException;
+
+	/**
+	 * 鍒涘缓瑙嗗浘
+	 * @param viewCreateSql 瑙嗗浘鐨凷QL璇彞
+	 * @throws VciBaseException 鍙傛暟閿欒鎴栬�呮墽琛岄敊璇殑鏃跺�欎細鎶涘嚭寮傚父锛屾墽琛岄敊璇富瑕佸寘鎷琒QL璇彞閿欒锛屾病鏈夋潈闄愮瓑
+	 */
+	void createViewBySql(String viewCreateSql) throws VciBaseException;
+
+	/**
+	 * 鍒犻櫎琛ㄦ牸鎴栬�呰鍥�
+	 * @param tableName 琛ㄦ牸鍚嶇О鎴栬�呰鍥惧悕绉�
+	 * @throws VciBaseException 鍙傛暟閿欒鎴栬�呮墽琛岄敊璇殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	void dropTableByName(String tableName) throws VciBaseException;
+	/**
+	 * 鍒犻櫎琛ㄦ牸鐨勬煇涓�鍒�
+	 * @param tableName 琛ㄦ牸鍚嶇О
+	 * @param columnName 鍒楃殑鍚嶇О
+	 */
+	void dropColumnByName(String tableName, String columnName);
+
+	/**
+	 * 鏍¢獙涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑瀵瑰簲鐨勮〃鏍兼槸鍚﹀瓨鍦�
+	 * @param pkBtmType 涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑琛ㄦ牸
+	 * @return true琛ㄧず瀛樺湪锛宖alse琛ㄧず涓嶅瓨鍦�
+	 */
+	boolean checkTableExist(String pkBtmType);
+
+	/**
+	 * 鏍规嵁琛ㄦ牸鐨勫悕绉板垽鏂〃鏍兼槸鍚﹀瓨鍦�
+	 * @param tableName 琛ㄦ牸鍚嶇О
+	 * @return  rue琛ㄧず瀛樺湪锛宖alse琛ㄧず涓嶅瓨鍦�
+	 */
+	boolean checkTableExistByTableName(String tableName);
+
+	/**
+	 * 鏍¢獙涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬫墍瀵瑰簲鐨勮〃鏍兼槸鍚﹀瓨鍦�
+	 * @param id 涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑鑻辨枃鍚嶇О
+	 * @return true琛ㄧず瀛樺湪锛宖alse琛ㄧず涓嶅瓨鍦�
+	 */
+	boolean checkTableExistById(String id);
+
+	/**
+	 * 鑾峰彇鏁版嵁搴撳拰涓氬姟绫诲瀷涓殑涓嶅悓鐨勫湴鏂�
+	 * @param btmTypeVOList 涓氬姟绫诲瀷瀵硅薄锛屾湁灞炴�ф椂闇�瑕佸寘鍚睘鎬�
+	 * @param linkTypeVOList 閾炬帴绫诲瀷瀵硅薄锛屾湁灞炴�ф椂闇�瑕佸寘鍚睘鎬�
+	 * @return 涓嶅悓鐨勫湴鏂癸紝姣忎竴涓笟鍔$被鍨嬫垨鑰呴摼鎺ョ被鍨嬩竴鏉℃暟鎹�
+	 */
+	List<OsModifyAttributeInfoDO> checkDifferent(List<OmdBtmTypeVO> btmTypeVOList, List<OsLinkTypeVO> linkTypeVOList) throws VciBaseException;
+
+	/**
+	 * 娓呯悊涓氬姟绫诲瀷涓拰鏁版嵁搴撻噷涓嶄竴鏍风殑
+	 * @param differentAttributeList 涓嶅悓鐨勫睘鎬х殑鍒楄〃
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮墽琛屽嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	void reflexDifferent(List<OsModifyAttributeInfoDO> differentAttributeList) throws VciBaseException;
+
+	/**
+	 * 鑾峰彇鏁版嵁搴撲腑鎵�鏈夌殑琛ㄦ牸
+	 * @return 琛ㄦ牸鐨勫悕绉帮紝鍏ㄦ槸澶у啓
+	 */
+	List<String> listAllTableName() ;
+
+	/**
+	 * 鏌ヨ鏁版嵁搴撲腑鐨勮〃鏍间俊鎭�
+	 * @param tableNamesCollections 鏁版嵁搴撹〃鍚嶉泦鍚�
+	 * @return 鍦ㄦ暟鎹簱涓殑淇℃伅
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮暟鎹簱琛ㄤ笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<DdlTableBO> listTableInfoInDB(Collection<String> tableNamesCollections) throws VciBaseException;
+
+	/**
+	 * 瀵煎嚭鏁版嵁搴撲腑鐨勮〃鏍间俊鎭埌excel鏂囦欢
+	 * @param tableNamesCollections 琛ㄦ牸鍚嶇О鐨勯泦鍚�
+	 * @param merge 鍚堝苟琛ㄦ牸鍚嶇О
+	 * @return excel鐨勬枃浠跺悕绉�
+	 * @throws VciBaseException 铓曢涓虹┖鎴栬�呮暟鎹簱琛ㄤ笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	String exportDataBase2File(Collection<String> tableNamesCollections,boolean merge) throws VciBaseException;
+
+	/**
+	 * 鑾峰彇瀛樺偍鏂囦欢鎵�闇�瑕佺殑涓存椂鏂囦欢澶癸紝鏂囦欢澶逛笂宸茬粡鍖呭惈浜�
+	 * @return 鏂囦欢澶圭殑鍦板潃锛屽鏋滈厤缃枃浠舵病鏈夐厤缃紝鍒欓粯璁よ繑鍥炲綋鍓嶉」鐩墍鍦ㄧ殑鏂囦欢澶�
+	 */
+	String getTempFolder();
+
+	/**
+	 * 瀵煎嚭鏁版嵁搴撲腑鐨勮〃鏍间俊鎭埌word鏂囦欢涓�
+	 * @param tableNamesCollections 琛ㄦ牸鍚嶇О鐨勯泦鍚�
+	 * @return word鐨勬枃浠跺悕绉�
+	 * @throws VciBaseException 铓曢涓虹┖鎴栬�呮暟鎹簱琛ㄤ笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	String exportDataBase2Word(List<String> tableNamesCollections) throws VciBaseException;
+
+	/**
+	 * 鎷疯礉鏁版嵁鍒皐ord妯℃澘涓�
+	 * @param tableDataBO 瑕佸啓鍏ョ殑鏁版嵁
+	 * @return word 鏂囦欢璺緞
+	 */
+	String writeDataToWord(WordMergeStartTableDataBO tableDataBO);
+
+	/**
+	 * 鍒ゆ柇鏄惁涓哄吋瀹规�х殑琛紝杩欎簺琛ㄤ笉搴旇琚垱寤哄拰淇敼
+	 * @param btmTypeId 涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉�
+	 * @param linkTypeId 涓氬姟绫诲瀷鐨勪腑鏂囧悕绉�
+	 * @return true 琛ㄧず涓哄吋瀹规�х殑琛紝鐢ㄦ埛锛岃鑹诧紝閮ㄩ棬锛屾潈闄愯繖浜�
+	 */
+	boolean isCompatibilityTable(String btmTypeId,String linkTypeId);
+
+	/**
+	 * 鏁版嵁搴撴柊澧炴垨淇敼琛�
+	 * @param dto 涓氬姟绫诲瀷浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	R submitBtmType(OmdBtmTypeDTO dto);
+
+	/**
+	 * 鎸夎〃鍚嶈幏鍙栬〃淇℃伅
+	 * @param tableName 琛ㄥ悕
+	 * @return 琛ㄤ俊鎭�
+	 */
+	DdlTableBO getTableColumnByTableName(String tableName);
+
+	/**
+	 * 鑾峰彇鎵�鏈夎〃淇℃伅
+	 * @return 琛ㄤ俊鎭泦鍚�
+	 */
+	List<DdlTableBO> getAllTableInfo();
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java
new file mode 100644
index 0000000..4889862
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java
@@ -0,0 +1,654 @@
+package com.vci.ubcs.ddl.service.impl;
+
+import com.alibaba.nacos.client.naming.NacosNamingService;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.word.bo.WordMergeStartTableDataBO;
+import com.vci.ubcs.ddl.bo.DdlTableBO;
+import com.vci.ubcs.ddl.bo.DdlTableInDataBaseBO;
+import com.vci.ubcs.ddl.processor.ddl.DdlMapperProcessStrategy;
+import com.vci.ubcs.ddl.processor.ddl.DdlMapperProcessor;
+import com.vci.ubcs.ddl.processor.dll.DllMapperProcessor;
+import com.vci.ubcs.ddl.processor.dll.DllMapperProcessorStrategy;
+import com.vci.ubcs.ddl.properties.DdlExportWordFieldProperties;
+import com.vci.ubcs.ddl.properties.DdlPropertise;
+import com.vci.ubcs.ddl.service.IDdlService;
+import com.vci.ubcs.omd.cache.OmdBtmTypeCache;
+import com.vci.ubcs.omd.dto.OmdBtmTypeDTO;
+import com.vci.ubcs.omd.entity.OsModifyAttributeInfoDO;
+import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO;
+import com.vci.ubcs.omd.vo.OmdBtmTypeVO;
+import com.vci.ubcs.omd.vo.OsLinkTypeAttributeVO;
+import com.vci.ubcs.omd.vo.OsLinkTypeVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Description: 鏁版嵁搴撹〃鎿嶄綔鏈嶅姟
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Service
+public class DdlServiceImpl implements IDdlService {
+
+	/**
+	 * 鐩稿簲鐨勯厤缃�
+	 */
+	@Autowired
+	private DdlPropertise ddlProperties;
+
+	/**
+	 * word瀵煎嚭鐨勬椂鍊欑殑鍩熷瓧娈垫槧灏�
+	 */
+	@Autowired
+	private DdlExportWordFieldProperties wordFieldProperties;
+
+	/**
+	 * ddl鏁版嵁鎿嶄綔鏈嶅姟
+	 */
+	private final DdlMapperProcessor ddlMapper = DdlMapperProcessStrategy.getProcessor();
+
+	/**
+	 * dll鏁版嵁鎿嶄綔鏈嶅姟
+	 */
+	private final DllMapperProcessor dllMapper = DllMapperProcessorStrategy.getProcessor();
+
+	/**
+	 * 琛ㄥ悕鍓嶇紑
+	 */
+	private final String TABLE_PREFIX = "PL";
+
+	/**
+	 * 鏍¢獙涓氬姟绫诲瀷鐨勬暟鎹簱琛ㄤ腑鏄惁鏈夋暟鎹�
+	 *
+	 * @param pkBtmType 涓氬姟绫诲瀷鐨勪富閿�
+	 * @return true琛ㄧず鏈夋暟鎹紝false琛ㄧず娌℃湁鏁版嵁
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public boolean checkTableHasData(String pkBtmType) throws VciBaseException {
+		return checkTableHasDataByTableName(getTableNameByBtmTypeOid(pkBtmType));
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑涓婚敭鑾峰彇鏁版嵁搴撹〃鏍肩殑鍚嶇О
+	 *
+	 * @param pkBtmType 涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑涓婚敭
+	 * @return 鏁版嵁搴撹〃鍚嶇О
+	 */
+	@Override
+	public String getTableNameByBtmTypeOid(String pkBtmType) {
+		VciBaseUtil.alertNotNull(pkBtmType, "涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑涓婚敭");
+		OmdBtmTypeVO btmType = OmdBtmTypeCache.getDetail(pkBtmType);
+		String tableName = "";
+		if (btmType == null || StringUtils.isBlank(btmType.getOid())) {
+			/*OsLinkTypeDO linkTypeDO = linkTypeDOMapper.selectByPrimaryKey(pkBtmType.trim());
+			if(linkTypeDO == null || StringUtils.isBlank(linkTypeDO.getOid()) ){
+				throw new com.vci.starter.web.exception.VciBaseException("涓嶆槸涓氬姟绫诲瀷锛屼篃涓嶆槸閾炬帴绫诲瀷锛岃鏌ヨ瘉");
+			}else{
+				tableName = linkTypeService.getTableName(linkTypeDO.getId());
+			}*/
+		} else {
+			tableName = btmType.getTableName();
+		}
+		return tableName;
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷鑾峰彇閾炬帴绫诲瀷鐨勮嫳鏂囧悕绉拌幏鍙栨暟鎹簱琛ㄦ牸鐨勫悕绉�
+	 *
+	 * @param id 涓氬姟绫诲瀷鑾峰彇閾炬帴绫诲瀷鐨勮嫳鏂囧悕绉�
+	 * @return 鏁版嵁搴撹〃鍚嶇О
+	 */
+	@Override
+	public String getTableNameByBtmTypeId(String id) {
+		VciBaseUtil.alertNotNull(id, "涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑鑻辨枃鍚嶇О");
+		List<OmdBtmTypeVO> btmTypeList = OmdBtmTypeCache.selectByIdCollection(VciBaseUtil.str2List(id));
+		String tableName = "";
+		if (CollectionUtils.isEmpty(btmTypeList)) {
+			/*List<OsLinkTypeDO> linkTypeDOList = linkTypeDOMapper.selectByIdCollection(VciBaseUtil.str2List(id));
+			if(CollectionUtils.isEmpty(linkTypeDOList)){
+				throw new com.vci.starter.web.exception.VciBaseException("涓嶆槸涓氬姟绫诲瀷锛屼篃涓嶆槸閾炬帴绫诲瀷锛岃鏌ヨ瘉");
+			}else{
+				tableName = linkTypeService.getTableName(linkTypeDOList.get(0).getId());
+			}*/
+		} else {
+			tableName = btmTypeList.get(0).getTableName();
+		}
+		return tableName;
+	}
+
+	/**
+	 * 鏍¢獙涓氬姟绫诲瀷鐨勬暟鎹簱琛ㄤ腑鏄惁鏈夋暟鎹�
+	 *
+	 * @param id 涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉�
+	 * @return true琛ㄧず鏈夋暟鎹紝false琛ㄧず娌℃湁鏁版嵁
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public boolean checkTableHasDataById(String id) throws VciBaseException {
+		return checkTableHasDataByTableName(getTableNameByBtmTypeId(id));
+	}
+
+	/**
+	 * 鎵归噺灏嗕笟鍔$被鍨嬪垱寤烘暟鎹簱琛�
+	 *
+	 * @param pkBtmTypes 涓氬姟绫诲瀷鐨勪富閿�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呭垱寤鸿〃鍑虹幇浜嗛敊璇殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public void createDbTables(String pkBtmTypes) throws VciBaseException {
+		VciBaseUtil.alertNotNull(pkBtmTypes, "涓氬姟绫诲瀷/閾炬帴绫诲瀷鐨勪富閿�");
+		createDbTablesByOidCollection(VciBaseUtil.str2List(pkBtmTypes));
+	}
+
+	/**
+	 * 鎵归噺灏嗕笟鍔$被鍨嬪垱寤烘暟鎹簱琛�
+	 *
+	 * @param oidCollection 涓氬姟绫诲瀷鐨勪富閿泦鍚�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呭垱寤鸿〃鍑虹幇浜嗛敊璇殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public void createDbTablesByOidCollection(Collection<String> oidCollection) throws VciBaseException {
+		VciBaseUtil.alertCollectionNotNull("涓氬姟绫诲瀷/閾炬帴绫诲瀷鐨勪富閿泦鍚�", oidCollection);
+		List<OmdBtmTypeVO> btmTypeVOList = OmdBtmTypeCache.listBtmTypeByOidCollection(oidCollection);
+//		List<OsLinkTypeVO> linkTypeVOList = linkTypeService.listLinkTypeByOidCollection(oidCollection);
+		if (!CollectionUtils.isEmpty(btmTypeVOList)) {
+			//璇存槑鏄笟鍔$被鍨�
+			btmTypeVOList.forEach(this::createDbTableForBtm);
+		}
+		//閾炬帴绫诲瀷
+		/*if(!CollectionUtils.isEmpty(linkTypeVOList)){
+			linkTypeVOList.stream().forEach( s -> {
+				createDbTableForLink(s);
+			});
+		}*/
+	}
+
+	/**
+	 * 鍒涘缓涓氬姟绫诲瀷鐨勮〃鏍�
+	 *
+	 * @param btmTypeVO 涓氬姟绫诲瀷鐨勬樉绀哄璞�
+	 * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	private void createDbTableForBtm(OmdBtmTypeVO btmTypeVO) throws VciBaseException {
+		VciBaseUtil.alertNotNull(btmTypeVO, "瑕佸垱寤鸿〃鏍兼墍灞炵殑涓氬姟绫诲瀷", btmTypeVO.getTableName(), "涓氬姟绫诲瀷鐨勮〃鏍煎悕绉�");
+		if (btmTypeVO.isViewFlag() && StringUtils.isNotBlank(btmTypeVO.getViewCreateSql())) {
+			//璇存槑鏄鍥�
+			this.createViewBySql("create or replace " + btmTypeVO.getTableName() + " as " + btmTypeVO.getViewCreateSql());
+		} else {
+			String tableName = btmTypeVO.getTableName();
+			if (!checkTableExistByTableName(tableName)) {
+				String attributeSql = dllMapper.getCreateSqlByAttributeForBtm(btmTypeVO.getAttributes());
+				dllMapper.createTableBySql(tableName, attributeSql);
+				if (StringUtils.isNotBlank(btmTypeVO.getName())) {
+					dllMapper.commentTable(tableName, btmTypeVO.getName());
+				}
+				btmTypeVO.getAttributes().stream().forEach(s -> {
+					dllMapper.commentColumnTable(tableName, s.getId(), s.getName());
+				});
+			}
+		}
+	}
+
+	/**
+	 * 鎵归噺灏嗕笟鍔$被鍨嬪垱寤烘暟鎹簱琛�
+	 *
+	 * @param ids 涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呭垱寤鸿〃鍑虹幇浜嗛敊璇殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public void createDbTablesById(String ids) throws VciBaseException {
+		VciBaseUtil.alertNotNull(ids, "涓氬姟绫诲瀷/閾炬帴绫诲瀷鐨勮嫳鏂囬泦鍚�");
+		List<OmdBtmTypeVO> btmTypeVOList = OmdBtmTypeCache.selectByIdCollection(VciBaseUtil.str2List(ids));
+//		List<OsLinkTypeVO> linkTypeVOList = linkTypeService.listLinkTypeByIdCollection(VciBaseUtil.str2List(ids));
+		if (!CollectionUtils.isEmpty(btmTypeVOList)) {
+			//璇存槑鏄笟鍔$被鍨�
+			btmTypeVOList.forEach(this::createDbTableForBtm);
+		}
+		/*//璇曡瘯閾炬帴绫诲瀷
+		if(!CollectionUtils.isEmpty(linkTypeVOList)){
+			//鐨勭‘鏄摼鎺ョ被鍨�
+			linkTypeVOList.stream().forEach( s -> {
+				createDbTableForLink(s);
+			});
+		}*/
+	}
+
+	/**
+	 * 淇敼涓氬姟绫诲瀷涓殑灞炴�у瓧娈电殑闀垮害锛屾敞鎰忓湪鎵ц杩欎釜鏂规硶鏃跺氨浼氬皢浠ュ墠鐨勪簨鍔℃彁浜ゃ��
+	 *
+	 * @param modifyLengthAttrVOList 闇�瑕佷慨鏀圭殑灞炴�у璞�
+	 * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public void changeColumnForBtm(List<OmdBtmTypeAttributeVO> modifyLengthAttrVOList) throws VciBaseException {
+		VciBaseUtil.alertCollectionNotNull("瑕佷慨鏀归暱搴︾殑灞炴�ч泦", modifyLengthAttrVOList);
+		Map<String, List<OmdBtmTypeAttributeVO>> btmTypeHasAttributeVOMap = modifyLengthAttrVOList.stream().collect(Collectors.groupingBy(OmdBtmTypeAttributeVO::getPkBtmType));
+		btmTypeHasAttributeVOMap.forEach((k, v) -> {
+			OmdBtmTypeVO btmTypeVO = OmdBtmTypeCache.getDetail(k);
+			if (btmTypeVO == null || StringUtils.isBlank(btmTypeVO.getOid())) {
+				throw new VciBaseException("瑕佷慨鏀瑰睘鎬у垪闀垮害鐨勪笟鍔$被鍨嬩笉瀛樺湪");
+			}
+			if (!isCompatibilityTable(btmTypeVO.getId(), null)) {
+				//瑕佺湅鐪嬭繖涓摼鎺ョ被鍨嬪搴旂殑鏁版嵁搴撹〃鏄惁瀛樺湪
+				String tableName = btmTypeVO.getTableName();
+				if (checkTableExistByTableName(tableName)) {
+					changeColumnsForTable(tableName, v);
+				} else {
+					createDbTableForBtm(btmTypeVO);
+				}
+				changeColumnsForTable(btmTypeVO.getTableName(), v);
+			}
+		});
+	}
+
+	/**
+	 * 鎵цSQL璇彞鐨勪慨鏀�
+	 *
+	 * @param tableName       琛ㄦ牸鐨勫悕绉�
+	 * @param attributeVOList 瑕佹坊鍔犵殑灞炴�у瓧娈�
+	 */
+	private void changeColumnsForTable(String tableName, List<OmdBtmTypeAttributeVO> attributeVOList) {
+		String attributeSql = dllMapper.getCreateSqlByAttributeForBtm(attributeVOList);
+		//鍏堝垽鏂〃鏍兼槸鍚﹀瓨鍦�
+		boolean tableExist = false;
+		try {
+			ddlMapper.countAll(tableName);
+			tableExist = true;
+		} catch (Throwable e) {
+			//璇存槑琛ㄦ牸灏变笉瀛樺湪
+			createDbTables(attributeVOList.get(0).getPkBtmType());
+		}
+		if (tableExist) {
+			ddlMapper.modifyTableBySqlBase(tableName, attributeSql);
+			commentColumnsForTable(tableName, attributeVOList);
+		}
+	}
+
+	/**
+	 * 缁欒〃鏍肩殑瀛楁娣诲姞娉ㄩ噴
+	 *
+	 * @param tableName       琛ㄦ牸鍚嶇О
+	 * @param attributeVOList 灞炴�у璞″垪琛�
+	 */
+	private void commentColumnsForTable(String tableName, List<OmdBtmTypeAttributeVO> attributeVOList) {
+		if (StringUtils.isNotBlank(tableName) && !CollectionUtils.isEmpty(attributeVOList)) {
+			attributeVOList.stream().forEach(s -> {
+				ddlMapper.commentColumnTable(tableName, s.getId(), s.getName());
+			});
+		}
+	}
+
+	/**
+	 * 淇敼閾炬帴绫诲瀷涓殑灞炴�у瓧娈电殑闀垮害锛屾敞鎰忓湪鎵ц杩欎釜鏂规硶鏃跺氨浼氬皢浠ュ墠鐨勪簨鍔℃彁浜ゃ��
+	 *
+	 * @param modifyLengthAttrDOListForLinkType 闇�瑕佷慨鏀圭殑灞炴�у璞�
+	 * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public void changeColumnForLink(List<OsLinkTypeAttributeVO> modifyLengthAttrDOListForLinkType) throws VciBaseException {
+
+	}
+
+	/**
+	 * 娣诲姞灞炴�у瓧娈靛埌涓氬姟绫诲瀷涓紝娉ㄦ剰鍦ㄦ墽琛岃繖涓柟娉曟椂灏变細灏嗕互鍓嶇殑浜嬪姟鎻愪氦銆�
+	 *
+	 * @param addAttrDOList 闇�瑕佹坊鍔犵殑灞炴�у璞�
+	 * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public void addColumn2TableForBtm(List<OmdBtmTypeAttributeVO> addAttrDOList) throws VciBaseException {
+		VciBaseUtil.alertCollectionNotNull("瑕佹坊鍔犲埌鏁版嵁搴撹〃涓殑灞炴�ч泦", addAttrDOList);
+		Map<String, List<OmdBtmTypeAttributeVO>> btmTypeHasAttributeVOMap = addAttrDOList.stream().collect(Collectors.groupingBy(OmdBtmTypeAttributeVO::getPkBtmType));
+		btmTypeHasAttributeVOMap.forEach((k, v) -> {
+			OmdBtmTypeVO btmTypeVO = OmdBtmTypeCache.getDetail(k);
+			if (btmTypeVO == null || StringUtils.isBlank(btmTypeVO.getOid())) {
+				throw new com.vci.starter.web.exception.VciBaseException("瑕佷慨鏀瑰睘鎬у垪闀垮害鐨勪笟鍔$被鍨嬩笉瀛樺湪");
+			}
+			if (!isCompatibilityTable(btmTypeVO.getId(), null)) {
+				addColumnForTable(btmTypeVO.getTableName(), v);
+			}
+		});
+	}
+
+	/**
+	 * 娣诲姞瀛楁鍒拌〃鏍间腑
+	 *
+	 * @param tableName       琛ㄦ牸鍚嶇О
+	 * @param attributeVOList 灞炴�х殑鏄剧ず瀵硅薄
+	 * @throws com.vci.starter.web.exception.VciBaseException 鎵ц鎴栬�呰幏鍙杝ql璇彞鐨勬椂鍊欏嚭鐜伴敊璇細鎶涘嚭寮傚父
+	 */
+	private void addColumnForTable(String tableName, List<OmdBtmTypeAttributeVO> attributeVOList) {
+		String attributeSql = dllMapper.getCreateSqlByAttributeForBtm(attributeVOList);
+		//鍏堝垽鏂〃鏍兼槸鍚﹀瓨鍦�
+		if (!checkTableExistByTableName(tableName)) {
+			OmdBtmTypeAttributeVO attributeVO = attributeVOList.get(0);
+			createDbTables(attributeVO.getPkBtmType());
+		} else {
+			ddlMapper.addColumn2TableBySql(tableName, attributeSql);
+			commentColumnsForTable(tableName, attributeVOList);
+		}
+	}
+
+	/**
+	 * 娣诲姞灞炴�у瓧娈靛埌閾炬帴绫诲瀷涓紝娉ㄦ剰鍦ㄦ墽琛岃繖涓柟娉曟椂灏变細灏嗕互鍓嶇殑浜嬪姟鎻愪氦銆�
+	 *
+	 * @param addAttrDOListForLinkType 闇�瑕佹坊鍔犵殑灞炴�у璞�
+	 * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public void addColumn2TableForLink(List<OsLinkTypeAttributeVO> addAttrDOListForLinkType) throws VciBaseException {
+
+	}
+
+	/**
+	 * 鍒ゆ柇琛ㄤ腑鏄惁鏈夋暟鎹�
+	 *
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @return true琛ㄧず鏈夋暟鎹紝false琛ㄧず娌℃湁鏁版嵁锛屾垨鑰呰繖涓〃鏍间笉瀛樺湪鐨勬椂鍊欐姏鍑哄紓甯�
+	 * @throws VciBaseException 鍙傛暟閿欒鐨勬椂鍊欐姏鍑哄紓甯�
+	 */
+	@Override
+	public boolean checkTableHasDataByTableName(String tableName) throws VciBaseException {
+		try {
+			int tableCount = ddlMapper.countAll(tableName);
+			if (tableCount > 0) {
+				return true;
+			}
+		} catch (Throwable e) {
+			throw new VciBaseException("缁熻鏌愪釜琛ㄦ槸鍚﹀惈鏈夋暟鎹嚭閿欙紝鍙兘琛ㄤ笉瀛樺湪");
+		}
+		return false;
+	}
+
+	/**
+	 * 鍒涘缓瑙嗗浘
+	 *
+	 * @param viewCreateSql 瑙嗗浘鐨凷QL璇彞
+	 * @throws VciBaseException 鍙傛暟閿欒鎴栬�呮墽琛岄敊璇殑鏃跺�欎細鎶涘嚭寮傚父锛屾墽琛岄敊璇富瑕佸寘鎷琒QL璇彞閿欒锛屾病鏈夋潈闄愮瓑
+	 */
+	@Override
+	public void createViewBySql(String viewCreateSql) throws VciBaseException {
+		VciBaseUtil.alertNotNull(viewCreateSql, "瑙嗗浘鐨凷QL");
+		ddlMapper.createViewBySql(viewCreateSql);
+	}
+
+	/**
+	 * 鍒犻櫎琛ㄦ牸鎴栬�呰鍥�
+	 *
+	 * @param tableName 琛ㄦ牸鍚嶇О鎴栬�呰鍥惧悕绉�
+	 * @throws VciBaseException 鍙傛暟閿欒鎴栬�呮墽琛岄敊璇殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public void dropTableByName(String tableName) throws VciBaseException {
+		VciBaseUtil.alertNotNull(tableName, "瑕佸垹闄ょ殑琛ㄧ殑鍚嶇О");
+		ddlMapper.dropTable(tableName);
+	}
+
+	/**
+	 * 鍒犻櫎琛ㄦ牸鐨勬煇涓�鍒�
+	 *
+	 * @param tableName  琛ㄦ牸鍚嶇О
+	 * @param columnName 鍒楃殑鍚嶇О
+	 */
+	@Override
+	public void dropColumnByName(String tableName, String columnName) {
+		VciBaseUtil.alertNotNull(tableName, "瑕佸垹闄ょ殑琛ㄧ殑鍚嶇О", columnName, "瑕佸垹闄ょ殑琛ㄥ瓧娈靛悕绉�");
+		ddlMapper.dropTableColumn(tableName, columnName);
+	}
+
+	/**
+	 * 鏍¢獙涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑瀵瑰簲鐨勮〃鏍兼槸鍚﹀瓨鍦�
+	 *
+	 * @param pkBtmType 涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑琛ㄦ牸
+	 * @return true琛ㄧず瀛樺湪锛宖alse琛ㄧず涓嶅瓨鍦�
+	 */
+	@Override
+	public boolean checkTableExist(String pkBtmType) {
+		return checkTableExistByTableName(getTableNameByBtmTypeOid(pkBtmType));
+	}
+
+	/**
+	 * 鏍规嵁琛ㄦ牸鐨勫悕绉板垽鏂〃鏍兼槸鍚﹀瓨鍦�
+	 *
+	 * @param tableName 琛ㄦ牸鍚嶇О
+	 * @return rue琛ㄧず瀛樺湪锛宖alse琛ㄧず涓嶅瓨鍦�
+	 */
+	@Override
+	public boolean checkTableExistByTableName(String tableName) {
+		return ddlMapper.checkTableExist(tableName) > 0;
+	}
+
+	/**
+	 * 鏍¢獙涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬫墍瀵瑰簲鐨勮〃鏍兼槸鍚﹀瓨鍦�
+	 *
+	 * @param id 涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑鑻辨枃鍚嶇О
+	 * @return true琛ㄧず瀛樺湪锛宖alse琛ㄧず涓嶅瓨鍦�
+	 */
+	@Override
+	public boolean checkTableExistById(String id) {
+		return checkTableExistByTableName(getTableNameByBtmTypeId(id));
+	}
+
+	/**
+	 * 鑾峰彇鏁版嵁搴撳拰涓氬姟绫诲瀷涓殑涓嶅悓鐨勫湴鏂�
+	 *
+	 * @param btmTypeVOList  涓氬姟绫诲瀷瀵硅薄锛屾湁灞炴�ф椂闇�瑕佸寘鍚睘鎬�
+	 * @param linkTypeVOList 閾炬帴绫诲瀷瀵硅薄锛屾湁灞炴�ф椂闇�瑕佸寘鍚睘鎬�
+	 * @return 涓嶅悓鐨勫湴鏂癸紝姣忎竴涓笟鍔$被鍨嬫垨鑰呴摼鎺ョ被鍨嬩竴鏉℃暟鎹�
+	 */
+	@Override
+	public List<OsModifyAttributeInfoDO> checkDifferent(List<OmdBtmTypeVO> btmTypeVOList, List<OsLinkTypeVO> linkTypeVOList) throws VciBaseException {
+		return null;
+	}
+
+	/**
+	 * 娓呯悊涓氬姟绫诲瀷涓拰鏁版嵁搴撻噷涓嶄竴鏍风殑
+	 *
+	 * @param differentAttributeList 涓嶅悓鐨勫睘鎬х殑鍒楄〃
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮墽琛屽嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public void reflexDifferent(List<OsModifyAttributeInfoDO> differentAttributeList) throws VciBaseException {
+
+	}
+
+	/**
+	 * 鑾峰彇鏁版嵁搴撲腑鎵�鏈夌殑琛ㄦ牸
+	 *
+	 * @return 琛ㄦ牸鐨勫悕绉帮紝鍏ㄦ槸澶у啓
+	 */
+	@Override
+	public List<String> listAllTableName() {
+		return ddlMapper.selectAllTableName();
+	}
+
+	/**
+	 * 鏌ヨ鏁版嵁搴撲腑鐨勮〃鏍间俊鎭�
+	 *
+	 * @param tableNamesCollections 鏁版嵁搴撹〃鍚嶉泦鍚�
+	 * @return 鍦ㄦ暟鎹簱涓殑淇℃伅
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮暟鎹簱琛ㄤ笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<DdlTableBO> listTableInfoInDB(Collection<String> tableNamesCollections) throws VciBaseException {
+		VciBaseUtil.alertCollectionNotNull("鏁版嵁搴撹〃鍚嶇О涓嶈兘涓虹┖", tableNamesCollections);
+		List<DdlTableBO> tableBOList = new ArrayList<>();
+		tableNamesCollections.stream().forEach(s -> {
+			tableBOList.add(ddlMapper.selectTableComment(s));
+		});
+		return tableBOList;
+	}
+
+	/**
+	 * 瀵煎嚭鏁版嵁搴撲腑鐨勮〃鏍间俊鎭埌excel鏂囦欢
+	 *
+	 * @param tableNamesCollections 琛ㄦ牸鍚嶇О鐨勯泦鍚�
+	 * @param merge                 鍚堝苟琛ㄦ牸鍚嶇О
+	 * @return excel鐨勬枃浠跺悕绉�
+	 * @throws VciBaseException 铓曢涓虹┖鎴栬�呮暟鎹簱琛ㄤ笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public String exportDataBase2File(Collection<String> tableNamesCollections, boolean merge) throws VciBaseException {
+		return null;
+	}
+
+	/**
+	 * 鑾峰彇瀛樺偍鏂囦欢鎵�闇�瑕佺殑涓存椂鏂囦欢澶癸紝鏂囦欢澶逛笂宸茬粡鍖呭惈浜�
+	 *
+	 * @return 鏂囦欢澶圭殑鍦板潃锛屽鏋滈厤缃枃浠舵病鏈夐厤缃紝鍒欓粯璁よ繑鍥炲綋鍓嶉」鐩墍鍦ㄧ殑鏂囦欢澶�
+	 */
+	@Override
+	public String getTempFolder() {
+		return null;
+	}
+
+	/**
+	 * 瀵煎嚭鏁版嵁搴撲腑鐨勮〃鏍间俊鎭埌word鏂囦欢涓�
+	 *
+	 * @param tableNamesCollections 琛ㄦ牸鍚嶇О鐨勯泦鍚�
+	 * @return word鐨勬枃浠跺悕绉�
+	 * @throws VciBaseException 铓曢涓虹┖鎴栬�呮暟鎹簱琛ㄤ笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public String exportDataBase2Word(List<String> tableNamesCollections) throws VciBaseException {
+		return null;
+	}
+
+	/**
+	 * 鎷疯礉鏁版嵁鍒皐ord妯℃澘涓�
+	 *
+	 * @param tableDataBO 瑕佸啓鍏ョ殑鏁版嵁
+	 * @return word 鏂囦欢璺緞
+	 */
+	@Override
+	public String writeDataToWord(WordMergeStartTableDataBO tableDataBO) {
+		return null;
+	}
+
+	/**
+	 * 鍒ゆ柇鏄惁涓哄吋瀹规�х殑琛紝杩欎簺琛ㄤ笉搴旇琚垱寤哄拰淇敼
+	 *
+	 * @param btmTypeId  涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉�
+	 * @param linkTypeId 涓氬姟绫诲瀷鐨勪腑鏂囧悕绉�
+	 * @return true 琛ㄧず涓哄吋瀹规�х殑琛紝鐢ㄦ埛锛岃鑹诧紝閮ㄩ棬锛屾潈闄愯繖浜�
+	 */
+	@Override
+	public boolean isCompatibilityTable(String btmTypeId, String linkTypeId) {
+		return false;
+	}
+
+	/**
+	 * 涓氬姟绫诲瀷鏁版嵁搴撴柊澧炴垨淇敼琛�
+	 *
+	 * @param dto 涓氬姟绫诲瀷浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	public R submitBtmType(OmdBtmTypeDTO dto) {
+		VciBaseUtil.alertNotNull(dto, "涓氬姟绫诲瀷", dto.getAttributesDTOList(), "涓氬姟绫诲瀷灞炴��");
+		OmdBtmTypeVO btmTypeVO = Objects.requireNonNull(BeanUtil.copy(dto, OmdBtmTypeVO.class));
+		if (Func.isNotBlank(dto.getTableName())) {
+			checkModifyOrCreateTable(btmTypeVO);
+		} else {
+			if (checkTableExistById(dto.getId())) {
+				String tableName = getTableNameByBtmTypeId(dto.getId());
+				btmTypeVO.setTableName(tableName);
+				checkModifyOrCreateTable(btmTypeVO);
+			} else {
+				String tableName = TABLE_PREFIX + StringPool.UNDERSCORE + dto.getDomain().toUpperCase(Locale.ROOT) + StringPool.UNDERSCORE + dto.getId().toUpperCase(Locale.ROOT);
+				btmTypeVO.setTableName(tableName);
+				createDbTableForBtm(btmTypeVO);
+			}
+		}
+		return R.success("000000");
+	}
+
+	/**
+	 * 妫�鏌ヤ笟鍔$被鍨嬬殑琛ㄦ槸鍚﹀瓨鍦紝濡傛灉瀛樺湪鍒欐瘮杈冨樊鍒繘琛屼慨鏀癸紝涓嶅瓨鍦ㄥ垯鍒涘缓
+	 *
+	 * @param btmTypeVO 涓氬姟绫诲瀷
+	 */
+	private void checkModifyOrCreateTable(OmdBtmTypeVO btmTypeVO) {
+		if (checkTableExistByTableName(btmTypeVO.getTableName())) {
+			// 琛ㄥ凡瀛樺湪锛屾牎楠屽睘鎬�
+			List<OmdBtmTypeVO> vos = new ArrayList<>();
+			vos.add(btmTypeVO);
+			List<OsModifyAttributeInfoDO> differentAttributeList = checkDifferent(vos, null);
+			if (CollectionUtils.isEmpty(differentAttributeList)) {
+				// 鍙互鐩存帴鍒犻櫎鍐嶅垱寤�
+				dropTableByName(btmTypeVO.getTableName());
+				createDbTableForBtm(btmTypeVO);
+			} else {
+				// TODO: 淇敼鐨勬殏鏃惰繕娌″仛
+			}
+		} else {
+			createDbTableForBtm(btmTypeVO);
+		}
+	}
+
+	/**
+	 * 鎸夎〃鍚嶈幏鍙栬〃淇℃伅
+	 *
+	 * @param tableName 琛ㄥ悕
+	 * @return 琛ㄤ俊鎭�
+	 */
+	@Override
+	public DdlTableBO getTableColumnByTableName(String tableName) {
+		VciBaseUtil.alertNotNull(tableName,"琛ㄥ悕");
+		DdlTableBO tableBO = getTableInfoByTableName(tableName);
+		List<DdlTableInDataBaseBO> columnInfo = selectTableColumnInfo(tableName);
+		tableBO.setColumns(columnInfo);
+		return tableBO;
+	}
+
+	/**
+	 * 鏌ヨ鏁版嵁搴撲腑琛ㄦ牸鐨勫瓧娈典俊鎭�
+	 *
+	 * @param tableName 琛ㄦ牸鐨勫悕绉�
+	 * @return 鏁版嵁搴撹〃鐨勫瓧娈典俊鎭�
+	 */
+	private List<DdlTableInDataBaseBO> selectTableColumnInfo(String tableName) {
+		VciBaseUtil.alertNotNull(tableName, "琛ㄦ牸鍚嶇О");
+		return ddlMapper.selectTableColumnInfo(tableName);
+	}
+
+	/**
+	 * 琛ㄥ悕鑾峰彇琛ㄤ俊鎭�
+	 * @param tableName 琛ㄥ悕
+	 * @return 琛ㄤ俊鎭�
+	 */
+	private DdlTableBO getTableInfoByTableName(String tableName){
+		VciBaseUtil.alertNotNull(tableName, "琛ㄦ牸鍚嶇О");
+		return ddlMapper.selectTableComment(tableName);
+	}
+
+	/**
+	 * 鑾峰彇鎵�鏈夎〃淇℃伅
+	 *
+	 * @return 琛ㄤ俊鎭泦鍚�
+	 */
+	@Override
+	public List<DdlTableBO> getAllTableInfo() {
+		List<String> allTableName = listAllTableName();
+		if (!CollectionUtils.isEmpty(allTableName)) {
+			List<DdlTableBO> allTableBO = listTableInfoInDB(allTableName);
+			allTableBO.forEach(table -> {
+				table.setColumns(selectTableColumnInfo(table.getTableName()));
+			});
+			return allTableBO;
+		}
+		return new ArrayList<>();
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/pom.xml b/Source/UBCS/ubcs-service/ubcs-omd/pom.xml
index 8281b52..64fa44e 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/pom.xml
+++ b/Source/UBCS/ubcs-service/ubcs-omd/pom.xml
@@ -30,6 +30,11 @@
             <artifactId>ubcs-omd-api</artifactId>
             <version>3.0.1.RELEASE</version>
         </dependency>
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-util-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+        </dependency>
 <!--        <dependency>-->
 <!--            <groupId>com.vci.ubcs</groupId>-->
 <!--            <artifactId>ubcs-flow-api</artifactId>-->
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/OmdAttributeController.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/OmdAttributeController.java
index 122ecd5..b6045dd 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/OmdAttributeController.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/OmdAttributeController.java
@@ -41,7 +41,7 @@
 	/**
 	 * 鍏冩暟鎹湇鍔�
 	 */
-	private IOmdAttributeService attributeService;
+	private final IOmdAttributeService attributeService;
 
 	/**
 	 * 鏌ョ湅璇︽儏
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/OmdBtmTypeController.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/OmdBtmTypeController.java
new file mode 100644
index 0000000..80e891d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/OmdBtmTypeController.java
@@ -0,0 +1,138 @@
+package com.vci.ubcs.omd.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.omd.constant.OmdCacheConstant;
+import com.vci.ubcs.omd.dto.OmdBtmTypeDTO;
+import com.vci.ubcs.omd.entity.OmdBtmType;
+import com.vci.ubcs.omd.service.IOmdBtmTypeService;
+import com.vci.ubcs.omd.vo.OmdBtmTypeVO;
+import com.vci.ubcs.omd.wrapper.OmdBtmTypeWrapper;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import io.swagger.annotations.*;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+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.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Description: 涓氬姟绫诲瀷鎺у埗鍣�
+ *
+ * @author LiHang
+ * @date 2023/4/23
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/btm-type")
+@Api(value = "涓氬姟绫诲瀷鎺у埗鍣�", tags = "涓氬姟绫诲瀷鎺у埗鍣�")
+public class OmdBtmTypeController extends BladeController {
+
+	/**
+	 * 涓氬姟绫诲瀷鏈嶅姟
+	 */
+	private final IOmdBtmTypeService btmTypeService;
+
+
+	/**
+	 * 鏌ョ湅璇︽儏
+	 *
+	 * @param oid 涓婚敭
+	 * @return 鎵ц缁撴灉
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鏌ョ湅璇︽儏", notes = "浼犲叆涓婚敭")
+	public R<OmdBtmTypeVO> detail(String oid) {
+		return R.data(btmTypeService.getBtmTypeByOid(oid));
+	}
+
+	/**
+	 * 鍒楄〃
+	 *
+	 * @param condition 鏌ヨ鏉′欢
+	 * @return 鎵ц缁撴灉
+	 */
+	@GetMapping("/list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "oid", value = "涓婚敭", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "id", value = "涓氬姟绫诲瀷鑻辨枃鍚嶇О", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "name", value = "涓氬姟绫诲瀷涓枃鍚嶇О", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "tableName", value = "涓氬姟绫诲瀷鏁版嵁搴撹〃鍚�", paramType = "query", dataType = "string"),
+	})
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鏌ヨ鍒楄〃", notes = "浼犲叆鏌ヨ")
+	public R<List<OmdBtmTypeVO>> list(@ApiIgnore @RequestParam Map<String, Object> condition) {
+		return R.data(OmdBtmTypeWrapper.build().listEntityVO(btmTypeService.list(Condition.getQueryWrapper(condition, OmdBtmType.class).lambda().orderByAsc(OmdBtmType::getId))));
+	}
+
+	/**
+	 * 鍒嗛〉鍒楄〃
+	 *
+	 * @param condition 鏌ヨ鏉′欢
+	 */
+	@GetMapping("/page")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "oid", value = "涓婚敭", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "id", value = "涓氬姟绫诲瀷鑻辨枃鍚嶇О", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "name", value = "涓氬姟绫诲瀷涓枃鍚嶇О", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "tableName", value = "涓氬姟绫诲瀷鏁版嵁搴撹〃鍚�", paramType = "query", dataType = "string"),
+	})
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鏌ヨ鍒楄〃", notes = "浼犲叆鏌ヨ")
+	public R<IPage<OmdBtmTypeVO>> parentList(@ApiIgnore @RequestParam Map<String, Object> condition, Query query) {
+		IPage<OmdBtmTypeVO> pageVO = new Page<>();
+		IPage<OmdBtmType> page = btmTypeService.page(Condition.getPage(query), Condition.getQueryWrapper(condition, OmdBtmType.class).lambda().orderByAsc(OmdBtmType::getId));
+		BeanUtil.copy(page, pageVO);
+		pageVO.setRecords(OmdBtmTypeWrapper.build().listEntityVO(page.getRecords()));
+		return R.data(pageVO);
+	}
+
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 *
+	 * @param dto 鍏冩暟鎹〉闈紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆鍏冩暟鎹璞�")
+	public R submit(@Valid @RequestBody OmdBtmTypeDTO dto) {
+		CacheUtil.clear(OmdCacheConstant.BTM_CACHE);
+		return R.status(btmTypeService.submit(dto));
+	}
+
+	/**
+	 * 鍒犻櫎
+	 *
+	 * @param ids 涓婚敭闆嗗悎
+	 * @return 鎵ц缁撴灉
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鍒犻櫎", notes = "涓婚敭闆嗗悎")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		CacheUtil.clear(OmdCacheConstant.BTM_CACHE);
+		List<String> oidList = new ArrayList<>();
+		if (ids.contains(",")) {
+			oidList.addAll(Func.toStrList(",", ids));
+		} else {
+			oidList.add(ids);
+		}
+		return R.status(btmTypeService.removeBatchByIds(oidList));
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/OmdBtmTypeClient.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/OmdBtmTypeClient.java
new file mode 100644
index 0000000..ae445bf
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/OmdBtmTypeClient.java
@@ -0,0 +1,103 @@
+package com.vci.ubcs.omd.feign;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.vci.ubcs.omd.entity.OmdBtmType;
+import com.vci.ubcs.omd.service.IOmdBtmTypeService;
+import com.vci.ubcs.omd.vo.OmdBtmTypeVO;
+import com.vci.ubcs.omd.wrapper.OmdBtmTypeWrapper;
+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.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.*;
+
+/**
+ * Description: 涓氬姟绫诲瀷鏈嶅姟Feign瀹炵幇绫�
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@NonDS
+@ApiIgnore
+@RestController
+@AllArgsConstructor
+public class OmdBtmTypeClient implements IOmdBtmTypeClient{
+
+	private final IOmdBtmTypeService btmTypeService;
+
+
+	/**
+	 * 鍙傜収鑾峰彇涓氬姟绫诲瀷璇︽儏淇℃伅
+	 *
+	 * @param oid 涓婚敭
+	 * @return 涓氬姟绫诲瀷璇︽儏淇℃伅
+	 */
+	@Override
+	public R<OmdBtmTypeVO> getDetail(String oid) {
+		return R.data(btmTypeService.getBtmTypeByOid(oid));
+	}
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 *
+	 * @param condition 鏌ヨ鏉′欢
+	 * @param query     鍒嗛〉鏉′欢
+	 * @param domain    棰嗗煙鍊�
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public R<IPage<OmdBtmTypeVO>> getRef(Map<String, Object> condition, Query query, String domain) {
+		Func.requireNotNull(domain,"棰嗗煙鍊�");
+		IPage<OmdBtmType> page = btmTypeService.page(Condition.getPage(query), Condition.getQueryWrapper(condition, OmdBtmType.class).lambda().eq(OmdBtmType::getDomain, domain).orderByAsc(OmdBtmType::getId));
+		IPage<OmdBtmTypeVO> pageVO = new Page<>();
+		BeanUtil.copy(page,pageVO);
+		pageVO.setRecords(OmdBtmTypeWrapper.build().listEntityVO(page.getRecords()));
+		R<IPage<OmdBtmTypeVO>> r = R.data(pageVO);
+		r.setSuccess(true);
+		return r;
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鏌ヨ瀵硅薄
+	 *
+	 * @param ids 瀵硅薄鑻辨枃鍚嶇О 浣嗘槸涓嶈兘瓒呰繃1000
+	 * @return 涓氬姟瀵硅薄
+	 */
+	@Override
+	public R<List<OmdBtmTypeVO>> selectByIdCollection(List<String> ids) {
+		Func.requireNotNull(ids,"涓氬姟绫诲瀷鑻辨枃鍚嶇О");
+		List<OmdBtmTypeVO> voList = OmdBtmTypeWrapper.build().listEntityVO(
+			Optional.ofNullable(btmTypeService.list(
+					Wrappers.<OmdBtmType>query().lambda().in(OmdBtmType::getId, ids)
+				)
+			).orElseGet(ArrayList::new)
+		);
+		return R.data(voList);
+	}
+
+	/**
+	 * 鎵归噺鏍规嵁涓婚敭鑾峰彇涓氬姟绫诲瀷
+	 *
+	 * @param pkBtmTypeCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 */
+	@Override
+	public R<List<OmdBtmTypeVO>> listBtmTypeByOidCollection(Collection<String> pkBtmTypeCollection) {
+		Func.requireNotNull(pkBtmTypeCollection,"涓氬姟绫诲瀷涓婚敭");
+		List<OmdBtmTypeVO> voList = OmdBtmTypeWrapper.build().listEntityVO(
+			Optional.ofNullable(btmTypeService.list(
+					Wrappers.<OmdBtmType>query().lambda().in(OmdBtmType::getOid, pkBtmTypeCollection)
+				)
+			).orElseGet(ArrayList::new)
+		);
+		return R.data(voList);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/OmdBtmTypeAttributeMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/OmdBtmTypeAttributeMapper.java
new file mode 100644
index 0000000..f743386
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/OmdBtmTypeAttributeMapper.java
@@ -0,0 +1,13 @@
+package com.vci.ubcs.omd.mapper;
+
+import com.vci.ubcs.omd.entity.OmdBtmTypeAttribute;
+import org.springblade.core.mp.mapper.BladeMapper;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/23
+ */
+public interface OmdBtmTypeAttributeMapper extends BladeMapper<OmdBtmTypeAttribute> {
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/OmdBtmTypeMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/OmdBtmTypeMapper.java
new file mode 100644
index 0000000..a6ccb5e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/OmdBtmTypeMapper.java
@@ -0,0 +1,118 @@
+package com.vci.ubcs.omd.mapper;
+
+import com.vci.ubcs.omd.entity.OmdBtmTypeAttribute;
+import com.vci.ubcs.omd.entity.OmdBtmType;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.core.mp.mapper.BladeMapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+
+@Repository
+public interface OmdBtmTypeMapper extends BladeMapper<OmdBtmType> {
+    /**
+     * 鏍规嵁涓婚敭鍒犻櫎瀵硅薄
+     * @param oid 鐢熷懡鍛ㄦ湡涓婚敭
+     * @return 褰卞搷鐨勮鏁�
+     */
+    int deleteByPrimaryKey(String oid);
+
+    /**
+     * 鎻掑叆涓氬姟绫诲瀷
+     * @param record 瑕佹坊鍔犵殑涓氬姟绫诲瀷瀵硅薄
+     * @return 褰卞搷鐨勮鏁�
+     */
+    int insert(OmdBtmType record);
+
+    /**
+     * 鏍规嵁涓婚敭鑾峰彇鏁版嵁瀵硅薄
+     * @param oid 涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+    OmdBtmType selectByPrimaryKey(String oid);
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    List<OmdBtmType> selectByPrimaryKeys(String oids);
+
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+    List<OmdBtmType> selectByPrimaryKeyCollection(@Param("oids") Collection<String> oids);
+
+    /**
+     * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鏌ヨ瀵硅薄
+     * @param ids 瀵硅薄鑻辨枃鍚嶇О 浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 涓氬姟瀵硅薄
+     */
+    List<OmdBtmType> selectByIdCollection(@Param("ids") Collection<String> ids);
+
+    /**
+     * 鏌ヨ鍏ㄩ儴鐨勪笟鍔$被鍨�
+     * @return 涓氬姟绫诲瀷鏁版嵁瀵硅薄鍒楄〃
+     */
+    List<OmdBtmType> selectAll();
+
+    /**
+     * 鏍规嵁涓婚敭淇敼鐢熷懡鍛ㄦ湡
+     * @param record 鏁版嵁瀵硅薄
+     * @return 褰卞搷鐨勮鏁�
+     */
+    int updateByPrimaryKey(OmdBtmType record);
+
+    /**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+    String selectNameByOid(String oid);
+
+    /**
+     * 鏍规嵁鑻辨枃鍚嶇О鑾峰彇涓枃鍚嶇О
+     * @param id 鑻辨枃鍚嶇О
+     * @return 涓枃鍚嶇О
+     */
+    String selectNameById(String id);
+
+    /**
+     * 鏍规嵁灞炴�х殑涓婚敭鑾峰彇浣跨敤鐨勪笟鍔$被鍨嬪璞�
+     * @param pkAttribute 灞炴�х殑涓婚敭
+     * @return 涓氬姟绫诲瀷瀵硅薄
+     */
+    List<OmdBtmType> selectByAttributeOid(String pkAttribute);
+
+    /**
+     * 鏍规嵁鐗堟湰瑙勫垯鐨勪富閿幏鍙栦娇鐢ㄧ殑涓氬姟绫诲瀷瀵硅薄
+     * @param pkRevisionRule 鐗堟湰瑙勫垯鐨勪富閿�
+     * @return 涓氬姟绫诲瀷瀵硅薄
+     */
+    List<OmdBtmType> selectByRevisionRuleOid(String pkRevisionRule);
+
+    /**
+     * 鏍规嵁鐢熷懡鍛ㄦ湡鐨勪富閿幏鍙栦娇鐢ㄧ殑涓氬姟绫诲瀷瀵硅薄
+     * @param pkLifeCycle 鐢熷懡鍛ㄦ湡鐨勪富閿�
+     * @return 涓氬姟绫诲瀷瀵硅薄
+     */
+    List<OmdBtmType> selectByLifeCycleOid(String pkLifeCycle);
+
+
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 涓婚敭闆嗗悎
+     * @return 褰卞搷鐨勮鏁�
+     */
+    int batchDeleteByOids(@Param("oids") Collection<String> oids);
+
+    /**
+     * 鎵归噺娣诲姞
+     * @param records 鎵归噺鐨勪俊鎭�
+     * @return 鎵ц鎬绘暟
+     */
+    Long batchInsert(@Param("records") List<OmdBtmTypeAttribute> records);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java
new file mode 100644
index 0000000..740d7bd
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java
@@ -0,0 +1,103 @@
+package com.vci.ubcs.omd.repeater;
+
+import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
+import com.alibaba.cloud.nacos.NacosServiceManager;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.nacos.api.annotation.NacosInjected;
+import com.alibaba.nacos.api.exception.NacosException;
+import com.alibaba.nacos.api.naming.NamingService;
+import com.alibaba.nacos.api.naming.pojo.Instance;
+import com.vci.ubcs.omd.vo.OmdBtmTypeVO;
+import org.apache.http.Header;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.StringPool;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Repository;
+import org.springframework.web.client.RestTemplate;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * Description: 棰嗗煙杞彂鍣�
+ *
+ * @author LiHang
+ * @date 2023/4/25
+ */
+@Repository
+public class DomainRepeater {
+
+	/**
+	 * 鎺у埗鍣ㄨ矾寰�
+	 */
+	public static final String API_PREFIX = "ddl";
+
+	/**
+	 * 鏂板鎴栦慨鏀圭殑杞彂璺緞鍚嶇О
+	 */
+	public static final String API_SUBMIT_BTM_TYPE = API_PREFIX + StringPool.SLASH +"submitBtmType";
+
+	/**
+	 * 琛ㄥ悕鑾峰彇琛ㄤ俊鎭�
+	 */
+	public static final String API_GET_TABLE_INFO = API_PREFIX + StringPool.SLASH +"getTableColumnByTableName";
+
+	/**
+	 * 鑾峰彇鍏ㄩ儴琛ㄤ俊鎭�
+	 */
+	public static final String API_GET_ALL_TABLE_INFO = API_PREFIX + StringPool.SLASH +"getAllTableInfo";
+
+	@NacosInjected
+	private NamingService nacosNamingService;
+
+	@Component
+	public static class SINGLE{
+		@Autowired
+		private NacosServiceManager nacosServiceManager;
+
+		@Autowired
+		private NacosDiscoveryProperties nacosDiscoveryProperties;
+
+		private static NamingService nacosNamingService;
+
+		@PostConstruct
+		public NamingService build(){
+			  nacosNamingService = nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties());
+			  return nacosNamingService;
+		}
+	}
+
+	private RestTemplate restTemplate = new RestTemplate();
+
+	public Object submitBtmType (String serviceName, OmdBtmTypeVO omdBtmTypeVO) throws NacosException {
+
+		if (nacosNamingService == null){
+			nacosNamingService = SINGLE.nacosNamingService;
+		}
+		Instance service = nacosNamingService.selectOneHealthyInstance(AppConstant.APPLICATION_GATEWAY_NAME);
+		try {
+			String url = "http://" + service.getIp() +StringPool.COLON+ service.getPort() + StringPool.SLASH + serviceName + StringPool.SLASH + API_SUBMIT_BTM_TYPE;
+			HttpPost httpPost = buildPost(url);
+			httpPost.setEntity(new StringEntity(JSON.toJSONString(omdBtmTypeVO),"utf-8"));
+			CloseableHttpClient httpClient = HttpClientBuilder.create().build();
+			CloseableHttpResponse response = httpClient.execute(httpPost);
+			return response;
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	private HttpPost buildPost(String url){
+		HttpPost httpPost = new HttpPost(url);
+		httpPost.setHeader("Content-Type","application/json;charset=UTF-8");
+		httpPost.setHeader("Blade-Auth", AuthUtil.getHeader());
+		return httpPost;
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdAttributeService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdAttributeService.java
index fa0dd2c..ec137b3 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdAttributeService.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdAttributeService.java
@@ -1,10 +1,13 @@
 package com.vci.ubcs.omd.service;
 
 import com.vci.ubcs.omd.dto.OmdAttributeDTO;
+import com.vci.ubcs.omd.dto.OmdBtmTypeLinkAttributesDTO;
 import com.vci.ubcs.omd.entity.OmdAttribute;
 import com.vci.ubcs.omd.vo.OmdAttributeVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
 import org.springblade.core.mp.base.BaseService;
 
+import java.util.Collection;
 import java.util.List;
 
 
@@ -43,4 +46,41 @@
 	 * @return 鏌ヨ宸插簲鐢ㄧ殑涓氬姟绫诲瀷鍚嶇О
 	 */
 	List<String> applyRange(Long id);
+
+	/**
+	 * 妫�鏌ュ睘鎬ф槸鍚﹀瓨鍦�
+	 * @param keyCollections 鑻辨枃鍚嶇О闆嗗悎
+	 * @return true琛ㄧず閮藉瓨鍦紝false琛ㄧず涓嶅瓨鍦紝涓嶅瓨鍦ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+	 * @throws VciBaseException 涓嶅瓨鍦ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	boolean checkAttributeExists(Collection<String> keyCollections) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鎵归噺鑾峰彇灞炴�у璞�
+	 *
+	 * @param attributeIdCollection 鑻辨枃鍚嶇О闆嗗悎
+	 * @return 灞炴�у璞″垪琛紝濡傛灉鏈変笉瀛樺湪鐨勪笉浼氳繑鍥烇紝鍏ㄩ儴涓嶅瓨鍦ㄧ殑鍒欒繑鍥炵┖鍒楄〃
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	List<OmdAttributeVO> listAttributeByKeyCollection(Collection<String> attributeIdCollection) throws VciBaseException;
+
+	/**
+	 * 鍒ゆ柇灞炴�х殑鍐呭鏄惁绗﹀悎瑕佹眰
+	 * @param id 灞炴�х殑涓婚敭
+	 * @param attrDataType 灞炴�х殑绫诲瀷
+	 * @param attributeLength 灞炴�х殑闀垮害
+	 * @param defaultValue 榛樿鍊�
+	 * @return true琛ㄧず绗﹀悎瑕佹眰锛屼笉绗﹀悎瑕佹眰浼氭姏鍑哄紓甯�
+	 * @throws VciBaseException 涓嶇鍚堣姹備細鎶涘嚭寮傚父
+	 */
+	boolean checkAttributePass(String id,String attrDataType, Integer attributeLength, String defaultValue) throws VciBaseException;
+
+	/**
+	 * 鏍¢獙灞炴�ф槸鍚︾鍚堣姹�
+	 *
+	 * @param attributesDTO 灞炴�ф暟鎹紶杈撳璞�
+	 * @return true 绗﹀悎 false 涓嶇鍚�
+	 * @throws VciBaseException 涓嶇鍚堟椂鎶涘嚭寮傚父
+	 */
+	boolean checkAttribute(OmdBtmTypeLinkAttributesDTO attributesDTO) throws VciBaseException;
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdBtmTypeAttributeService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdBtmTypeAttributeService.java
new file mode 100644
index 0000000..a3ccf67
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdBtmTypeAttributeService.java
@@ -0,0 +1,42 @@
+package com.vci.ubcs.omd.service;
+
+import com.vci.ubcs.omd.dto.OmdBtmTypeLinkAttributesDTO;
+import com.vci.ubcs.omd.entity.OmdBtmTypeAttribute;
+import com.vci.ubcs.omd.vo.OmdAttributeVO;
+import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Description:涓氬姟绫诲瀷鍏宠仈灞炴�х殑鏈嶅姟
+ *
+ * @author LiHang
+ * @date 2023/4/23
+ */
+public interface IOmdBtmTypeAttributeService extends BaseService<OmdBtmTypeAttribute> {
+
+	/**
+	 * 妫�鏌ュ睘鎬у瓨鍦ㄥ苟娣诲姞
+	 * @param btmTypeOid 涓氬姟绫诲瀷涓婚敭
+	 * @param attributesDTOList 椤甸潰浼犺緭瀵硅薄闆嗗悎
+	 * @param creator 鍒涘缓浜�
+	 * @param now ts鏃堕棿鎴�
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int checkAndInsert(String btmTypeOid,List<OmdBtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now);
+
+	/**
+	 * 鎵归噺鎻掑叆
+	 * @param records 鏁版嵁瀵硅薄闆嗗悎
+	 */
+	int batchInsert(List<OmdBtmTypeAttribute> records);
+
+	/**
+	 * 涓氬姟绫诲瀷涓婚敭鏌ュ睘鎬�
+	 * @param btmTypeOid 涓氬姟绫诲瀷涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+    List<OmdBtmTypeAttributeVO> getAttributeByBtmTypeOid(String btmTypeOid);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdBtmTypeService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdBtmTypeService.java
new file mode 100644
index 0000000..275d3de
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdBtmTypeService.java
@@ -0,0 +1,290 @@
+package com.vci.ubcs.omd.service;
+
+import com.vci.ubcs.omd.dto.OmdBtmTypeDTO;
+import com.vci.ubcs.omd.dto.OmdBtmTypeLinkAttributesDTO;
+import com.vci.ubcs.omd.entity.OmdBtmType;
+import com.vci.ubcs.omd.entity.OmdBtmTypeAttribute;
+import com.vci.ubcs.omd.entity.OsModifyAttributeInfoDO;
+import com.vci.ubcs.omd.vo.OmdBtmTypeVO;
+import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO;
+import com.vci.ubcs.omd.vo.OsLinkTypeVO;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓氬姟绫诲瀷鏈嶅姟鎺ュ彛
+ * @author weidy
+ * @date 2019/10/13 2:33 PM
+ */
+public interface IOmdBtmTypeService extends BaseService<OmdBtmType> {
+
+    /**
+     * 璁剧疆骞冲彴鏈韩鐨勪笟鍔$被鍨�
+     * @param platformBtmType 骞冲彴鏈韩鐨勪笟鍔$被鍨�
+     */
+    void setPlatformBtmType(Collection<String> platformBtmType);
+
+    /**
+     * 鏍规嵁涓婚敭鑾峰彇涓氬姟绫诲瀷
+     * @param pkBtmType 涓氬姟绫诲瀷涓婚敭
+     * @return 涓氬姟绫诲瀷锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    OmdBtmTypeVO getBtmTypeByOid(String pkBtmType) throws ServiceException;
+
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇涓氬姟绫诲瀷
+     * @param pkBtmTypes 涓氬姟绫诲瀷涓婚敭锛岀敤閫楀彿鍒嗛殧
+     * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    List<OmdBtmTypeVO> listBtmTypeByOids(String pkBtmTypes) throws ServiceException;
+
+    /**
+     * 鎵归噺鏍规嵁涓婚敭鑾峰彇涓氬姟绫诲瀷
+     * @param pkBtmTypeCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+     * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    List<OmdBtmTypeVO> listBtmTypeByOidCollection(Collection<String> pkBtmTypeCollection) throws ServiceException;
+
+    /**
+     * 鏍规嵁鑻辨枃鍚嶇О鑾峰彇涓氬姟绫诲瀷
+     * @param id 鑻辨枃鍚嶇О
+     * @return 涓氬姟绫诲瀷锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    OmdBtmTypeVO getBtmTypeById(String id) throws ServiceException;
+
+    /**
+     * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鑾峰彇涓氬姟绫诲瀷
+     * @param ids 鑻辨枃鍚嶇О锛屼娇鐢ㄩ�楀彿鍒嗛殧
+     * @return  涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    List<OmdBtmTypeVO> listBtmTypeByIds(String ids) throws ServiceException;
+
+    /**
+     * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鎵归噺鑾峰彇涓氬姟绫诲瀷
+     * @param idCollection 鑻辨枃鍚嶇О闆嗗悎
+     * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    List<OmdBtmTypeVO> listBtmTypeByIdCollection(Collection<String> idCollection) throws ServiceException;
+
+    /**
+     * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鎵归噺鑾峰彇涓氬姟绫诲瀷鐨勬暟鎹璞�
+     * @param idCollection 鑻辨枃鍚嶇О闆嗗悎
+     * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+     * @throws ServiceException  鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    List<OmdBtmType> listBtmTypeDOByIdCollection(Collection<String> idCollection) throws ServiceException;
+
+    /**
+     * 鏍规嵁涓婚敭闆嗗悎鎵归噺鑾峰彇涓氬姟绫诲瀷鐨勬暟鎹璞�
+     * @param oidCollection 涓婚敭
+     * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+     * @throws ServiceException  鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    List<OmdBtmType> listBtmTypeDOByOidCollection(Collection<String> oidCollection) throws ServiceException;
+
+    /**
+     * 鏍规嵁涓氬姟绫诲瀷涓婚敭鑾峰彇涓枃鍚嶇О
+     * @param oid 涓氬姟绫诲瀷涓婚敭锛屽涓娇鐢ㄩ�楀彿鍒嗛殧
+     * @return 涓枃鍚嶇О锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull;澶氫釜浼氫互閫楀彿鍒嗛殧
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    String getNameByOid(String oid) throws ServiceException;
+
+    /**
+     * 鏍规嵁涓氬姟绫诲瀷鑻辨枃鍚嶇О鑾峰彇涓枃鍚嶇О
+     * @param id 涓氬姟绫诲瀷鑻辨枃鍚嶇О
+     * @return 涓枃鍚嶇О锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull;澶氫釜浼氫互閫楀彿鍒嗛殧
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    String getNameById(String id) throws ServiceException;
+
+    /**
+     * 鏍规嵁涓氬姟绫诲瀷涓婚敭鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+     * @param oid 涓氬姟绫诲瀷涓婚敭
+     * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺灞炴��
+     * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栨煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    List<OmdBtmTypeAttributeVO> listHasAttributesByOid(String oid) throws ServiceException;
+
+    /**
+     * 鏍规嵁涓氬姟绫诲瀷鑻辨枃鍚嶇О鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+     * @param id 涓氬姟绫诲瀷鑻辨枃鍚嶇О
+     * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺鍐呯疆灞炴��
+     * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+     */
+    List<OmdBtmTypeAttributeVO> listHasAttributeById(String id) throws ServiceException;
+
+    /**
+     * 鏍规嵁涓氬姟绫诲瀷涓婚敭鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+     *
+     * @param oidCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+     * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺鍐呯疆灞炴�э紝key鏄笟鍔$被鍨嬩富閿紝value鏄寘鍚殑灞炴��
+     * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+     */
+    Map<String,List<OmdBtmTypeAttributeVO>> batchListHasAttributesByOidCollection(Collection<String> oidCollection) throws ServiceException;
+
+    /**
+     * 鏍规嵁涓氬姟绫诲瀷鑻辨枃鍚嶇О鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+     *
+     * @param idCollection 涓氬姟绫诲瀷鑻辨枃鍚嶇О闆嗗悎
+     * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺鍐呯疆灞炴�э紝key鏄笟鍔$被鍨嬩富閿紝value鏄寘鍚殑灞炴��
+     * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+     */
+    Map<String,List<OmdBtmTypeAttributeVO>> batchListHasAttributesByIdCollection(Collection<String> idCollection) throws ServiceException;
+
+
+    /**
+     * 鑾峰彇浣跨敤涓氬姟绫诲瀷鐨勯摼鎺ョ被鍨�
+     * @param pkBtmType 涓氬姟绫诲瀷涓婚敭
+     * @return 寮曠敤鐨勯摼鎺ョ被鍨�
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+     */
+    List<OsLinkTypeVO> listLinkTypeForUsedBtmType(String pkBtmType) throws ServiceException;
+
+    /**
+     * 鏍¢獙涓氬姟绫诲瀷鏄惁琚紩鐢�
+     * @param pkBtmType 涓氬姟绫诲瀷鐨勪富閿�
+     * @return true琛ㄧず琚紩鐢紝 false琛ㄧず娌℃湁琚紩鐢�
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    boolean checkBtmTypeUsed(String pkBtmType) throws ServiceException;
+
+    /**
+     * 鏍¢獙涓氬姟绫诲瀷鏄惁琚紩鐢�
+     *
+     * @param oidCollection 涓氬姟绫诲瀷鐨勪富閿泦鍚�
+     * @return true琛ㄧず琚紩鐢紝 false琛ㄧず娌℃湁琚紩鐢�
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    boolean checkBtmTypeUseds(Collection<String> oidCollection) throws ServiceException;
+
+    /**
+     * 娣诲姞涓氬姟绫诲瀷
+     * @param btmTypeDTO 涓氬姟绫诲瀷鏁版嵁浼犺緭瀵硅薄
+     * @param autoCreateTable 鏄惁鑷姩鍒涘缓琛ㄦ牸
+     * @return 娣诲姞鍚庣殑涓氬姟绫诲瀷
+     * @throws ServiceException 娣诲姞鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    OmdBtmTypeDTO addSave(OmdBtmTypeDTO btmTypeDTO, boolean autoCreateTable) throws ServiceException;
+
+    /**
+     * 淇敼涓氬姟绫诲瀷
+     * @param btmTypeDTO 涓氬姟绫诲瀷鏁版嵁浼犺緭瀵硅薄
+     * @param autoEditTable 鏄惁鑷姩鏇存柊琛ㄦ牸
+     * @return 淇敼鍚庣殑涓氬姟绫诲瀷
+     * @throws ServiceException 淇敼鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    OmdBtmTypeDTO editSave(OmdBtmTypeDTO btmTypeDTO, boolean autoEditTable) throws ServiceException;
+
+    /**
+     * 鍒犻櫎涓氬姟绫诲瀷
+     * @param btmTypeVO 涓氬姟绫诲瀷鏄剧ず瀵硅薄
+     * @param autoDeleteTable 鑷姩鍒犻櫎琛ㄦ牸
+     * @throws ServiceException 濡傛灉涓氬姟绫诲瀷琚紩鐢紝鎴栬�呭垹闄ゅ嚭閿欐椂浼氭姏鍑哄紓甯�
+     */
+    void delete(OmdBtmTypeVO btmTypeVO,boolean autoDeleteTable) throws ServiceException;
+
+    /**
+     * 鎵归噺鍒犻櫎涓氬姟绫诲瀷
+     * @param btmTypeVOList 瑕佸垹闄ょ殑涓氬姟绫诲瀷鏄剧ず瀵硅薄鍒楄〃
+     * @param autoDeleteTable 鑷姩鍒犻櫎琛ㄦ牸
+     * @throws ServiceException 濡傛灉涓氬姟绫诲瀷琚紩鐢紝鎴栬�呭垹闄ゅ嚭閿欐椂浼氭姏鍑哄紓甯�
+     */
+    void batchDelete(List<OmdBtmTypeVO> btmTypeVOList,boolean autoDeleteTable) throws ServiceException;
+
+    /**
+     * 妫�鏌ヤ笟鍔$被鍨嬩笌鏁版嵁搴撹〃鏄惁涓�鑷�
+     * @param pkBtmType 涓氬姟绫诲瀷涓婚敭
+     * @return 涓嶅悓鐨勫睘鎬т俊鎭�
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+     */
+    List<OsModifyAttributeInfoDO> checkDbTableSame(String pkBtmType) throws ServiceException;
+
+    /**
+     * 鑾峰彇鏁版嵁搴撹〃锛屾敮鎸佷笟鍔$被鍨嬪拰瑙嗗浘
+     * @param id 涓氬姟绫诲瀷鐨勫悕绉�
+     * @return 鏁版嵁搴撹〃鐨勫悕绉�
+     * @throws ServiceException 鍙傛暟涓虹┖鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    String getTableName(String id) throws ServiceException;
+
+    /**
+     * 灏嗕笟鍔$被鍨嬩娇鐢ㄧ殑灞炴�х殑浼犺緭瀵硅薄杞崲涓烘暟鎹璞�
+     * @param attributesDTO 灞炴�х殑鏁版嵁浼犺緭瀵硅薄
+     * @param pkBtmType 涓氬姟绫诲瀷鐨勪富閿�
+     * @param creator 鍒涘缓浜�
+     * @param now 褰撳墠鏃堕棿
+     * @return 灞炴�х殑鏁版嵁瀵硅薄
+     */
+    OmdBtmTypeAttribute btmTypeAttributeDTO2DO(OmdBtmTypeLinkAttributesDTO attributesDTO, String pkBtmType, String creator, Date now);
+
+    /**
+     * 涓氬姟绫诲瀷鐨勫睘鎬ф樉绀哄璞¤浆鎹负鏁版嵁瀵硅薄
+     * @param thisBtmTypeHasAttributeVOList 涓氬姟绫诲瀷灞炴�ф樉绀哄璞�
+     * @return 鏁版嵁瀵硅薄
+     */
+    List<OmdBtmTypeAttribute> btmTypeAttributeVO2DO(List<OmdBtmTypeAttributeVO> thisBtmTypeHasAttributeVOList);
+
+    /**
+     * 鎵归噺灏嗕笟鍔$被鍨嬬殑鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param attributeDOList 灞炴�х殑鏁版嵁瀵硅薄鍒楄〃
+     * @return 灞炴�х殑鏄剧ず瀵硅薄鍒楄〃
+     */
+    List<OmdBtmTypeAttributeVO> batchBtmTypeAttributeDO2VO(List<OmdBtmTypeAttribute> attributeDOList);
+
+    /**
+     * 鎵归噺灏嗕笟鍔$被鍨嬬殑鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param attributesDO 灞炴�х殑鏁版嵁瀵硅薄
+     * @return 灞炴�х殑鏄剧ず瀵硅薄鍒楄〃
+     */
+    OmdBtmTypeAttributeVO btmTypeAttributeDO2VO(OmdBtmTypeAttribute attributesDO);
+
+    /**
+     * 鑾峰彇涓氬姟绫诲瀷鐨勬寚瀹氬睘鎬�
+     * @param id 閾炬帴绫诲瀷鐨勮嫳鏂囧悕绉�
+     * @param attributeIdCollection 灞炴�х殑闆嗗悎锛屽鏋滀负绌哄垯鑾峰彇鍏ㄩ儴
+     * @return 灞炴�х殑鏄剧ず瀵硅薄
+     */
+    List<OmdBtmTypeAttribute> listAttributeDOByIdsForBtm(String id, Collection<String> attributeIdCollection);
+
+    /**
+     * 鏍规嵁涓氬姟绫诲瀷鐨勭紪鍙疯幏鍙栧睘鎬�
+     * @param id 涓氬姟绫诲瀷鐨勭紪鍙�
+     * @return 灞炴�х殑鏄剧ず瀵硅薄
+     */
+    List<OmdBtmTypeAttributeVO> listAttributeByBtmTypeId(String id);
+
+    /**
+     * 鏍规嵁涓氬姟绫诲瀷鐨勪富閿幏鍙栧睘鎬�
+     * @param oid 涓氬姟绫诲瀷鐨勪富閿�
+     * @return 灞炴�х殑鏄剧ず瀵硅薄
+     */
+    List<OmdBtmTypeAttributeVO> listAttributeByBtmTypeOid(String oid);
+
+    /**
+     * 鎵归噺鏍规嵁涓氬姟绫诲瀷缂栧彿鎴栬�呬富閿幏鍙栧寘鍚殑灞炴��
+     * @param oidsOrIds 涓婚敭鎴栬�呯紪鍙烽泦鍚�
+     * @param queryById 鏄惁浣跨敤缂栧彿鏌ヨ
+     * @return key鏄笟鍔$被鍨嬬殑涓婚敭鎴栬�呯紪鍙凤紝鍊兼槸鍖呭惈鐨勫睘鎬х殑淇℃伅
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欎細鎶涘嚭寮傚父
+     */
+     List<OmdBtmTypeAttributeVO> batchListAttributeByBtmType(Collection<String> oidsOrIds, boolean queryById) throws ServiceException;
+
+	/**
+	 * 鏂板鎴栦慨鏀逛笟鍔$被鍨�
+	 * @param btmTypeDTO 涓氬姟绫诲瀷椤甸潰浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	boolean submit(OmdBtmTypeDTO btmTypeDTO);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdAttributeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdAttributeServiceImpl.java
index 1b53f5f..e993f2f 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdAttributeServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdAttributeServiceImpl.java
@@ -5,21 +5,28 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.vci.ubcs.omd.constant.OmdCacheConstant;
 import com.vci.ubcs.omd.dto.OmdAttributeDTO;
+import com.vci.ubcs.omd.dto.OmdBtmTypeLinkAttributesDTO;
 import com.vci.ubcs.omd.entity.OmdAttribute;
 import com.vci.ubcs.omd.mapper.OmdAttributeMapper;
 import com.vci.ubcs.omd.service.IOmdAttributeService;
 import com.vci.ubcs.omd.vo.OmdAttributeVO;
 import com.vci.ubcs.omd.wrapper.OmdAttributeWrapper;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.springblade.core.cache.utils.CacheUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import javax.validation.constraints.NotEmpty;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 
 /**
@@ -94,4 +101,103 @@
 	public List<String> applyRange(Long id) {
 		return new ArrayList<>();
 	}
+
+	/**
+	 * 妫�鏌ュ睘鎬ф槸鍚﹀瓨鍦�
+	 *
+	 * @param keyCollections 鑻辨枃鍚嶇О闆嗗悎
+	 * @return true琛ㄧず閮藉瓨鍦紝false琛ㄧず涓嶅瓨鍦紝涓嶅瓨鍦ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+	 * @throws VciBaseException 涓嶅瓨鍦ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public boolean checkAttributeExists(Collection<String> keyCollections) throws VciBaseException {
+		List<OmdAttributeVO> existAttributeVOList = listAttributeByKeyCollection(keyCollections);
+		if (CollectionUtils.isEmpty(existAttributeVOList)) {
+			throw new VciBaseException("浣跨敤鐨勫睘鎬ч兘鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉");
+		} else {
+			Set<String> existAttributeIdSet = (existAttributeVOList.stream().collect(Collectors.toMap(s -> s.getKey().toLowerCase().trim(), t -> t))).keySet();
+			keyCollections.stream().forEach(s -> {
+				if (!existAttributeIdSet.contains(s)) {
+					throw new VciBaseException("浣跨敤鐨勫睘鎬0}鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉", new Object[]{s});
+				}
+			});
+		}
+		return true;
+	}
+
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鎵归噺鑾峰彇灞炴�у璞�
+	 *
+	 * @param attributeIdCollection 鑻辨枃鍚嶇О闆嗗悎
+	 * @return 灞炴�у璞″垪琛紝濡傛灉鏈変笉瀛樺湪鐨勪笉浼氳繑鍥烇紝鍏ㄩ儴涓嶅瓨鍦ㄧ殑鍒欒繑鍥炵┖鍒楄〃
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<OmdAttributeVO> listAttributeByKeyCollection(Collection<String> attributeIdCollection) throws VciBaseException {
+		if(!CollectionUtils.isEmpty(attributeIdCollection)){
+			List<OmdAttribute> attributeDOList = listAttributeByKeyCollectionDO(attributeIdCollection);
+			if(!CollectionUtils.isEmpty(attributeDOList)) {
+				return OmdAttributeWrapper.build().listEntityVO(attributeDOList);
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鑾峰彇灞炴�ф暟鎹璞�
+	 * @param attributeIdCollection 灞炴�х殑鑻辨枃鍚嶇О闆嗗悎
+	 * @return 灞炴�ф暟鎹璞″垪琛紝濡傛灉鏈変笉瀛樺湪鐨勪笉浼氳繑鍥烇紝鍏ㄩ儴涓嶅瓨鍦ㄧ殑鍒欒繑鍥炵┖鍒楄〃
+	 * @throws VciBaseException mybatis鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	private List<OmdAttribute> listAttributeByKeyCollectionDO(Collection<String> attributeIdCollection) throws VciBaseException {
+		if(!CollectionUtils.isEmpty(attributeIdCollection)){
+			List<OmdAttribute> attributeDOList = new ArrayList<>();
+			Collection<String> distAttributeIdCollection = attributeIdCollection.stream().distinct().collect(Collectors.toList());
+			Collection<Collection<String>> idCollections = VciBaseUtil.switchCollectionForOracleIn(distAttributeIdCollection);
+			if(!CollectionUtils.isEmpty(idCollections)) {
+				idCollections.stream().forEach(s -> {
+					List<OmdAttribute> attributeDOS = baseMapper.selectList(Wrappers.<OmdAttribute>query().lambda().in(OmdAttribute::getKey, s));
+					if(!CollectionUtils.isEmpty(attributeDOS)){
+						attributeDOList.addAll(attributeDOS);
+					}
+				});
+			}
+			return attributeDOList;
+		}
+		return null;
+	}
+
+	/**
+	 * 鍒ゆ柇灞炴�х殑鍐呭鏄惁绗﹀悎瑕佹眰
+	 *
+	 * @param id              灞炴�х殑涓婚敭
+	 * @param attrDataType    灞炴�х殑绫诲瀷
+	 * @param attributeLength 灞炴�х殑闀垮害
+	 * @param defaultValue    榛樿鍊�
+	 * @return true琛ㄧず绗﹀悎瑕佹眰锛屼笉绗﹀悎瑕佹眰浼氭姏鍑哄紓甯�
+	 * @throws VciBaseException 涓嶇鍚堣姹備細鎶涘嚭寮傚父
+	 */
+	@Override
+	public boolean checkAttributePass(String id, String attrDataType, Integer attributeLength, String defaultValue) throws VciBaseException {
+		return true;
+	}
+
+	/**
+	 * 鏍¢獙灞炴�ф槸鍚︾鍚堣姹�
+	 *
+	 * @param attributesDTO 灞炴�ф暟鎹紶杈撳璞�
+	 * @return true 绗﹀悎 false 涓嶇鍚�
+	 * @throws VciBaseException 涓嶇鍚堟椂鎶涘嚭寮傚父
+	 */
+	@Override
+	public boolean checkAttribute(OmdBtmTypeLinkAttributesDTO attributesDTO) throws VciBaseException {
+		VciBaseUtil.alertNotNull(attributesDTO.getId(), "灞炴�х殑鑻辨枃鍚嶇О", attributesDTO.getName(), "灞炴�х殑涓枃鍚嶇О",
+			attributesDTO.getAttrDataType(), "灞炴�х殑鏁版嵁绫诲瀷");
+		boolean pass = checkAttributePass(attributesDTO.getId(), attributesDTO.getAttrDataType(), attributesDTO.getAttributeLength(), attributesDTO.getDefaultValue());
+		if (!pass){
+			throw new VciBaseException("灞炴�т笉绗﹀悎瑕佹眰");
+		}
+		return pass;
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdBtmAttributeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdBtmAttributeServiceImpl.java
new file mode 100644
index 0000000..e46d9e3
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdBtmAttributeServiceImpl.java
@@ -0,0 +1,99 @@
+package com.vci.ubcs.omd.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.omd.dto.OmdBtmTypeLinkAttributesDTO;
+import com.vci.ubcs.omd.entity.OmdBtmTypeAttribute;
+import com.vci.ubcs.omd.mapper.OmdBtmTypeAttributeMapper;
+import com.vci.ubcs.omd.service.IOmdAttributeService;
+import com.vci.ubcs.omd.service.IOmdBtmTypeAttributeService;
+import com.vci.ubcs.omd.vo.OmdAttributeVO;
+import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO;
+import com.vci.ubcs.omd.wrapper.OmdBtmTypeAttributeWrapper;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * Description: 涓氬姟绫诲瀷鍏宠仈灞炴�х殑鏈嶅姟瀹炵幇绫�
+ *
+ * @author LiHang
+ * @date 2023/4/23
+ */
+@Service
+public class OmdBtmAttributeServiceImpl extends ServiceImpl<OmdBtmTypeAttributeMapper, OmdBtmTypeAttribute> implements IOmdBtmTypeAttributeService {
+
+	@Autowired
+	private IOmdAttributeService attributeService;
+
+	@Override
+	public boolean deleteLogic(@NotEmpty List<Long> ids) {
+		return false;
+	}
+
+	@Override
+	public boolean changeStatus(@NotEmpty List<Long> ids, Integer status) {
+		return false;
+	}
+
+	/**
+	 * 妫�鏌ュ睘鎬у瓨鍦ㄥ苟娣诲姞
+	 *
+	 * @param attributesDTOList 椤甸潰浼犺緭瀵硅薄闆嗗悎
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int checkAndInsert(String btmTypeOid,List<OmdBtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now) {
+		List<String> attributeIdList = new ArrayList<>();
+		List<OmdBtmTypeAttribute> btmTypeAttributeDOList = new ArrayList<>();
+		if (!CollectionUtils.isEmpty(attributesDTOList)) {
+			attributesDTOList.stream().forEachOrdered(s -> {
+				attributeService.checkAttribute(s);
+				btmTypeAttributeDOList.add(OmdBtmTypeAttributeWrapper.build().copyBtmTypeAttributeDTO2Entity(s,btmTypeOid, creator, now));
+				attributeIdList.add(s.getId().toLowerCase().trim());
+			});
+			//妫�鏌ュ睘鎬ф槸鍚﹂兘瀛樺湪
+			boolean exists = attributeService.checkAttributeExists(attributeIdList);
+			if (!exists){
+				return -1;
+			}
+			return batchInsert(btmTypeAttributeDOList);
+//            btmTypeAttributeDOList.stream().forEachOrdered(s -> {
+//                btmTypeAttributeDOMapper.insert(s);
+//            });
+		}
+		return 0;
+	}
+
+	/**
+	 * 鎵归噺鎻掑叆
+	 *
+	 * @param records 鏁版嵁瀵硅薄闆嗗悎
+	 */
+	@Override
+	public int batchInsert(List<OmdBtmTypeAttribute> records) {
+		return baseMapper.insertBatchSomeColumn(records);
+	}
+
+	/**
+	 * 涓氬姟绫诲瀷涓婚敭鏌ュ睘鎬�
+	 * @param btmTypeOid 涓氬姟绫诲瀷涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public List<OmdBtmTypeAttributeVO> getAttributeByBtmTypeOid(String btmTypeOid){
+		Func.requireNotNull(btmTypeOid,"涓氬姟绫诲瀷涓婚敭");
+		return OmdBtmTypeAttributeWrapper.build().listEntityVO(
+			Optional.ofNullable(
+				baseMapper.selectList(Wrappers.<OmdBtmTypeAttribute>query().lambda().eq(OmdBtmTypeAttribute::getPkBtmType, btmTypeOid))
+			).orElseGet(ArrayList::new)
+		);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdBtmTypeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdBtmTypeServiceImpl.java
new file mode 100644
index 0000000..c81ccad
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdBtmTypeServiceImpl.java
@@ -0,0 +1,610 @@
+package com.vci.ubcs.omd.service.impl;
+
+import com.alibaba.cloud.commons.lang.StringUtils;
+import com.alibaba.nacos.api.exception.NacosException;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.omd.constant.OmdBtmTypeConstant;
+import com.vci.ubcs.omd.repeater.DomainRepeater;
+import com.vci.ubcs.omd.service.IOmdBtmTypeAttributeService;
+import com.vci.ubcs.omd.wrapper.OmdBtmTypeWrapper;
+import com.vci.ubcs.starter.web.constant.OmdRegExpConstant;
+import com.vci.ubcs.omd.dto.OmdBtmTypeDTO;
+import com.vci.ubcs.omd.dto.OmdBtmTypeLinkAttributesDTO;
+import com.vci.ubcs.omd.entity.OmdBtmType;
+import com.vci.ubcs.omd.entity.OmdBtmTypeAttribute;
+import com.vci.ubcs.omd.entity.OsModifyAttributeInfoDO;
+import com.vci.ubcs.omd.mapper.OmdBtmTypeMapper;
+import com.vci.ubcs.omd.service.IOmdBtmTypeService;
+import com.vci.ubcs.omd.vo.OmdBtmTypeVO;
+import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO;
+import com.vci.ubcs.omd.vo.OsLinkTypeVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.web.util.VciDateUtil;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.TransactionDefinition;
+import org.springframework.transaction.TransactionStatus;
+import org.springframework.transaction.support.DefaultTransactionDefinition;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotEmpty;
+import java.util.*;
+
+/**
+ * Description: 涓氬姟绫诲瀷鏈嶅姟鐨勫疄鐜扮被
+ *
+ * @author LiHang
+ * @date 2023/4/23
+ */
+@Service
+public class OmdBtmTypeServiceImpl extends ServiceImpl<OmdBtmTypeMapper, OmdBtmType> implements IOmdBtmTypeService {
+
+	/**
+	 * 浜嬪姟绠$悊
+	 */
+	@Autowired
+	private DataSourceTransactionManager dataSourceTransactionManager;
+
+	/**
+	 * 涓氬姟绫诲瀷鍏宠仈灞炴�ф湇鍔�
+	 */
+	@Autowired
+	private IOmdBtmTypeAttributeService btmTypeAttributeService;
+
+	@Autowired
+	private DomainRepeater domainRepeater;
+
+	/**
+	 * 璁剧疆骞冲彴鏈韩鐨勪笟鍔$被鍨�
+	 *
+	 * @param platformBtmType 骞冲彴鏈韩鐨勪笟鍔$被鍨�
+	 */
+	@Override
+	public void setPlatformBtmType(Collection<String> platformBtmType) {
+
+	}
+
+	/**
+	 * 鏍规嵁涓婚敭鑾峰彇涓氬姟绫诲瀷
+	 *
+	 * @param pkBtmType 涓氬姟绫诲瀷涓婚敭
+	 * @return 涓氬姟绫诲瀷锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public OmdBtmTypeVO getBtmTypeByOid(String pkBtmType) throws ServiceException {
+		Func.requireNotNull(pkBtmType,"涓氬姟绫诲瀷涓婚敭涓嶈兘涓虹┖");
+		OmdBtmTypeVO btmTypeVO = OmdBtmTypeWrapper.build().entityVO(baseMapper.selectOne(Wrappers.<OmdBtmType>query().lambda().eq(OmdBtmType::getOid, pkBtmType)));
+		btmTypeVO.setAttributes(btmTypeAttributeService.getAttributeByBtmTypeOid(pkBtmType));
+		return btmTypeVO;
+	}
+
+	/**
+	 * 鏍规嵁涓婚敭鎵归噺鑾峰彇涓氬姟绫诲瀷
+	 *
+	 * @param pkBtmTypes 涓氬姟绫诲瀷涓婚敭锛岀敤閫楀彿鍒嗛殧
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<OmdBtmTypeVO> listBtmTypeByOids(String pkBtmTypes) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鎵归噺鏍规嵁涓婚敭鑾峰彇涓氬姟绫诲瀷
+	 *
+	 * @param pkBtmTypeCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<OmdBtmTypeVO> listBtmTypeByOidCollection(Collection<String> pkBtmTypeCollection) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鑾峰彇涓氬姟绫诲瀷
+	 *
+	 * @param id 鑻辨枃鍚嶇О
+	 * @return 涓氬姟绫诲瀷锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public OmdBtmTypeVO getBtmTypeById(String id) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鑾峰彇涓氬姟绫诲瀷
+	 *
+	 * @param ids 鑻辨枃鍚嶇О锛屼娇鐢ㄩ�楀彿鍒嗛殧
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<OmdBtmTypeVO> listBtmTypeByIds(String ids) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鎵归噺鑾峰彇涓氬姟绫诲瀷
+	 *
+	 * @param idCollection 鑻辨枃鍚嶇О闆嗗悎
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<OmdBtmTypeVO> listBtmTypeByIdCollection(Collection<String> idCollection) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鎵归噺鑾峰彇涓氬姟绫诲瀷鐨勬暟鎹璞�
+	 *
+	 * @param idCollection 鑻辨枃鍚嶇О闆嗗悎
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<OmdBtmType> listBtmTypeDOByIdCollection(Collection<String> idCollection) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁涓婚敭闆嗗悎鎵归噺鑾峰彇涓氬姟绫诲瀷鐨勬暟鎹璞�
+	 *
+	 * @param oidCollection 涓婚敭
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<OmdBtmType> listBtmTypeDOByOidCollection(Collection<String> oidCollection) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷涓婚敭鑾峰彇涓枃鍚嶇О
+	 *
+	 * @param oid 涓氬姟绫诲瀷涓婚敭锛屽涓娇鐢ㄩ�楀彿鍒嗛殧
+	 * @return 涓枃鍚嶇О锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull;澶氫釜浼氫互閫楀彿鍒嗛殧
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public String getNameByOid(String oid) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷鑻辨枃鍚嶇О鑾峰彇涓枃鍚嶇О
+	 *
+	 * @param id 涓氬姟绫诲瀷鑻辨枃鍚嶇О
+	 * @return 涓枃鍚嶇О锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull;澶氫釜浼氫互閫楀彿鍒嗛殧
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public String getNameById(String id) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷涓婚敭鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+	 *
+	 * @param oid 涓氬姟绫诲瀷涓婚敭
+	 * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺灞炴��
+	 * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栨煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<OmdBtmTypeAttributeVO> listHasAttributesByOid(String oid) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷鑻辨枃鍚嶇О鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+	 *
+	 * @param id 涓氬姟绫诲瀷鑻辨枃鍚嶇О
+	 * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺鍐呯疆灞炴��
+	 * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public List<OmdBtmTypeAttributeVO> listHasAttributeById(String id) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷涓婚敭鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+	 *
+	 * @param oidCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+	 * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺鍐呯疆灞炴�э紝key鏄笟鍔$被鍨嬩富閿紝value鏄寘鍚殑灞炴��
+	 * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public Map<String, List<OmdBtmTypeAttributeVO>> batchListHasAttributesByOidCollection(Collection<String> oidCollection) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷鑻辨枃鍚嶇О鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+	 *
+	 * @param idCollection 涓氬姟绫诲瀷鑻辨枃鍚嶇О闆嗗悎
+	 * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺鍐呯疆灞炴�э紝key鏄笟鍔$被鍨嬩富閿紝value鏄寘鍚殑灞炴��
+	 * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public Map<String, List<OmdBtmTypeAttributeVO>> batchListHasAttributesByIdCollection(Collection<String> idCollection) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鑾峰彇浣跨敤涓氬姟绫诲瀷鐨勯摼鎺ョ被鍨�
+	 *
+	 * @param pkBtmType 涓氬姟绫诲瀷涓婚敭
+	 * @return 寮曠敤鐨勯摼鎺ョ被鍨�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public List<OsLinkTypeVO> listLinkTypeForUsedBtmType(String pkBtmType) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鏍¢獙涓氬姟绫诲瀷鏄惁琚紩鐢�
+	 *
+	 * @param pkBtmType 涓氬姟绫诲瀷鐨勪富閿�
+	 * @return true琛ㄧず琚紩鐢紝 false琛ㄧず娌℃湁琚紩鐢�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public boolean checkBtmTypeUsed(String pkBtmType) throws ServiceException {
+		return false;
+	}
+
+	/**
+	 * 鏍¢獙涓氬姟绫诲瀷鏄惁琚紩鐢�
+	 *
+	 * @param oidCollection 涓氬姟绫诲瀷鐨勪富閿泦鍚�
+	 * @return true琛ㄧず琚紩鐢紝 false琛ㄧず娌℃湁琚紩鐢�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public boolean checkBtmTypeUseds(Collection<String> oidCollection) throws ServiceException {
+		return false;
+	}
+
+	/**
+	 * 娣诲姞涓氬姟绫诲瀷
+	 *
+	 * @param btmTypeDTO      涓氬姟绫诲瀷鏁版嵁浼犺緭瀵硅薄
+	 * @param autoCreateTable 鏄惁鑷姩鍒涘缓琛ㄦ牸
+	 * @return 娣诲姞鍚庣殑涓氬姟绫诲瀷
+	 * @throws ServiceException 娣诲姞鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public OmdBtmTypeDTO addSave(OmdBtmTypeDTO btmTypeDTO, boolean autoCreateTable) throws ServiceException {
+		TransactionStatus transaction = null;
+		DefaultTransactionDefinition def = null;
+		if (autoCreateTable) {
+			def = new DefaultTransactionDefinition();
+			def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
+			// 浜嬬墿闅旂绾у埆锛屽紑鍚柊浜嬪姟锛岃繖鏍蜂細姣旇緝瀹夊叏浜涖��
+			transaction = dataSourceTransactionManager.getTransaction(def);
+			// 鑾峰緱浜嬪姟鐘舵��
+		}
+		OmdBtmType btmTypeDO = new OmdBtmType();
+		try {
+			VciBaseUtil.alertNotNull(btmTypeDTO, "瑕佹坊鍔犵殑涓氬姟绫诲瀷", btmTypeDTO.getId(), "涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉�", btmTypeDTO.getName(), "涓氬姟绫诲瀷涓枃鍚嶇О");
+			if (btmTypeDTO.isViewFlag() && (StringUtils.isBlank(btmTypeDTO.getViewCreateSql())
+				|| StringUtils.isBlank(btmTypeDTO.getTableName()))) {
+				throw new VciBaseException("濡傛灉褰撳墠鏄笟鍔$被鍨嬫槸瑙嗗浘鐨勬椂鍊欙紝璇峰繀椤昏緭鍏ヨ鍥剧殑鍒涘缓璇彞鍜岃鍥惧悕绉�");
+			}
+			if (!btmTypeDTO.isViewFlag()) {
+				VciBaseUtil.alertCollectionNotNull("灞炴��", btmTypeDTO.getAttributesDTOList());
+			}
+			if (!btmTypeDTO.getId().matches(OmdRegExpConstant.LETTER)) {
+				throw new VciBaseException("涓氬姟绫诲瀷鑻辨枃鍚嶇О鍙兘鏄函鑻辨枃锛岀洰鍓嶄负{0}", new Object[]{btmTypeDTO.getId()});
+			}
+			if (btmTypeDTO.getId().length() > 24) {
+				throw new VciBaseException("涓氬姟绫诲瀷鑻辨枃鍚嶇О涓嶈兘瓒呰繃18锛岀洰鍓嶉暱搴︿负{0}", new Object[]{btmTypeDTO.getId().length()});
+			}
+			List<OmdBtmType> btmTypeDOList = listBtmTypeDOByIdCollection(VciBaseUtil.str2List(btmTypeDTO.getId()));
+			if (!CollectionUtils.isEmpty(btmTypeDOList) && btmTypeDOList.size() > 0) {
+				OmdBtmType existBtmType = btmTypeDOList.get(0);
+				throw new VciBaseException("涓氬姟绫诲瀷鑻辨枃鍚嶇О宸茬粡瀛樺湪锛堜笉鍖哄垎澶у皬鍐欙級锛岃繖涓嫳鏂囧悕绉板搴旂殑涓枃鍚嶇О涓簕0},鍒涘缓浜簕1},鍒涘缓鏃堕棿{2}"
+					, new Object[]{existBtmType.getName(), existBtmType.getCreator(), VciDateUtil.date2Str(existBtmType.getCreateTime(), VciDateUtil.DateFormat)});
+			}
+			/*
+			//妫�鏌ヤ娇鐢ㄧ殑鐗堟湰瑙勫垯鏄惁瀛樺湪
+			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.getLifeCycleId())
+				&& !FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE.equalsIgnoreCase(btmTypeDTO.getLifeCycleId())) {
+				if (lifeCycleServiceI.checkLifeCycleExist(btmTypeDTO.getLifeCycleId())) {
+					throw new VciBaseException("鐢熷懡鍛ㄦ湡{0}[{1}]鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉",
+						new Object[]{btmTypeDTO.getLifeCycleId(), btmTypeDTO.getLifeCycleName()});
+				}
+			}
+			if (StringUtils.isNotBlank(btmTypeDTO.getSubLifeCycleId())) {
+				if (lifeCycleServiceI.checkLifeCycleExist(btmTypeDTO.getSubLifeCycleId())) {
+					throw new VciBaseException("澶囩敤鐢熷懡鍛ㄦ湡{0}[{1}]涓叾涓湁鏌愪簺鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉",
+						new Object[]{btmTypeDTO.getSubLifeCycleId(), btmTypeDTO.getSubLifeCycleName()});
+				}
+			}
+			*/
+			if (StringUtils.isBlank(btmTypeDTO.getOid())) {
+				btmTypeDTO.setOid(VciBaseUtil.getPk());
+			}
+
+			BeanUtil.copy(btmTypeDTO, btmTypeDO);
+			String creator = AuthUtil.getUserAccount();
+			Date now = new Date();
+			btmTypeDO.setCreator(creator);
+			btmTypeDO.setCreateTime(now);
+			btmTypeDO.setOwner(creator);
+			btmTypeDO.setBtmname(OmdBtmTypeConstant.OMD_BTMTYPE);
+			btmTypeDO.setTs(now);
+			if (StringUtils.isBlank(btmTypeDO.getTableName())) {
+				btmTypeDO.setTableName(getTableName(btmTypeDO.getId()));
+			}
+
+			//澶勭悊灞炴��
+			addAttributeForBtm(btmTypeDTO, creator, now);
+
+			baseMapper.insert(btmTypeDO);
+			if (autoCreateTable) {
+				dataSourceTransactionManager.commit(transaction);
+			}
+		} catch (ServiceException e) {
+			if (autoCreateTable) {
+				dataSourceTransactionManager.rollback(transaction);
+			}
+			throw e;
+		} catch (Throwable e) {
+			if (autoCreateTable) {
+				dataSourceTransactionManager.rollback(transaction);
+			}
+			throw e;
+		}
+		if (autoCreateTable) {
+			OmdBtmTypeVO btmTypeVO = OmdBtmTypeWrapper.build().entityVO(btmTypeDO);
+			btmTypeVO.setAttributes(listHasAttributesByOid(btmTypeDO.getOid()));
+			checkTableSame(btmTypeVO);
+		}
+		return btmTypeDTO;
+	}
+
+	/**
+	 * 妫�鏌ヤ笟鍔$被鍨嬬殑灞炴�ф槸鍚﹀拰鏁版嵁搴撲腑鐩稿悓
+	 *
+	 * @param btmTypeVO 涓氬姟绫诲瀷鐨勬樉绀哄璞�
+	 */
+	private void checkTableSame(OmdBtmTypeVO btmTypeVO) {
+		/*List<OmdBtmTypeVO> btmTypeVOList = new ArrayList<>();
+		btmTypeVOList.add(btmTypeVO);
+		List<OsModifyAttributeInfoDO> modifyAttributeInfoDOList = ddlServiceI.checkDifferent(btmTypeVOList, null);
+		try {
+			modifyAttributeServiceI.batchAddSave(modifyAttributeInfoDOList);
+		} catch (Throwable e) {
+			if (logger.isErrorEnabled()) {
+				logger.error("淇濆瓨銆愪慨鏀瑰睘鎬с�戞暟鎹�", e);
+			}
+		}
+		ddlServiceI.reflexDifferent(modifyAttributeInfoDOList);
+		modifyAttributeServiceI.finishModify(modifyAttributeInfoDOList);*/
+	}
+
+	/**
+	 * 娣诲姞灞炴�у埌涓氬姟绫诲瀷涓�
+	 *
+	 * @param btmTypeDTO 涓氬姟绫诲瀷鐨勬暟鎹紶杈撳璞�
+	 * @param creator    鍒涘缓浜�
+	 * @param now        褰撳墠鏃堕棿
+	 */
+	private void addAttributeForBtm(OmdBtmTypeDTO btmTypeDTO, String creator, Date now) throws VciBaseException{
+		List<OmdBtmTypeLinkAttributesDTO> attributesDTOList = btmTypeDTO.getAttributesDTOList();
+		btmTypeAttributeService.checkAndInsert(btmTypeDTO.getOid(),attributesDTOList,creator,now);
+	}
+
+	/**
+	 * 淇敼涓氬姟绫诲瀷
+	 *
+	 * @param btmTypeDTO    涓氬姟绫诲瀷鏁版嵁浼犺緭瀵硅薄
+	 * @param autoEditTable 鏄惁鑷姩鏇存柊琛ㄦ牸
+	 * @return 淇敼鍚庣殑涓氬姟绫诲瀷
+	 * @throws ServiceException 淇敼鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public OmdBtmTypeDTO editSave(OmdBtmTypeDTO btmTypeDTO, boolean autoEditTable) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鍒犻櫎涓氬姟绫诲瀷
+	 *
+	 * @param btmTypeVO       涓氬姟绫诲瀷鏄剧ず瀵硅薄
+	 * @param autoDeleteTable 鑷姩鍒犻櫎琛ㄦ牸
+	 * @throws ServiceException 濡傛灉涓氬姟绫诲瀷琚紩鐢紝鎴栬�呭垹闄ゅ嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public void delete(OmdBtmTypeVO btmTypeVO, boolean autoDeleteTable) throws ServiceException {
+
+	}
+
+	/**
+	 * 鎵归噺鍒犻櫎涓氬姟绫诲瀷
+	 *
+	 * @param btmTypeVOList   瑕佸垹闄ょ殑涓氬姟绫诲瀷鏄剧ず瀵硅薄鍒楄〃
+	 * @param autoDeleteTable 鑷姩鍒犻櫎琛ㄦ牸
+	 * @throws ServiceException 濡傛灉涓氬姟绫诲瀷琚紩鐢紝鎴栬�呭垹闄ゅ嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public void batchDelete(List<OmdBtmTypeVO> btmTypeVOList, boolean autoDeleteTable) throws ServiceException {
+
+	}
+
+	/**
+	 * 妫�鏌ヤ笟鍔$被鍨嬩笌鏁版嵁搴撹〃鏄惁涓�鑷�
+	 *
+	 * @param pkBtmType 涓氬姟绫诲瀷涓婚敭
+	 * @return 涓嶅悓鐨勫睘鎬т俊鎭�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public List<OsModifyAttributeInfoDO> checkDbTableSame(String pkBtmType) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鑾峰彇鏁版嵁搴撹〃锛屾敮鎸佷笟鍔$被鍨嬪拰瑙嗗浘
+	 *
+	 * @param id 涓氬姟绫诲瀷鐨勫悕绉�
+	 * @return 鏁版嵁搴撹〃鐨勫悕绉�
+	 * @throws ServiceException 鍙傛暟涓虹┖鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public String getTableName(String id) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 灏嗕笟鍔$被鍨嬩娇鐢ㄧ殑灞炴�х殑浼犺緭瀵硅薄杞崲涓烘暟鎹璞�
+	 *
+	 * @param attributesDTO 灞炴�х殑鏁版嵁浼犺緭瀵硅薄
+	 * @param pkBtmType     涓氬姟绫诲瀷鐨勪富閿�
+	 * @param creator       鍒涘缓浜�
+	 * @param now           褰撳墠鏃堕棿
+	 * @return 灞炴�х殑鏁版嵁瀵硅薄
+	 */
+	@Override
+	public OmdBtmTypeAttribute btmTypeAttributeDTO2DO(OmdBtmTypeLinkAttributesDTO attributesDTO, String pkBtmType, String creator, Date now) {
+		return null;
+	}
+
+	/**
+	 * 涓氬姟绫诲瀷鐨勫睘鎬ф樉绀哄璞¤浆鎹负鏁版嵁瀵硅薄
+	 *
+	 * @param thisBtmTypeHasAttributeVOList 涓氬姟绫诲瀷灞炴�ф樉绀哄璞�
+	 * @return 鏁版嵁瀵硅薄
+	 */
+	@Override
+	public List<OmdBtmTypeAttribute> btmTypeAttributeVO2DO(List<OmdBtmTypeAttributeVO> thisBtmTypeHasAttributeVOList) {
+		return null;
+	}
+
+	/**
+	 * 鎵归噺灏嗕笟鍔$被鍨嬬殑鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 *
+	 * @param attributeDOList 灞炴�х殑鏁版嵁瀵硅薄鍒楄〃
+	 * @return 灞炴�х殑鏄剧ず瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<OmdBtmTypeAttributeVO> batchBtmTypeAttributeDO2VO(List<OmdBtmTypeAttribute> attributeDOList) {
+		return null;
+	}
+
+	/**
+	 * 鎵归噺灏嗕笟鍔$被鍨嬬殑鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 *
+	 * @param attributesDO 灞炴�х殑鏁版嵁瀵硅薄
+	 * @return 灞炴�х殑鏄剧ず瀵硅薄鍒楄〃
+	 */
+	@Override
+	public OmdBtmTypeAttributeVO btmTypeAttributeDO2VO(OmdBtmTypeAttribute attributesDO) {
+		return null;
+	}
+
+	/**
+	 * 鑾峰彇涓氬姟绫诲瀷鐨勬寚瀹氬睘鎬�
+	 *
+	 * @param id                    閾炬帴绫诲瀷鐨勮嫳鏂囧悕绉�
+	 * @param attributeIdCollection 灞炴�х殑闆嗗悎锛屽鏋滀负绌哄垯鑾峰彇鍏ㄩ儴
+	 * @return 灞炴�х殑鏄剧ず瀵硅薄
+	 */
+	@Override
+	public List<OmdBtmTypeAttribute> listAttributeDOByIdsForBtm(String id, Collection<String> attributeIdCollection) {
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷鐨勭紪鍙疯幏鍙栧睘鎬�
+	 *
+	 * @param id 涓氬姟绫诲瀷鐨勭紪鍙�
+	 * @return 灞炴�х殑鏄剧ず瀵硅薄
+	 */
+	@Override
+	public List<OmdBtmTypeAttributeVO> listAttributeByBtmTypeId(String id) {
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷鐨勪富閿幏鍙栧睘鎬�
+	 *
+	 * @param oid 涓氬姟绫诲瀷鐨勪富閿�
+	 * @return 灞炴�х殑鏄剧ず瀵硅薄
+	 */
+	@Override
+	public List<OmdBtmTypeAttributeVO> listAttributeByBtmTypeOid(String oid) {
+		return null;
+	}
+
+	/**
+	 * 鎵归噺鏍规嵁涓氬姟绫诲瀷缂栧彿鎴栬�呬富閿幏鍙栧寘鍚殑灞炴��
+	 *
+	 * @param oidsOrIds 涓婚敭鎴栬�呯紪鍙烽泦鍚�
+	 * @param queryById 鏄惁浣跨敤缂栧彿鏌ヨ
+	 * @return key鏄笟鍔$被鍨嬬殑涓婚敭鎴栬�呯紪鍙凤紝鍊兼槸鍖呭惈鐨勫睘鎬х殑淇℃伅
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<OmdBtmTypeAttributeVO> batchListAttributeByBtmType(Collection<String> oidsOrIds, boolean queryById) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀逛笟鍔$被鍨�
+	 *
+	 * @param btmTypeDTO 涓氬姟绫诲瀷椤甸潰浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	public boolean submit(OmdBtmTypeDTO btmTypeDTO) {
+		//addSave(btmTypeDTO,false);
+		try {
+			Object result = domainRepeater.submitBtmType(btmTypeDTO.getDomain(), Objects.requireNonNull(BeanUtil.copy(btmTypeDTO, OmdBtmTypeVO.class)));
+			if (result instanceof R){
+				 R r = (R) result;
+				 if (r.isSuccess()){
+					 return true;
+				 }else {
+					 return false;
+				 }
+			}
+		} catch (NacosException e) {
+			throw new RuntimeException(e);
+		}
+		return true;
+	}
+
+	@Override
+	public boolean deleteLogic(@NotEmpty List<Long> ids) {
+		return false;
+	}
+
+	@Override
+	public boolean changeStatus(@NotEmpty List<Long> ids, Integer status) {
+		return false;
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdBtmTypeAttributeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdBtmTypeAttributeWrapper.java
new file mode 100644
index 0000000..dc5946f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdBtmTypeAttributeWrapper.java
@@ -0,0 +1,66 @@
+package com.vci.ubcs.omd.wrapper;
+
+import com.vci.ubcs.omd.dto.OmdBtmTypeDTO;
+import com.vci.ubcs.omd.dto.OmdBtmTypeLinkAttributesDTO;
+import com.vci.ubcs.omd.entity.OmdBtmType;
+import com.vci.ubcs.omd.entity.OmdBtmTypeAttribute;
+import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO;
+import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/23
+ */
+public class OmdBtmTypeAttributeWrapper extends BaseEntityWrapper<OmdBtmTypeAttribute, OmdBtmTypeAttributeVO> {
+
+	public static OmdBtmTypeAttributeWrapper build() {
+		return new OmdBtmTypeAttributeWrapper();
+	}
+
+	/**
+	 * do2vo
+	 * @param entity pojo
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	@Override
+	public OmdBtmTypeAttributeVO entityVO(OmdBtmTypeAttribute entity) {
+		OmdBtmTypeAttributeVO vo = Objects.requireNonNull(BeanUtil.copy(entity, OmdBtmTypeAttributeVO.class));
+		// 鍦ㄨ繖閲岃缃灇涓炬樉绀哄��
+		return vo;
+	}
+
+	/**
+	 * 鎵归噺杞瑅o
+	 * @param list pojo闆嗗悎
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	public List<OmdBtmTypeAttributeVO> listEntityVO(List<OmdBtmTypeAttribute> list) {
+		return list.stream().map(this::entityVO).collect(Collectors.toList());
+	}
+
+	/**
+	 * 鎷疯礉涓氬姟绫诲瀷 鏁版嵁浼犺緭瀵硅薄鍒� 鏁版嵁瀵硅薄
+	 *
+	 * @param dto 涓氬姟绫诲瀷鏁版嵁浼犺緭瀵硅薄
+	 * @param creator    鍒涘缓浜�
+	 * @param now        褰撴椂鏃堕棿
+	 */
+	public OmdBtmTypeAttribute copyBtmTypeAttributeDTO2Entity(OmdBtmTypeLinkAttributesDTO dto,String btmTypeOid, String creator, Date now){
+		OmdBtmTypeAttribute entity = Objects.requireNonNull(BeanUtil.copy(dto, OmdBtmTypeAttribute.class));
+		entity.setLastModifier(creator);
+		entity.setTs(now);
+		entity.setPkBtmType(btmTypeOid);
+		// 鍦ㄨ繖杩涜閫氱敤瀛楁澶勭悊
+		return entity;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdBtmTypeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdBtmTypeWrapper.java
new file mode 100644
index 0000000..2419e40
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdBtmTypeWrapper.java
@@ -0,0 +1,61 @@
+package com.vci.ubcs.omd.wrapper;
+
+import com.vci.ubcs.omd.dto.OmdBtmTypeDTO;
+import com.vci.ubcs.omd.entity.OmdBtmType;
+import com.vci.ubcs.omd.vo.OmdBtmTypeVO;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/23
+ */
+public class OmdBtmTypeWrapper extends BaseEntityWrapper<OmdBtmType, OmdBtmTypeVO> {
+	public static OmdBtmTypeWrapper build() {
+		return new OmdBtmTypeWrapper();
+	}
+
+	/**
+	 * do2vo
+	 * @param entity pojo
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	@Override
+	public OmdBtmTypeVO entityVO(OmdBtmType entity) {
+		OmdBtmTypeVO vo = Objects.requireNonNull(BeanUtil.copy(entity, OmdBtmTypeVO.class));
+		// 鍦ㄨ繖閲岃缃灇涓炬樉绀哄��
+		return vo;
+	}
+
+	/**
+	 * 鎵归噺杞瑅o
+	 * @param list pojo闆嗗悎
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	public List<OmdBtmTypeVO> listEntityVO(List<OmdBtmType> list) {
+		return list.stream().map(this::entityVO).collect(Collectors.toList());
+	}
+
+	/**
+	 * 鎷疯礉涓氬姟绫诲瀷 鏁版嵁浼犺緭瀵硅薄鍒� 鏁版嵁瀵硅薄
+	 *
+	 * @param dto 涓氬姟绫诲瀷鏁版嵁浼犺緭瀵硅薄
+	 * @param creator    鍒涘缓浜�
+	 * @param now        褰撴椂鏃堕棿
+	 */
+	public OmdBtmType copyBtmTypeDTO2Entity(OmdBtmTypeDTO dto, String creator, Date now){
+		OmdBtmType entity = Objects.requireNonNull(BeanUtil.copy(dto, OmdBtmType.class));
+		entity.setLastModifier(creator);
+		entity.setTs(now);
+		// 鍦ㄨ繖杩涜閫氱敤瀛楁澶勭悊
+		return entity;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/OmdAttributeMapper.xml b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/OmdAttributeMapper.xml
index 081ee38..d5f53fe 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/OmdAttributeMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/OmdAttributeMapper.xml
@@ -25,9 +25,9 @@
         <result column="tenant_id" property="tenantId" jdbcType="NUMERIC"/>
         <result column="key" property="key" jdbcType="VARCHAR"/>
         <result column="label" property="label" jdbcType="VARCHAR"/>
-<!--        <result column="type" property="type" jdbcType="VARCHAR"/>-->
         <result column="hashtag" property="hashtag" jdbcType="VARCHAR"/>
         <result column="description" property="description" jdbcType="VARCHAR"/>
+        <result column="ts" property="ts" jdbcType="TIMESTAMP"/>
     </resultMap>
 
     <resultMap id="extraResultMap" type="com.vci.ubcs.omd.entity.OmdAttribute">
@@ -35,14 +35,13 @@
         <result column="max_length" property="maxLength" jdbcType="NUMERIC"/>
         <result column="precision" property="precision" jdbcType="NUMERIC"/>
         <result column="refer_to_id" property="referToId" jdbcType="NUMERIC"/>
-<!--        <result column="refer_type" property="referType" jdbcType="VARCHAR"/>-->
+        <result column="refer_type_code" property="referTypeCode" jdbcType="VARCHAR"/>
+        <result column="refer_type_key" property="referTypeKey" jdbcType="VARCHAR"/>
         <result column="refer_to_name" property="referToName" jdbcType="VARCHAR"/>
-<!--        <result column="using_enum" property="usingEnum" jdbcType="VARCHAR"/>-->
-<!--        <result column="enum_key" property="enumKey" jdbcType="VARCHAR"/>-->
-<!--        <result column="enum_name" property="enumName" jdbcType="VARCHAR"/>-->
+<!--        <result column="using_dict" property="usingDict" jdbcType="VARCHAR"/>-->
+<!--        <result column="dict_code" property="dictCode" jdbcType="VARCHAR"/>-->
+<!--        <result column="dict_key" property="dictKey" jdbcType="VARCHAR"/>-->
         <result column="default_value" property="defaultValue" jdbcType="VARCHAR"/>
-        <result column="calculate_type" property="calculateType" jdbcType="VARCHAR"/>
-        <result column="calculate_value" property="calculateValue" jdbcType="VARCHAR"/>
     </resultMap>
 
 

--
Gitblit v1.9.3